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 <stdexcept>
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std;
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic const char* tested_locales[] = {
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//name,
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // We need exception support to check support of the following localizations.
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  "fr_FR",
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  "ru_RU.koi8r",
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  "en_GB",
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  "en_US",
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  "",
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  "C"
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid LocaleTest::_ctype_facet( const locale& loc)
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( has_facet<ctype<char> >(loc) );
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ctype<char> const& ct = use_facet<ctype<char> >(loc);
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //is
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.is(ctype_base::digit, '0') );
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.is(ctype_base::upper, 'A') );
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.is(ctype_base::lower, 'a') );
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.is(ctype_base::alpha, 'A') );
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.is(ctype_base::space, ' ') );
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !ct.is(ctype_base::space, '2') );
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.is(ctype_base::punct, '.') );
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.is(ctype_base::xdigit, 'a') );
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //is range
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char values[] = "0Aa .";
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask res[sizeof(values)];
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ct.is(values, values + sizeof(values), res);
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // '0'
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[0] & ctype_base::print) != 0 );
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[0] & ctype_base::digit) != 0 );
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[0] & ctype_base::xdigit) != 0 );
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // 'A'
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[1] & ctype_base::print) != 0 );
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[1] & ctype_base::alpha) != 0 );
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[1] & ctype_base::xdigit) != 0 );
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[1] & ctype_base::upper) != 0 );
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // 'a'
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[2] & ctype_base::print) != 0 );
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[2] & ctype_base::alpha) != 0 );
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[2] & ctype_base::xdigit) != 0 );
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[2] & ctype_base::lower) != 0 );
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[2] & ctype_base::space) == 0 );
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // ' '
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[3] & ctype_base::print) != 0 );
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[3] & ctype_base::space) != 0 );
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[3] & ctype_base::digit) == 0 );
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // '.'
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[4] & ctype_base::print) != 0 );
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[4] & ctype_base::punct) != 0 );
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (res[4] & ctype_base::digit) == 0 );
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //scan_is
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char range[] = "abAc123 .";
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const char *rbeg = range;
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const char *rend = range + sizeof(range);
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const char *res;
80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = ct.scan_is((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);
81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( res != rend );
82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( *res == 'a' );
83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = ct.scan_is(ctype_base::upper, rbeg, rend);
85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( res != rend );
86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( *res == 'A' );
87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = ct.scan_is(ctype_base::punct, rbeg, rend);
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( res != rend );
90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( *res == '.' );
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //scan_not
94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char range[] = "abAc123 .";
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const char *rbeg = range;
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const char *rend = range + sizeof(range);
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const char *res;
100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = ct.scan_not((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);
101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( res != rend );
102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( *res == '1' );
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = ct.scan_not(ctype_base::alpha, rbeg, rend);
105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( res != rend );
106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( *res == '1' );
107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = ct.scan_not(ctype_base::punct, rbeg, rend);
109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( res != rend );
110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( *res == 'a' );
111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //toupper
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.toupper('a') == 'A' );
116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.toupper('A') == 'A' );
117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.toupper('1') == '1' );
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //toupper range
121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char range[] = "abAc1";
123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char expected_range[] = "ABAC1";
124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ct.toupper(range, range + sizeof(range));
125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( equal(range, range + sizeof(range), expected_range) );
126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //tolower
129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.tolower('A') == 'a' );
131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.tolower('a') == 'a' );
132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.tolower('1') == '1' );
133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //tolower range
136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char range[] = "ABaC1";
138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char expected_range[] = "abac1";
139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ct.tolower(range, range + sizeof(range));
140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( equal(range, range + sizeof(range), expected_range) );
141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //widen
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.widen('a') == 'a' );
146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //widen range
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char range[] = "ABaC1";
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char res[sizeof(range)];
152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ct.widen(range, range + sizeof(range), res);
153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( equal(range, range + sizeof(range), res) );
154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //narrow
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.narrow('a', 'b') == 'a' );
159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //narrow range
162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char range[] = "ABaC1";
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char res[sizeof(range)];
165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ct.narrow(range, range + sizeof(range), 'b', res);
166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( equal(range, range + sizeof(range), res) );
167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid LocaleTest::_ctype_facet_w( const locale& loc )
171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_NO_WCHAR_T
173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( has_facet<ctype<wchar_t> >(loc) );
174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ctype<wchar_t> const& wct = use_facet<ctype<wchar_t> >(loc);
175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //is
176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.is(ctype_base::digit, L'0') );
178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.is(ctype_base::upper, L'A') );
179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.is(ctype_base::lower, L'a') );
180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.is(ctype_base::alpha, L'A') );
181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.is(ctype_base::space, L' ') );
182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( !wct.is(ctype_base::space, L'2') );
183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.is(ctype_base::punct, L'.') );
184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.is(ctype_base::xdigit, L'a') );
185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //is range
188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t values[] = L"0Aa .";
190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask res[sizeof(values) / sizeof(wchar_t)];
191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wct.is(values, values + (sizeof(values) / sizeof(wchar_t)), res);
192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // '0'
193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[0] & ctype_base::print) != 0 );
194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[0] & ctype_base::digit) != 0 );
195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[0] & ctype_base::xdigit) != 0 );
196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // 'A'
197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[1] & ctype_base::print) != 0 );
198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[1] & ctype_base::alpha) != 0 );
199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[1] & ctype_base::xdigit) != 0 );
200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[1] & ctype_base::upper) != 0 );
201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // 'a'
202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[2] & ctype_base::print) != 0 );
203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[2] & ctype_base::alpha) != 0 );
204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[2] & ctype_base::xdigit) != 0 );
205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[2] & ctype_base::lower) != 0 );
206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[2] & ctype_base::space) == 0 );
207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // ' '
208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[3] & ctype_base::print) != 0 );
209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[3] & ctype_base::space) != 0 );
210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[3] & ctype_base::digit) == 0 );
211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // '.'
212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[4] & ctype_base::print) != 0 );
213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[4] & ctype_base::punct) != 0 );
214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( (res[4] & ctype_base::digit) == 0 );
215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //scan_is
218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t range[] = L"abAc123 .";
220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const wchar_t *rbeg = range;
221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const wchar_t *rend = range + (sizeof(range) / sizeof(wchar_t));
222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const wchar_t *res;
224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = wct.scan_is((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( res != rend );
226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( *res == L'a' );
227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = wct.scan_is(ctype_base::upper, rbeg, rend);
229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( res != rend );
230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( *res == L'A' );
231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = wct.scan_is(ctype_base::punct, rbeg, rend);
233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( res != rend );
234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( *res == L'.' );
235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //scan_not
238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t range[] = L"abAc123 .";
240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const wchar_t *rbeg = range;
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const wchar_t *rend = range + (sizeof(range) / sizeof(wchar_t));
242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const wchar_t *res;
244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = wct.scan_not((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);
245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( res != rend );
246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( *res == L'1' );
247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = wct.scan_not(ctype_base::alpha, rbeg, rend);
249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( res != rend );
250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( *res == L'1' );
251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    res = wct.scan_not(ctype_base::punct, rbeg, rend);
253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( res != rend );
254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( *res == L'a' );
255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //toupper
258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.toupper(L'a') == L'A' );
260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.toupper(L'A') == L'A' );
261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.toupper(L'1') == L'1' );
262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //toupper range
265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t range[] = L"abAc1";
267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t expected_range[] = L"ABAC1";
268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wct.toupper(range, range + sizeof(range) / sizeof(wchar_t));
269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( equal(range, range + sizeof(range) / sizeof(wchar_t), expected_range) );
270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //tolower
273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.tolower(L'A') == L'a' );
275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.tolower(L'a') == L'a' );
276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.tolower(L'1') == L'1' );
277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //tolower range
280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t range[] = L"ABaC1";
282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t expected_range[] = L"abac1";
283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wct.tolower(range, range + sizeof(range) / sizeof(wchar_t));
284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( equal(range, range + sizeof(range) / sizeof(wchar_t), expected_range) );
285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //widen
288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.widen('a') == L'a' );
290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //widen range
293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char range[] = "ABaC1";
295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t res[sizeof(range)];
296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t expected_res[] = L"ABaC1";
297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wct.widen(range, range + sizeof(range), res);
298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( equal(expected_res, expected_res + sizeof(range), res) );
299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //narrow
302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( wct.narrow(L'a', 'b') == L'a' );
304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //narrow range
307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t range[] = L"ABaC1";
309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char res[sizeof(range) / sizeof(wchar_t)];
310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char expected_res[] = "ABaC1";
311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wct.narrow(range, range + sizeof(range) / sizeof(wchar_t), 'b', res);
312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( equal(expected_res, expected_res + sizeof(range) / sizeof(wchar_t), res) );
313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif
315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttypedef void (LocaleTest::*_Test) (const locale&);
319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic void test_supported_locale(LocaleTest& inst, _Test __test) {
320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);
321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for (size_t i = 0; i < n; ++i) {
322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc;
323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    try
325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      locale tmp(tested_locales[i]);
328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      loc = tmp;
329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    catch (runtime_error const&) {
332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //This locale is not supported.
333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      continue;
334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_MESSAGE( loc.name().c_str() );
338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    (inst.*__test)(loc);
339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      locale tmp(locale::classic(), tested_locales[i], locale::ctype);
342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      loc = tmp;
343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    (inst.*__test)(loc);
345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      locale tmp(locale::classic(), new ctype_byname<char>(tested_locales[i]));
348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      locale tmp0(tmp, new ctype_byname<wchar_t>(tested_locales[i]));
350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      tmp = tmp0;
351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      loc = tmp;
353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    (inst.*__test)(loc);
355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid LocaleTest::ctype_facet()
359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  test_supported_locale(*this, &LocaleTest::_ctype_facet);
361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T
362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  test_supported_locale(*this, &LocaleTest::_ctype_facet_w);
363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid LocaleTest::ctype_by_name()
367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  /*
369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * Check of the 22.1.1.2.7 standard point. Construction of a locale
370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * instance from a null pointer or an unknown name should result in
371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * a runtime_error exception.
372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   */
373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if  defined (STLPORT) || (!defined(__GNUC__) && (!defined (_MSC_VER) || (_MSC_VER > 1400)))
375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   // libstdc++ call freelocate on bad locale
376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new ctype_byname<char>(static_cast<char const*>(0)));
378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( false );
379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( e.what() );
382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( false );
385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new ctype_byname<char>("yasli_language"));
390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( e.what() );
394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if  defined(STLPORT) || !defined(__GNUC__)
400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new codecvt_byname<char, char, mbstate_t>(static_cast<char const*>(0)));
402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( e.what() );
406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new codecvt_byname<char, char, mbstate_t>("yasli_language"));
414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //STLport implementation do not care about name pass to this facet.
415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if !defined (STLPORT)
416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( e.what() );
421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new ctype_byname<char>("fr_FR"));
428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( has_facet<ctype<char> >(loc) );
429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype<char> const& ct = use_facet<ctype<char> >(loc);
430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ct.is(ctype_base::mask(ctype_base::print | ctype_base::lower | ctype_base::alpha), '�') );
431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( e.what() );
434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new ctype_byname<char>("C"));
441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype<char> const& cfacet_byname = use_facet<ctype<char> >(loc);
442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype<char> const& cfacet = use_facet<ctype<char> >(locale::classic());
443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    for (char c = 0;; ++c) {
445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::space, c) == cfacet.is(ctype_base::space, c));
446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (cfacet_byname.is(ctype_base::print, c) != cfacet.is(ctype_base::print, c))
447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      {
448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        CPPUNIT_CHECK(cfacet_byname.is(ctype_base::print, c) == cfacet.is(ctype_base::print, c));
449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::cntrl, c) == cfacet.is(ctype_base::cntrl, c));
451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::upper, c) == cfacet.is(ctype_base::upper, c));
452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::lower, c) == cfacet.is(ctype_base::lower, c));
453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::alpha, c) == cfacet.is(ctype_base::alpha, c));
454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::digit, c) == cfacet.is(ctype_base::digit, c));
455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::punct, c) == cfacet.is(ctype_base::punct, c));
456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::xdigit, c) == cfacet.is(ctype_base::xdigit, c));
457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::alnum, c) == cfacet.is(ctype_base::alnum, c));
458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::graph, c) == cfacet.is(ctype_base::graph, c));
459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      if (c == 127) break;
460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    /* CPPUNIT_MESSAGE( e.what() ); */
464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)
471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      if  defined(STLPORT) || !defined(__GNUC__)
472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new ctype_byname<wchar_t>(static_cast<char const*>(0)));
474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const&) {
477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      endif
482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new ctype_byname<wchar_t>("yasli_language"));
485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const&) {
488e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
489e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
490e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
491e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
493e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      if  defined(STLPORT) || !defined(__GNUC__)
494e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
495e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>(static_cast<char const*>(0)));
496e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
497e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
498e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
499e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( e.what() );
500e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
501e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
502e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
503e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
504e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#      endif
505e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
506e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
507e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>("yasli_language"));
508e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
509e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
510e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (runtime_error const& /* e */) {
511e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( e.what() );
512e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
513e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
514e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_FAIL;
515e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
516e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    endif
517e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
518e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
519e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
520e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
521