1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "locale_test.h"
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <locale>
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <sstream>
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <stdexcept>
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include "complete_digits.h"
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std;
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct ref_locale {
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const char *name;
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const char *decimal_point;
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const char *thousands_sep;
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic const ref_locale tested_locales[] = {
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//{  name,         decimal_point, thousands_sepy_thousands_sep},
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { "fr_FR",       ",",           "\xa0"},
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { "ru_RU.koi8r", ",",           "."},
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { "en_GB",       ".",           ","},
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { "en_US",       ".",           ","},
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { "C",           ".",           ","},
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid LocaleTest::_num_put_get( const locale& loc, const ref_locale* prl ) {
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const ref_locale& rl = *prl;
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( has_facet<numpunct<char> >(loc) );
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  numpunct<char> const& npct = use_facet<numpunct<char> >(loc);
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( npct.decimal_point() == *rl.decimal_point );
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  float val = 1234.56f;
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ostringstream fostr;
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fostr.imbue(loc);
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fostr << val;
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  string ref = "1";
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (!npct.grouping().empty()) {
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ref += npct.thousands_sep();
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ref += "234";
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ref += npct.decimal_point();
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ref += "56";
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //cout << "In " << loc.name() << " 1234.56 is written: " << fostr.str() << endl;
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( fostr.str() == ref );
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  val = 12345678.9f;
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ref = "1";
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ref += npct.decimal_point();
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ref += "23457e+";
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  string digits = "7";
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  complete_digits(digits);
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ref += digits;
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fostr.str("");
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fostr << val;
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( fostr.str() == ref );
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  val = 1000000000.0f;
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fostr.str("");
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fostr << val;
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  digits = "9";
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  complete_digits(digits);
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( fostr.str() == string("1e+") + digits );
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  val = 1234.0f;
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ref = "1";
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (!npct.grouping().empty()) {
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ref += npct.thousands_sep();
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ref += "234";
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fostr.str("");
80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fostr << val;
81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( fostr.str() == ref );
82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  val = 10000001.0f;
84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fostr.str("");
85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fostr << val;
86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  digits = "7";
87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  complete_digits(digits);
88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( fostr.str() == string("1e+") + digits );
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (npct.grouping().size() == 1 && npct.grouping()[0] == 3) {
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int ival = 1234567890;
92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    fostr.str("");
93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    fostr << ival;
94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ref = "1";
95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ref += npct.thousands_sep();
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ref += "234";
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ref += npct.thousands_sep();
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ref += "567";
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ref += npct.thousands_sep();
100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ref += "890";
101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( fostr.str() == ref );
102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__BORLANDC__)
105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  num_put<char> const& nput = use_facet<num_put<char> >(loc);
106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef numeric_limits<double> limd;
107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fostr.setf(ios_base::uppercase | ios_base::showpos);
108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (limd::has_infinity) {
110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    double infinity = limd::infinity();
111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    fostr.str("");
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    nput.put(fostr, fostr, ' ', infinity);
113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( fostr.str() == string("+Inf") );
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (limd::has_quiet_NaN) {
117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    /* Ignore FPU exceptions */
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    unsigned int _float_control_word = _control87(0, 0);
119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _control87(EM_INVALID|EM_INEXACT, MCW_EM);
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    double qnan = limd::quiet_NaN();
121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    /* Reset floating point control word */
122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _clear87();
123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _control87(_float_control_word, MCW_EM);
124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    fostr.str("");
125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    nput.put(fostr, fostr, ' ', qnan);
126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( fostr.str() == string("+NaN") );
127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttypedef void (LocaleTest::*_Test) (const locale&, const ref_locale*);
132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic void test_supported_locale(LocaleTest& inst, _Test __test) {
133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);
134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for (size_t i = 0; i < n; ++i) {
135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc;
136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    try
138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      locale tmp(tested_locales[i].name);
141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      loc = tmp;
142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    catch (runtime_error const&) {
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //This locale is not supported.
146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      continue;
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_MESSAGE( loc.name().c_str() );
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    (inst.*__test)(loc, tested_locales + i);
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      locale tmp(locale::classic(), tested_locales[i].name, locale::numeric);
154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      loc = tmp;
155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    (inst.*__test)(loc, tested_locales + i);
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      locale tmp(locale::classic(), new numpunct_byname<char>(tested_locales[i].name));
160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      loc = tmp;
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    (inst.*__test)(loc, tested_locales + i);
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid LocaleTest::num_put_get()
167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ test_supported_locale(*this, &LocaleTest::_num_put_get); }
168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid LocaleTest::numpunct_by_name()
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  /*
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * Check of the 22.1.1.2.7 standard point. Construction of a locale
173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * instance from a null pointer or an unknown name should result in
174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * a runtime_error exception.
175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   */
176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if defined (STLPORT) || !defined (__GNUC__)
178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new numpunct_byname<char>(static_cast<char const*>(0)));
180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( e.what() );
184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new numpunct_byname<char>("yasli_language"));
192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( e.what() );
196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    string veryLongFacetName("LC_NUMERIC=");
203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    veryLongFacetName.append(512, '?');
204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new numpunct_byname<char>(veryLongFacetName.c_str()));
205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( e.what() );
209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), "C", locale::numeric);
216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& e) {
218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_MESSAGE( e.what() );
219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // On platform without real localization support we should rely on the "C" facet.
227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), "", locale::numeric);
228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& e) {
230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_MESSAGE( e.what() );
231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new numpunct_byname<char>("C"));
239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    numpunct<char> const& cfacet_byname = use_facet<numpunct<char> >(loc);
240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    numpunct<char> const& cfacet = use_facet<numpunct<char> >(locale::classic());
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() );
243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() );
244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (!cfacet.grouping().empty())
245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() );
246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if !defined (STLPORT) || !defined (__GLIBC__)
247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( cfacet_byname.truename() == cfacet.truename() );
248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( cfacet_byname.falsename() == cfacet.falsename() );
249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( e.what() );
253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // On platform without real localization support we should rely on the "C" locale facet.
261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new numpunct_byname<char>(""));
262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& e) {
264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_MESSAGE( e.what() );
265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)
272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      if defined (STLPORT) || !defined (__GNUC__)
273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new numpunct_byname<wchar_t>(static_cast<char const*>(0)));
275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const&) {
278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      endif
283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new numpunct_byname<wchar_t>("yasli_language"));
286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const&) {
289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
298