diff options
Diffstat (limited to 'test/unit/num_facets_test.cpp')
-rw-r--r-- | test/unit/num_facets_test.cpp | 297 |
1 files changed, 0 insertions, 297 deletions
diff --git a/test/unit/num_facets_test.cpp b/test/unit/num_facets_test.cpp deleted file mode 100644 index bc5195f..0000000 --- a/test/unit/num_facets_test.cpp +++ /dev/null @@ -1,297 +0,0 @@ -#include "locale_test.h" - -#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS) -# include <locale> -# include <sstream> -# include <stdexcept> - -# include "complete_digits.h" - -# if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) -using namespace std; -# endif - -struct ref_locale { - const char *name; - const char *decimal_point; - const char *thousands_sep; -}; - -static const ref_locale tested_locales[] = { -//{ name, decimal_point, thousands_sepy_thousands_sep}, -# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) - { "fr_FR", ",", "\xa0"}, - { "ru_RU.koi8r", ",", "."}, - { "en_GB", ".", ","}, - { "en_US", ".", ","}, -# endif - { "C", ".", ","}, -}; - -// -// tests implementation -// -void LocaleTest::_num_put_get( const locale& loc, const ref_locale* prl ) { - const ref_locale& rl = *prl; - CPPUNIT_ASSERT( has_facet<numpunct<char> >(loc) ); - numpunct<char> const& npct = use_facet<numpunct<char> >(loc); - CPPUNIT_ASSERT( npct.decimal_point() == *rl.decimal_point ); - - float val = 1234.56f; - ostringstream fostr; - fostr.imbue(loc); - fostr << val; - - string ref = "1"; - if (!npct.grouping().empty()) { - ref += npct.thousands_sep(); - } - ref += "234"; - ref += npct.decimal_point(); - ref += "56"; - //cout << "In " << loc.name() << " 1234.56 is written: " << fostr.str() << endl; - CPPUNIT_ASSERT( fostr.str() == ref ); - - val = 12345678.9f; - ref = "1"; - ref += npct.decimal_point(); - ref += "23457e+"; - string digits = "7"; - complete_digits(digits); - ref += digits; - fostr.str(""); - fostr << val; - CPPUNIT_ASSERT( fostr.str() == ref ); - - val = 1000000000.0f; - fostr.str(""); - fostr << val; - digits = "9"; - complete_digits(digits); - CPPUNIT_ASSERT( fostr.str() == string("1e+") + digits ); - - val = 1234.0f; - ref = "1"; - if (!npct.grouping().empty()) { - ref += npct.thousands_sep(); - } - ref += "234"; - fostr.str(""); - fostr << val; - CPPUNIT_ASSERT( fostr.str() == ref ); - - val = 10000001.0f; - fostr.str(""); - fostr << val; - digits = "7"; - complete_digits(digits); - CPPUNIT_ASSERT( fostr.str() == string("1e+") + digits ); - - if (npct.grouping().size() == 1 && npct.grouping()[0] == 3) { - int ival = 1234567890; - fostr.str(""); - fostr << ival; - ref = "1"; - ref += npct.thousands_sep(); - ref += "234"; - ref += npct.thousands_sep(); - ref += "567"; - ref += npct.thousands_sep(); - ref += "890"; - CPPUNIT_ASSERT( fostr.str() == ref ); - } - -#if defined (__BORLANDC__) - num_put<char> const& nput = use_facet<num_put<char> >(loc); - typedef numeric_limits<double> limd; - fostr.setf(ios_base::uppercase | ios_base::showpos); - - if (limd::has_infinity) { - double infinity = limd::infinity(); - fostr.str(""); - nput.put(fostr, fostr, ' ', infinity); - CPPUNIT_ASSERT( fostr.str() == string("+Inf") ); - } - - if (limd::has_quiet_NaN) { - /* Ignore FPU exceptions */ - unsigned int _float_control_word = _control87(0, 0); - _control87(EM_INVALID|EM_INEXACT, MCW_EM); - double qnan = limd::quiet_NaN(); - /* Reset floating point control word */ - _clear87(); - _control87(_float_control_word, MCW_EM); - fostr.str(""); - nput.put(fostr, fostr, ' ', qnan); - CPPUNIT_ASSERT( fostr.str() == string("+NaN") ); - } -#endif -} - -typedef void (LocaleTest::*_Test) (const locale&, const ref_locale*); -static void test_supported_locale(LocaleTest& inst, _Test __test) { - size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]); - for (size_t i = 0; i < n; ++i) { - locale loc; -# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) - try -# endif - { - locale tmp(tested_locales[i].name); - loc = tmp; - } -# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) - catch (runtime_error const&) { - //This locale is not supported. - continue; - } -# endif - CPPUNIT_MESSAGE( loc.name().c_str() ); - (inst.*__test)(loc, tested_locales + i); - - { - locale tmp(locale::classic(), tested_locales[i].name, locale::numeric); - loc = tmp; - } - (inst.*__test)(loc, tested_locales + i); - - { - locale tmp(locale::classic(), new numpunct_byname<char>(tested_locales[i].name)); - loc = tmp; - } - (inst.*__test)(loc, tested_locales + i); - } -} - -void LocaleTest::num_put_get() -{ test_supported_locale(*this, &LocaleTest::_num_put_get); } - -void LocaleTest::numpunct_by_name() -{ - /* - * Check of the 22.1.1.2.7 standard point. Construction of a locale - * instance from a null pointer or an unknown name should result in - * a runtime_error exception. - */ -# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) -# if defined (STLPORT) || !defined (__GNUC__) - try { - locale loc(locale::classic(), new numpunct_byname<char>(static_cast<char const*>(0))); - CPPUNIT_FAIL; - } - catch (runtime_error const& /* e */) { - //CPPUNIT_MESSAGE( e.what() ); - } - catch (...) { - CPPUNIT_FAIL; - } -# endif - - try { - locale loc(locale::classic(), new numpunct_byname<char>("yasli_language")); - CPPUNIT_FAIL; - } - catch (runtime_error const& /* e */) { - //CPPUNIT_MESSAGE( e.what() ); - } - catch (...) { - CPPUNIT_FAIL; - } - - try { - string veryLongFacetName("LC_NUMERIC="); - veryLongFacetName.append(512, '?'); - locale loc(locale::classic(), new numpunct_byname<char>(veryLongFacetName.c_str())); - CPPUNIT_FAIL; - } - catch (runtime_error const& /* e */) { - //CPPUNIT_MESSAGE( e.what() ); - } - catch (...) { - CPPUNIT_FAIL; - } - - try { - locale loc(locale::classic(), "C", locale::numeric); - } - catch (runtime_error const& e) { - CPPUNIT_MESSAGE( e.what() ); - CPPUNIT_FAIL; - } - catch (...) { - CPPUNIT_FAIL; - } - - try { - // On platform without real localization support we should rely on the "C" facet. - locale loc(locale::classic(), "", locale::numeric); - } - catch (runtime_error const& e) { - CPPUNIT_MESSAGE( e.what() ); - CPPUNIT_FAIL; - } - catch (...) { - CPPUNIT_FAIL; - } - - try { - locale loc(locale::classic(), new numpunct_byname<char>("C")); - numpunct<char> const& cfacet_byname = use_facet<numpunct<char> >(loc); - numpunct<char> const& cfacet = use_facet<numpunct<char> >(locale::classic()); - - CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() ); - CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() ); - if (!cfacet.grouping().empty()) - CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() ); -# if !defined (STLPORT) || !defined (__GLIBC__) - CPPUNIT_CHECK( cfacet_byname.truename() == cfacet.truename() ); - CPPUNIT_CHECK( cfacet_byname.falsename() == cfacet.falsename() ); -# endif - } - catch (runtime_error const& /* e */) { - //CPPUNIT_MESSAGE( e.what() ); - CPPUNIT_FAIL; - } - catch (...) { - CPPUNIT_FAIL; - } - - try { - // On platform without real localization support we should rely on the "C" locale facet. - locale loc(locale::classic(), new numpunct_byname<char>("")); - } - catch (runtime_error const& e) { - CPPUNIT_MESSAGE( e.what() ); - CPPUNIT_FAIL; - } - catch (...) { - CPPUNIT_FAIL; - } - -# if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T) -# if defined (STLPORT) || !defined (__GNUC__) - try { - locale loc(locale::classic(), new numpunct_byname<wchar_t>(static_cast<char const*>(0))); - CPPUNIT_FAIL; - } - catch (runtime_error const&) { - } - catch (...) { - CPPUNIT_FAIL; - } -# endif - - try { - locale loc(locale::classic(), new numpunct_byname<wchar_t>("yasli_language")); - CPPUNIT_FAIL; - } - catch (runtime_error const&) { - } - catch (...) { - CPPUNIT_FAIL; - } -# endif -# endif -} - -#endif |