aboutsummaryrefslogtreecommitdiff
path: root/test/unit/num_facets_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/num_facets_test.cpp')
-rw-r--r--test/unit/num_facets_test.cpp297
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