ReactOS  0.4.14-dev-384-g5b37caa
money_facets_test.cpp
Go to the documentation of this file.
1 #include "locale_test.h"
2 
3 #if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)
4 # include <locale>
5 # include <sstream>
6 # include <stdexcept>
7 
8 # if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
9 using namespace std;
10 # endif
11 
12 struct ref_monetary {
13  const char *name;
14  const char *money_int_prefix;
15  const char *money_int_prefix_old;
16  const char *money_prefix;
17  const char *money_suffix;
18  const char *money_decimal_point;
19  const char *money_thousands_sep;
20 };
21 
22 static const ref_monetary tested_locales[] = {
23 //{ name, money_int_prefix, money_int_prefix_old, money_prefix, money_suffix, money_decimal_point, money_thousands_sep},
24 # if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
25  { "fr_FR", "EUR ", "FRF ", "", "", ",",
26 # if defined (WIN32) || defined (_WIN32)
27  "\xa0" },
28 # else
29  " " },
30 # endif
31  { "ru_RU.koi8r", "RUB ", "RUR ", "", "\xd2\xd5\xc2", ".", " " },
32  { "en_GB", "GBP ", "", "\xa3", "", ".", "," },
33  { "en_US", "USD ", "", "$", "", ".", "," },
34 # endif
35  { "C", "", "", "", "", " ", " " },
36 };
37 
38 
40 {
41  if (i < sizeof(tested_locales) / sizeof(tested_locales[0])) {
42  return tested_locales + i;
43  }
44  return 0;
45 }
46 
48 {
49  return _ref->name;
50 }
51 
52 void LocaleTest::_money_put_get( const locale& loc, const ref_monetary* rl )
53 {
54  _money_put_get2(loc, loc, rl);
55 }
56 
57 void LocaleTest::_money_put_get2( const locale& loc, const locale& streamLoc, const ref_monetary* prl )
58 {
59  const ref_monetary &rl = *prl;
61  money_put<char> const& fmp = use_facet<money_put<char> >(loc);
63  money_get<char> const& fmg = use_facet<money_get<char> >(loc);
64 
65  ostringstream ostr;
66  ostr.imbue(streamLoc);
67  ostr << showbase;
68 
69  //Check a positive value (international format)
70  {
71  string str_res;
72  //money_put
73  {
75  moneypunct<char, true> const& intl_fmp = use_facet<moneypunct<char, true> >(loc);
76 
77  ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, true, ostr, ' ', 123456);
78 
79  CPPUNIT_ASSERT( !res.failed() );
80  str_res = ostr.str();
81  //CPPUNIT_MESSAGE(str_res.c_str());
82 
83  size_t fieldIndex = 0;
84  size_t index = 0;
85 
86  //On a positive value we skip the sign field if exists:
87  if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
88  ++fieldIndex;
89  }
90  // international currency abbreviation, if it is before value
91 
92  /*
93  * int_curr_symbol
94  *
95  * The international currency symbol. The operand is a four-character
96  * string, with the first three characters containing the alphabetic
97  * international currency symbol in accordance with those specified
98  * in the ISO 4217 specification. The fourth character is the character used
99  * to separate the international currency symbol from the monetary quantity.
100  *
101  * (http://www.opengroup.org/onlinepubs/7990989775/xbd/locale.html)
102  */
103  string::size_type p = strlen( rl.money_int_prefix );
104  if (p != 0) {
105  CPPUNIT_ASSERT( intl_fmp.pos_format().field[fieldIndex] == money_base::symbol );
106  string::size_type p_old = strlen( rl.money_int_prefix_old );
107  CPPUNIT_ASSERT( (str_res.substr(index, p) == rl.money_int_prefix) ||
108  ((p_old != 0) &&
109  (str_res.substr(index, p_old) == rl.money_int_prefix_old)) );
110  if ( str_res.substr(index, p) == rl.money_int_prefix ) {
111  index += p;
112  } else {
113  index += p_old;
114  }
115  ++fieldIndex;
116  }
117 
118  // space after currency
119  if (intl_fmp.pos_format().field[fieldIndex] == money_base::space ||
120  intl_fmp.pos_format().field[fieldIndex] == money_base::none) {
121  // iternational currency symobol has four chars, one of these chars
122  // is separator, so if format has space on this place, it should
123  // be skipped.
124  ++fieldIndex;
125  }
126 
127  // sign
128  if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
129  ++fieldIndex;
130  }
131 
132  // value
133  CPPUNIT_ASSERT( str_res[index++] == '1' );
134  if (!intl_fmp.grouping().empty()) {
135  CPPUNIT_ASSERT( str_res[index++] == /* intl_fmp.thousands_sep() */ *rl.money_thousands_sep );
136  }
137  CPPUNIT_ASSERT( str_res[index++] == '2' );
138  CPPUNIT_ASSERT( str_res[index++] == '3' );
139  CPPUNIT_ASSERT( str_res[index++] == '4' );
140  if (intl_fmp.frac_digits() != 0) {
141  CPPUNIT_ASSERT( str_res[index++] == /* intl_fmp.decimal_point() */ *rl.money_decimal_point );
142  }
143  CPPUNIT_ASSERT( str_res[index++] == '5' );
144  CPPUNIT_ASSERT( str_res[index++] == '6' );
145  ++fieldIndex;
146 
147  // sign
148  if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
149  ++fieldIndex;
150  }
151 
152  // space
153  if (intl_fmp.pos_format().field[fieldIndex] == money_base::space ) {
154  CPPUNIT_ASSERT( str_res[index++] == ' ' );
155  ++fieldIndex;
156  }
157 
158  // sign
159  if (intl_fmp.pos_format().field[fieldIndex] == money_base::sign) {
160  ++fieldIndex;
161  }
162 
163  //as space cannot be last the only left format can be none:
164  while ( fieldIndex < 3 ) {
165  CPPUNIT_ASSERT( intl_fmp.pos_format().field[fieldIndex] == money_base::none );
166  ++fieldIndex;
167  }
168  }
169 
170  //money_get
171  {
172  ios_base::iostate err = ios_base::goodbit;
173  string digits;
174 
175  istringstream istr(str_res);
176  ostr.str( "" );
177  ostr.clear();
178  fmg.get(istr, istreambuf_iterator<char, char_traits<char> >(), true, ostr, err, digits);
179  CPPUNIT_ASSERT( (err & (ios_base::failbit | ios_base::badbit)) == 0 );
180  CPPUNIT_ASSERT( digits == "123456" );
181  }
182  }
183 
184  ostr.str("");
185  //Check a negative value (national format)
186  {
188  moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);
189  string str_res;
190  //Check money_put
191  {
192  ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', -123456);
193 
194  CPPUNIT_ASSERT( !res.failed() );
195  str_res = ostr.str();
196  //CPPUNIT_MESSAGE(str_res.c_str());
197 
198  size_t fieldIndex = 0;
199  size_t index = 0;
200 
201  if (dom_fmp.neg_format().field[fieldIndex] == money_base::sign) {
202  CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.negative_sign().size()) == dom_fmp.negative_sign() );
203  index += dom_fmp.negative_sign().size();
204  ++fieldIndex;
205  }
206 
207  string::size_type p = strlen( rl.money_prefix );
208  if (p != 0) {
209  CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );
210  index += p;
211  ++fieldIndex;
212  }
213  if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||
214  dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
215  CPPUNIT_ASSERT( str_res[index++] == ' ' );
216  ++fieldIndex;
217  }
218 
219  CPPUNIT_ASSERT( str_res[index++] == '1' );
220  if (!dom_fmp.grouping().empty()) {
221  CPPUNIT_ASSERT( str_res[index++] == dom_fmp.thousands_sep() );
222  }
223  CPPUNIT_ASSERT( str_res[index++] == '2' );
224  CPPUNIT_ASSERT( str_res[index++] == '3' );
225  CPPUNIT_ASSERT( str_res[index++] == '4' );
226  if (dom_fmp.frac_digits() != 0) {
227  CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );
228  }
229  CPPUNIT_ASSERT( str_res[index++] == '5' );
230  CPPUNIT_ASSERT( str_res[index++] == '6' );
231  ++fieldIndex;
232 
233  //space cannot be last:
234  if ((fieldIndex < 3) &&
235  dom_fmp.neg_format().field[fieldIndex] == money_base::space) {
236  CPPUNIT_ASSERT( str_res[index++] == ' ' );
237  ++fieldIndex;
238  }
239 
240  if (fieldIndex == 3) {
241  //If none is last we should not add anything to the resulting string:
242  if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
243  CPPUNIT_ASSERT( index == str_res.size() );
244  } else {
245  CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );
246  CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );
247  }
248  }
249  }
250 
251  //money_get
252  {
253  ios_base::iostate err = ios_base::goodbit;
254 # if defined (STLPORT)
256 # else
257  long double val;
258 # endif
259 
260  istringstream istr(str_res);
261  fmg.get(istr, istreambuf_iterator<char, char_traits<char> >(), false, ostr, err, val);
262  CPPUNIT_ASSERT( (err & (ios_base::failbit | ios_base::badbit)) == 0 );
263  if (dom_fmp.negative_sign().empty()) {
264  //Without negative sign there is no way to guess the resulting amount sign ("C" locale):
265  CPPUNIT_ASSERT( val == 123456 );
266  }
267  else {
268  CPPUNIT_ASSERT( val == -123456 );
269  }
270  }
271  }
272 }
273 
274 
275 // Test for bug in case when number of digits in value less then number
276 // of digits in fraction. I.e. '9' should be printed as '0.09',
277 // if x.frac_digits() == 2.
278 
279 void LocaleTest::_money_put_X_bug( const locale& loc, const ref_monetary* prl )
280 {
281  const ref_monetary &rl = *prl;
283  money_put<char> const& fmp = use_facet<money_put<char> >(loc);
284 
285  ostringstream ostr;
286  ostr.imbue(loc);
287  ostr << showbase;
288 
289  // ostr.str("");
290  // Check value with one decimal digit:
291  {
293  moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);
294  string str_res;
295  // Check money_put
296  {
297  ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', 9);
298 
299  CPPUNIT_ASSERT( !res.failed() );
300  str_res = ostr.str();
301 
302  size_t fieldIndex = 0;
303  size_t index = 0;
304 
305  if (dom_fmp.pos_format().field[fieldIndex] == money_base::sign) {
306  CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.positive_sign().size()) == dom_fmp.positive_sign() );
307  index += dom_fmp.positive_sign().size();
308  ++fieldIndex;
309  }
310 
311  string::size_type p = strlen( rl.money_prefix );
312  if (p != 0) {
313  CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );
314  index += p;
315  ++fieldIndex;
316  }
317  if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||
318  dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
319  CPPUNIT_ASSERT( str_res[index++] == ' ' );
320  ++fieldIndex;
321  }
322  if (dom_fmp.frac_digits() != 0) {
323  CPPUNIT_ASSERT( str_res[index++] == '0' );
324  CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );
325  for ( int fd = 1; fd < dom_fmp.frac_digits(); ++fd ) {
326  CPPUNIT_ASSERT( str_res[index++] == '0' );
327  }
328  }
329  CPPUNIT_ASSERT( str_res[index++] == '9' );
330  ++fieldIndex;
331 
332  //space cannot be last:
333  if ((fieldIndex < 3) &&
334  dom_fmp.neg_format().field[fieldIndex] == money_base::space) {
335  CPPUNIT_ASSERT( str_res[index++] == ' ' );
336  ++fieldIndex;
337  }
338 
339  if (fieldIndex == 3) {
340  //If none is last we should not add anything to the resulting string:
341  if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
342  CPPUNIT_ASSERT( index == str_res.size() );
343  } else {
344  CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );
345  CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );
346  }
347  }
348  }
349  }
350 
351  ostr.str("");
352  // Check value with two decimal digit:
353  {
355  moneypunct<char, false> const& dom_fmp = use_facet<moneypunct<char, false> >(loc);
356  string str_res;
357  // Check money_put
358  {
359  ostreambuf_iterator<char, char_traits<char> > res = fmp.put(ostr, false, ostr, ' ', 90);
360 
361  CPPUNIT_ASSERT( !res.failed() );
362  str_res = ostr.str();
363 
364  size_t fieldIndex = 0;
365  size_t index = 0;
366 
367  if (dom_fmp.pos_format().field[fieldIndex] == money_base::sign) {
368  CPPUNIT_ASSERT( str_res.substr(index, dom_fmp.positive_sign().size()) == dom_fmp.positive_sign() );
369  index += dom_fmp.positive_sign().size();
370  ++fieldIndex;
371  }
372 
373  string::size_type p = strlen( rl.money_prefix );
374  if (p != 0) {
375  CPPUNIT_ASSERT( str_res.substr(index, p) == rl.money_prefix );
376  index += p;
377  ++fieldIndex;
378  }
379  if (dom_fmp.neg_format().field[fieldIndex] == money_base::space ||
380  dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
381  CPPUNIT_ASSERT( str_res[index++] == ' ' );
382  ++fieldIndex;
383  }
384  if (dom_fmp.frac_digits() != 0) {
385  CPPUNIT_ASSERT( str_res[index++] == '0' );
386  CPPUNIT_ASSERT( str_res[index++] == dom_fmp.decimal_point() );
387  for ( int fd = 1; fd < dom_fmp.frac_digits() - 1; ++fd ) {
388  CPPUNIT_ASSERT( str_res[index++] == '0' );
389  }
390  }
391  CPPUNIT_ASSERT( str_res[index++] == '9' );
392  if (dom_fmp.frac_digits() != 0) {
393  CPPUNIT_ASSERT( str_res[index++] == '0' );
394  }
395  ++fieldIndex;
396 
397  //space cannot be last:
398  if ((fieldIndex < 3) &&
399  dom_fmp.neg_format().field[fieldIndex] == money_base::space) {
400  CPPUNIT_ASSERT( str_res[index++] == ' ' );
401  ++fieldIndex;
402  }
403 
404  if (fieldIndex == 3) {
405  //If none is last we should not add anything to the resulting string:
406  if (dom_fmp.neg_format().field[fieldIndex] == money_base::none) {
407  CPPUNIT_ASSERT( index == str_res.size() );
408  } else {
409  CPPUNIT_ASSERT( dom_fmp.neg_format().field[fieldIndex] == money_base::symbol );
410  CPPUNIT_ASSERT( str_res.substr(index, strlen(rl.money_suffix)) == rl.money_suffix );
411  }
412  }
413  }
414  }
415 }
416 
417 typedef void (LocaleTest::*_Test) (const locale&, const ref_monetary*);
418 static void test_supported_locale(LocaleTest& inst, _Test __test) {
419  size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);
420  for (size_t i = 0; i < n; ++i) {
421  locale loc;
422 # if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
423  try
424 # endif
425  {
426  locale tmp(tested_locales[i].name);
427  loc = tmp;
428  }
429 # if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
430  catch (runtime_error const&) {
431  //This locale is not supported.
432  continue;
433  }
434 # endif
435  CPPUNIT_MESSAGE( loc.name().c_str() );
436  (inst.*__test)(loc, tested_locales + i);
437 
438  {
439  locale tmp(locale::classic(), tested_locales[i].name, locale::monetary);
440  loc = tmp;
441  }
442  (inst.*__test)(loc, tested_locales + i);
443 
444  {
447  loc = tmp1;
448  }
449  (inst.*__test)(loc, tested_locales + i);
450  }
451 }
452 
455 
458 
460 {
461  /*
462  * Check of the 22.1.1.2.7 standard point. Construction of a locale
463  * instance from a null pointer or an unknown name should result in
464  * a runtime_error exception.
465  */
466 # if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
467 # if defined (STLPORT) || !defined (__GNUC__)
468  try {
469  locale loc(locale::classic(), new moneypunct_byname<char, true>(static_cast<char const*>(0)));
470  CPPUNIT_FAIL;
471  }
472  catch (runtime_error const&) {
473  }
474  catch (...) {
475  CPPUNIT_FAIL;
476  }
477 # endif
478 
479  try {
480  locale loc(locale::classic(), new moneypunct_byname<char, true>("yasli_language"));
481  CPPUNIT_FAIL;
482  }
483  catch (runtime_error const&) {
484  }
485  catch (...) {
486  CPPUNIT_FAIL;
487  }
488 
489  try {
490  string veryLongFacetName("LC_MONETARY=");
491  veryLongFacetName.append(512, '?');
492  locale loc(locale::classic(), new moneypunct_byname<char, true>(veryLongFacetName.c_str()));
493  CPPUNIT_FAIL;
494  }
495  catch (runtime_error const& /* e */) {
496  //CPPUNIT_MESSAGE( e.what() );
497  }
498  catch (...) {
499  CPPUNIT_FAIL;
500  }
501 
502 # if defined (STLPORT) || !defined (__GNUC__)
503  try {
504  locale loc(locale::classic(), new moneypunct_byname<char, false>(static_cast<char const*>(0)));
505  CPPUNIT_FAIL;
506  }
507  catch (runtime_error const&) {
508  }
509  catch (...) {
510  CPPUNIT_FAIL;
511  }
512 # endif
513 
514  try {
515  locale loc(locale::classic(), new moneypunct_byname<char, false>("yasli_language"));
516  CPPUNIT_FAIL;
517  }
518  catch (runtime_error const&) {
519  }
520  catch (...) {
521  CPPUNIT_FAIL;
522  }
523 
524  try {
525  string veryLongFacetName("LC_MONETARY=");
526  veryLongFacetName.append(512, '?');
527  locale loc(locale::classic(), new moneypunct_byname<char, false>(veryLongFacetName.c_str()));
528  CPPUNIT_FAIL;
529  }
530  catch (runtime_error const& /* e */) {
531  //CPPUNIT_MESSAGE( e.what() );
532  }
533  catch (...) {
534  CPPUNIT_FAIL;
535  }
536 
537  try {
539  moneypunct<char, false> const& cfacet_byname = use_facet<moneypunct<char, false> >(loc);
540  moneypunct<char, false> const& cfacet = use_facet<moneypunct<char, false> >(locale::classic());
541 
542  money_base::pattern cp = cfacet.pos_format();
543  money_base::pattern cp_bn = cfacet_byname.pos_format();
544  CPPUNIT_CHECK( cp_bn.field[0] == cp.field[0] );
545  CPPUNIT_CHECK( cp_bn.field[1] == cp.field[1] );
546  CPPUNIT_CHECK( cp_bn.field[2] == cp.field[2] );
547  CPPUNIT_CHECK( cp_bn.field[3] == cp.field[3] );
548 
549  CPPUNIT_CHECK( cfacet_byname.frac_digits() == cfacet.frac_digits() );
550  if (cfacet_byname.frac_digits() != 0)
551  CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() );
552  CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() );
553  if (!cfacet_byname.grouping().empty())
554  CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() );
555  CPPUNIT_CHECK( cfacet_byname.positive_sign() == cfacet.positive_sign() );
556  CPPUNIT_CHECK( cfacet_byname.negative_sign() == cfacet.negative_sign() );
557  }
558  catch (runtime_error const& /* e */) {
559  /* CPPUNIT_MESSAGE( e.what() ); */
560  CPPUNIT_FAIL;
561  }
562  catch (...) {
563  CPPUNIT_FAIL;
564  }
565 
566  try {
568  moneypunct<char, true> const& cfacet_byname = use_facet<moneypunct<char, true> >(loc);
569  moneypunct<char, true> const& cfacet = use_facet<moneypunct<char, true> >(locale::classic());
570 
571  money_base::pattern cp = cfacet.pos_format();
572  money_base::pattern cp_bn = cfacet_byname.pos_format();
573  CPPUNIT_CHECK( cp_bn.field[0] == cp.field[0] );
574  CPPUNIT_CHECK( cp_bn.field[1] == cp.field[1] );
575  CPPUNIT_CHECK( cp_bn.field[2] == cp.field[2] );
576  CPPUNIT_CHECK( cp_bn.field[3] == cp.field[3] );
577 
578  CPPUNIT_CHECK( cfacet_byname.frac_digits() == cfacet.frac_digits() );
579  if (cfacet_byname.frac_digits() != 0)
580  CPPUNIT_CHECK( cfacet_byname.decimal_point() == cfacet.decimal_point() );
581  CPPUNIT_CHECK( cfacet_byname.grouping() == cfacet.grouping() );
582  if (!cfacet_byname.grouping().empty())
583  CPPUNIT_CHECK( cfacet_byname.thousands_sep() == cfacet.thousands_sep() );
584  CPPUNIT_CHECK( cfacet_byname.positive_sign() == cfacet.positive_sign() );
585  CPPUNIT_CHECK( cfacet_byname.negative_sign() == cfacet.negative_sign() );
586  }
587  catch (runtime_error const& /* e */) {
588  /* CPPUNIT_MESSAGE( e.what() ); */
589  CPPUNIT_FAIL;
590  }
591  catch (...) {
592  CPPUNIT_FAIL;
593  }
594 
595  try {
596  // On platform without real localization support we should rely on the "C" locale facet.
598  }
599  catch (runtime_error const& /* e */) {
600  /* CPPUNIT_MESSAGE( e.what() ); */
601  CPPUNIT_FAIL;
602  }
603  catch (...) {
604  CPPUNIT_FAIL;
605  }
606 
607 # if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)
608 # if defined (STLPORT) || !defined (__GNUC__)
609  try {
610  locale loc(locale::classic(), new moneypunct_byname<wchar_t, true>(static_cast<char const*>(0)));
611  CPPUNIT_FAIL;
612  }
613  catch (runtime_error const&) {
614  }
615  catch (...) {
616  CPPUNIT_FAIL;
617  }
618 # endif
619 
620  try {
621  locale loc(locale::classic(), new moneypunct_byname<wchar_t, true>("yasli_language"));
622  CPPUNIT_FAIL;
623  }
624  catch (runtime_error const&) {
625  }
626  catch (...) {
627  CPPUNIT_FAIL;
628  }
629 
630 # if defined (STLPORT) || !defined (__GNUC__)
631  try {
632  locale loc(locale::classic(), new moneypunct_byname<wchar_t, false>(static_cast<char const*>(0)));
633  CPPUNIT_FAIL;
634  }
635  catch (runtime_error const&) {
636  }
637  catch (...) {
638  CPPUNIT_FAIL;
639  }
640 # endif
641 
642  try {
643  locale loc(locale::classic(), new moneypunct_byname<wchar_t, false>("yasli_language"));
644  CPPUNIT_FAIL;
645  }
646  catch (runtime_error const&) {
647  }
648  catch (...) {
649  CPPUNIT_FAIL;
650  }
651 # endif
652 # endif
653 }
654 
655 #endif
int frac_digits() const
Definition: _monetary.h:98
const char * name
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
static void test_supported_locale(LocaleTest &inst, _Test __test)
basic_ostringstream< char, char_traits< char >, allocator< char > > ostringstream
Definition: _iosfwd.h:127
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
string_type positive_sign() const
Definition: _monetary.h:136
static const ref_monetary * _get_ref_monetary(size_t)
ios_base &_STLP_CALL showbase(ios_base &__s)
Definition: _ios_base.h:273
pattern neg_format() const
Definition: _monetary.h:140
char decimal_point() const
Definition: _monetary.h:132
const char * money_thousands_sep
void _money_put_get2(const STD locale &loc, const STD locale &streamLoc, const ref_monetary *)
char decimal_point() const
Definition: _monetary.h:92
GLdouble n
Definition: glext.h:7729
static int fd
Definition: io.c:51
char thousands_sep() const
Definition: _monetary.h:93
void _money_put_X_bug(const STD locale &, const ref_monetary *)
Definition: features.h:417
#define _STLP_LONGEST_FLOAT_TYPE
Definition: features.h:213
static const char * _get_ref_monetary_name(const ref_monetary *)
string_type negative_sign() const
Definition: _monetary.h:137
const char * money_decimal_point
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
pattern pos_format() const
Definition: _monetary.h:139
Definition: _locale.h:75
static const locale &_STLP_CALL classic()
Definition: locale.cpp:404
string_type negative_sign() const
Definition: _monetary.h:97
static const ref_monetary tested_locales[]
const char * money_prefix
GLuint index
Definition: glext.h:6031
GLuint GLfloat * val
Definition: glext.h:7180
bool has_facet(const locale &__loc) _STLP_NOTHROW
Definition: _locale.h:304
string grouping() const
Definition: _monetary.h:134
#define CPPUNIT_CHECK(X)
Definition: cppunit_mini.h:195
void moneypunct_by_name()
string_type positive_sign() const
Definition: _monetary.h:96
const char * money_int_prefix_old
string grouping() const
Definition: _monetary.h:94
pattern pos_format() const
Definition: _monetary.h:99
const char * money_suffix
int iostate
Definition: _ios_base.h:58
iter_type put(iter_type __s, bool __intl, ios_base &__str, char_type __fill, _STLP_LONGEST_FLOAT_TYPE __units) const
Definition: _monetary.h:395
void _money_put_get(const STD locale &, const ref_monetary *)
const char * money_int_prefix
#define CPPUNIT_FAIL
Definition: cppunit_mini.h:206
#define err(...)
#define CPPUNIT_ASSERT(X)
Definition: cppunit_mini.h:200
char thousands_sep() const
Definition: _monetary.h:133
iter_type get(iter_type __s, iter_type __end, bool __intl, ios_base &__str, ios_base::iostate &__err, _STLP_LONGEST_FLOAT_TYPE &__units) const
Definition: _monetary.h:61
string name() const
Definition: locale.cpp:388
POINT cp
Definition: magnifier.c:59
Definition: name.c:36
GLuint res
Definition: glext.h:9613
void(LocaleTest::* _Test)(const locale &, const ref_monetary *)
GLfloat GLfloat p
Definition: glext.h:8902
static const int digits[]
Definition: decode.c:71
#define CPPUNIT_MESSAGE(m)
Definition: cppunit_mini.h:223