177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "locale_test.h"
277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)
477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <locale>
577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stdexcept>
677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing namespace std;
977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstatic const char* tested_locales[] = {
1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//name,
1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // We need exception support to check support of the following localizations.
1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  "fr_FR",
1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  "ru_RU.koi8r",
1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  "en_GB",
1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  "en_US",
1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  "",
2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  "C"
2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//
2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// tests implementation
2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//
2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid LocaleTest::_ctype_facet( const locale& loc)
2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{
2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  CPPUNIT_ASSERT( has_facet<ctype<char> >(loc) );
3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ctype<char> const& ct = use_facet<ctype<char> >(loc);
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //is
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.is(ctype_base::digit, '0') );
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.is(ctype_base::upper, 'A') );
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.is(ctype_base::lower, 'a') );
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.is(ctype_base::alpha, 'A') );
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.is(ctype_base::space, ' ') );
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( !ct.is(ctype_base::space, '2') );
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.is(ctype_base::punct, '.') );
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.is(ctype_base::xdigit, 'a') );
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //is range
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char values[] = "0Aa .";
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ctype_base::mask res[sizeof(values)];
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ct.is(values, values + sizeof(values), res);
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // '0'
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[0] & ctype_base::print) != 0 );
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[0] & ctype_base::digit) != 0 );
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[0] & ctype_base::xdigit) != 0 );
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // 'A'
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[1] & ctype_base::print) != 0 );
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[1] & ctype_base::alpha) != 0 );
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[1] & ctype_base::xdigit) != 0 );
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[1] & ctype_base::upper) != 0 );
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // 'a'
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[2] & ctype_base::print) != 0 );
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[2] & ctype_base::alpha) != 0 );
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[2] & ctype_base::xdigit) != 0 );
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[2] & ctype_base::lower) != 0 );
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[2] & ctype_base::space) == 0 );
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // ' '
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[3] & ctype_base::print) != 0 );
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[3] & ctype_base::space) != 0 );
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[3] & ctype_base::digit) == 0 );
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // '.'
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[4] & ctype_base::print) != 0 );
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[4] & ctype_base::punct) != 0 );
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( (res[4] & ctype_base::digit) == 0 );
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //scan_is
7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char range[] = "abAc123 .";
7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const char *rbeg = range;
7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const char *rend = range + sizeof(range);
7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const char *res;
8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = ct.scan_is((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);
8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( res != rend );
8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( *res == 'a' );
8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = ct.scan_is(ctype_base::upper, rbeg, rend);
8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( res != rend );
8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( *res == 'A' );
8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = ct.scan_is(ctype_base::punct, rbeg, rend);
8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( res != rend );
9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( *res == '.' );
9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //scan_not
9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char range[] = "abAc123 .";
9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const char *rbeg = range;
9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const char *rend = range + sizeof(range);
9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const char *res;
10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = ct.scan_not((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);
10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( res != rend );
10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( *res == '1' );
10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = ct.scan_not(ctype_base::alpha, rbeg, rend);
10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( res != rend );
10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( *res == '1' );
10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = ct.scan_not(ctype_base::punct, rbeg, rend);
10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( res != rend );
11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( *res == 'a' );
11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //toupper
11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.toupper('a') == 'A' );
11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.toupper('A') == 'A' );
11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.toupper('1') == '1' );
11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //toupper range
12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char range[] = "abAc1";
12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char expected_range[] = "ABAC1";
12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ct.toupper(range, range + sizeof(range));
12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( equal(range, range + sizeof(range), expected_range) );
12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //tolower
12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.tolower('A') == 'a' );
13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.tolower('a') == 'a' );
13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.tolower('1') == '1' );
13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //tolower range
13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char range[] = "ABaC1";
13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char expected_range[] = "abac1";
13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ct.tolower(range, range + sizeof(range));
14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( equal(range, range + sizeof(range), expected_range) );
14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //widen
14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.widen('a') == 'a' );
14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //widen range
14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char range[] = "ABaC1";
15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char res[sizeof(range)];
15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ct.widen(range, range + sizeof(range), res);
15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( equal(range, range + sizeof(range), res) );
15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //narrow
15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.narrow('a', 'b') == 'a' );
15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //narrow range
16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char range[] = "ABaC1";
16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char res[sizeof(range)];
16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ct.narrow(range, range + sizeof(range), 'b', res);
16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( equal(range, range + sizeof(range), res) );
16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid LocaleTest::_ctype_facet_w( const locale& loc )
17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{
17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# ifndef _STLP_NO_WCHAR_T
17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  CPPUNIT_ASSERT( has_facet<ctype<wchar_t> >(loc) );
17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ctype<wchar_t> const& wct = use_facet<ctype<wchar_t> >(loc);
17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //is
17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.is(ctype_base::digit, L'0') );
17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.is(ctype_base::upper, L'A') );
17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.is(ctype_base::lower, L'a') );
18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.is(ctype_base::alpha, L'A') );
18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.is(ctype_base::space, L' ') );
18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( !wct.is(ctype_base::space, L'2') );
18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.is(ctype_base::punct, L'.') );
18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.is(ctype_base::xdigit, L'a') );
18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //is range
18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wchar_t values[] = L"0Aa .";
19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ctype_base::mask res[sizeof(values) / sizeof(wchar_t)];
19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wct.is(values, values + (sizeof(values) / sizeof(wchar_t)), res);
19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // '0'
19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[0] & ctype_base::print) != 0 );
19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[0] & ctype_base::digit) != 0 );
19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[0] & ctype_base::xdigit) != 0 );
19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // 'A'
19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[1] & ctype_base::print) != 0 );
19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[1] & ctype_base::alpha) != 0 );
19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[1] & ctype_base::xdigit) != 0 );
20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[1] & ctype_base::upper) != 0 );
20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // 'a'
20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[2] & ctype_base::print) != 0 );
20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[2] & ctype_base::alpha) != 0 );
20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[2] & ctype_base::xdigit) != 0 );
20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[2] & ctype_base::lower) != 0 );
20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[2] & ctype_base::space) == 0 );
20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // ' '
20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[3] & ctype_base::print) != 0 );
20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[3] & ctype_base::space) != 0 );
21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[3] & ctype_base::digit) == 0 );
21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // '.'
21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[4] & ctype_base::print) != 0 );
21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[4] & ctype_base::punct) != 0 );
21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( (res[4] & ctype_base::digit) == 0 );
21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //scan_is
21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wchar_t range[] = L"abAc123 .";
22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const wchar_t *rbeg = range;
22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const wchar_t *rend = range + (sizeof(range) / sizeof(wchar_t));
22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const wchar_t *res;
22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = wct.scan_is((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);
22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( res != rend );
22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( *res == L'a' );
22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = wct.scan_is(ctype_base::upper, rbeg, rend);
22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( res != rend );
23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( *res == L'A' );
23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = wct.scan_is(ctype_base::punct, rbeg, rend);
23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( res != rend );
23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( *res == L'.' );
23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //scan_not
23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wchar_t range[] = L"abAc123 .";
24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const wchar_t *rbeg = range;
24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const wchar_t *rend = range + (sizeof(range) / sizeof(wchar_t));
24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    const wchar_t *res;
24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = wct.scan_not((ctype_base::mask)(ctype_base::alpha | ctype_base::lower), rbeg, rend);
24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( res != rend );
24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( *res == L'1' );
24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = wct.scan_not(ctype_base::alpha, rbeg, rend);
24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( res != rend );
25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( *res == L'1' );
25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    res = wct.scan_not(ctype_base::punct, rbeg, rend);
25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( res != rend );
25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( *res == L'a' );
25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //toupper
25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.toupper(L'a') == L'A' );
26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.toupper(L'A') == L'A' );
26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.toupper(L'1') == L'1' );
26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //toupper range
26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wchar_t range[] = L"abAc1";
26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wchar_t expected_range[] = L"ABAC1";
26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wct.toupper(range, range + sizeof(range) / sizeof(wchar_t));
26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( equal(range, range + sizeof(range) / sizeof(wchar_t), expected_range) );
27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //tolower
27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.tolower(L'A') == L'a' );
27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.tolower(L'a') == L'a' );
27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.tolower(L'1') == L'1' );
27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //tolower range
28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wchar_t range[] = L"ABaC1";
28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wchar_t expected_range[] = L"abac1";
28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wct.tolower(range, range + sizeof(range) / sizeof(wchar_t));
28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( equal(range, range + sizeof(range) / sizeof(wchar_t), expected_range) );
28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //widen
28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.widen('a') == L'a' );
29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //widen range
29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char range[] = "ABaC1";
29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wchar_t res[sizeof(range)];
29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wchar_t expected_res[] = L"ABaC1";
29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wct.widen(range, range + sizeof(range), res);
29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( equal(expected_res, expected_res + sizeof(range), res) );
29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //narrow
30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( wct.narrow(L'a', 'b') == L'a' );
30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //narrow range
30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  {
30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wchar_t range[] = L"ABaC1";
30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char res[sizeof(range) / sizeof(wchar_t)];
31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    char expected_res[] = "ABaC1";
31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    wct.narrow(range, range + sizeof(range) / sizeof(wchar_t), 'b', res);
31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_CHECK( equal(expected_res, expected_res + sizeof(range) / sizeof(wchar_t), res) );
31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif
31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertypedef void (LocaleTest::*_Test) (const locale&);
31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstatic void test_supported_locale(LocaleTest& inst, _Test __test) {
32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_t n = sizeof(tested_locales) / sizeof(tested_locales[0]);
32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for (size_t i = 0; i < n; ++i) {
32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    locale loc;
32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    try
32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    {
32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      locale tmp(tested_locales[i]);
32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      loc = tmp;
32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    catch (runtime_error const&) {
33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      //This locale is not supported.
33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      continue;
33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_MESSAGE( loc.name().c_str() );
33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    (inst.*__test)(loc);
33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    {
34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      locale tmp(locale::classic(), tested_locales[i], locale::ctype);
34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      loc = tmp;
34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    (inst.*__test)(loc);
34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    {
34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      locale tmp(locale::classic(), new ctype_byname<char>(tested_locales[i]));
34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_NO_WCHAR_T
34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      locale tmp0(tmp, new ctype_byname<wchar_t>(tested_locales[i]));
35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      tmp = tmp0;
35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      loc = tmp;
35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    (inst.*__test)(loc);
35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid LocaleTest::ctype_facet()
35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{
36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  test_supported_locale(*this, &LocaleTest::_ctype_facet);
36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_NO_WCHAR_T
36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  test_supported_locale(*this, &LocaleTest::_ctype_facet_w);
36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid LocaleTest::ctype_by_name()
36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{
36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  /*
36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner   * Check of the 22.1.1.2.7 standard point. Construction of a locale
37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner   * instance from a null pointer or an unknown name should result in
37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner   * a runtime_error exception.
37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner   */
37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#    if  defined (STLPORT) || (!defined(__GNUC__) && (!defined (_MSC_VER) || (_MSC_VER > 1400)))
37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner   // libstdc++ call freelocate on bad locale
37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  try {
37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    locale loc(locale::classic(), new ctype_byname<char>(static_cast<char const*>(0)));
37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( false );
37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (runtime_error const& /* e */) {
38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    //CPPUNIT_MESSAGE( e.what() );
38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (...) {
38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( false );
38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#    endif
38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  try {
38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    locale loc(locale::classic(), new ctype_byname<char>("yasli_language"));
39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
39277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (runtime_error const& /* e */) {
39377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    //CPPUNIT_MESSAGE( e.what() );
39477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
39577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (...) {
39677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
39777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
39877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
39977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#    if  defined(STLPORT) || !defined(__GNUC__)
40077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  try {
40177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    locale loc(locale::classic(), new codecvt_byname<char, char, mbstate_t>(static_cast<char const*>(0)));
40277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
40377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
40477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (runtime_error const& /* e */) {
40577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    //CPPUNIT_MESSAGE( e.what() );
40677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
40777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (...) {
40877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
40977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
41077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#    endif
41177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
41277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  try {
41377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    locale loc(locale::classic(), new codecvt_byname<char, char, mbstate_t>("yasli_language"));
41477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    //STLport implementation do not care about name pass to this facet.
41577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#    if !defined (STLPORT)
41677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
41777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#    endif
41877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
41977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (runtime_error const& /* e */) {
42077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    //CPPUNIT_MESSAGE( e.what() );
42177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
42277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (...) {
42377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
42477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
42577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
42677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  try {
42777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    locale loc(locale::classic(), new ctype_byname<char>("fr_FR"));
42877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( has_facet<ctype<char> >(loc) );
42977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ctype<char> const& ct = use_facet<ctype<char> >(loc);
43077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_ASSERT( ct.is(ctype_base::mask(ctype_base::print | ctype_base::lower | ctype_base::alpha), '�') );
43177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
43277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (runtime_error const& /* e */) {
43377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    //CPPUNIT_MESSAGE( e.what() );
43477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
43577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (...) {
43677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
43777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
43877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
43977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  try {
44077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    locale loc(locale::classic(), new ctype_byname<char>("C"));
44177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ctype<char> const& cfacet_byname = use_facet<ctype<char> >(loc);
44277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ctype<char> const& cfacet = use_facet<ctype<char> >(locale::classic());
44377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
44477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    for (char c = 0;; ++c) {
44577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::space, c) == cfacet.is(ctype_base::space, c));
44677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      if (cfacet_byname.is(ctype_base::print, c) != cfacet.is(ctype_base::print, c))
44777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      {
44877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        CPPUNIT_CHECK(cfacet_byname.is(ctype_base::print, c) == cfacet.is(ctype_base::print, c));
44977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      }
45077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::cntrl, c) == cfacet.is(ctype_base::cntrl, c));
45177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::upper, c) == cfacet.is(ctype_base::upper, c));
45277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::lower, c) == cfacet.is(ctype_base::lower, c));
45377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::alpha, c) == cfacet.is(ctype_base::alpha, c));
45477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::digit, c) == cfacet.is(ctype_base::digit, c));
45577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::punct, c) == cfacet.is(ctype_base::punct, c));
45677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::xdigit, c) == cfacet.is(ctype_base::xdigit, c));
45777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::alnum, c) == cfacet.is(ctype_base::alnum, c));
45877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      CPPUNIT_CHECK(cfacet_byname.is(ctype_base::graph, c) == cfacet.is(ctype_base::graph, c));
45977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      if (c == 127) break;
46077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
46177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
46277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (runtime_error const& /* e */) {
46377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    /* CPPUNIT_MESSAGE( e.what() ); */
46477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
46577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
46677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (...) {
46777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
46877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
46977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
47077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#    if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T)
47177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#      if  defined(STLPORT) || !defined(__GNUC__)
47277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  try {
47377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    locale loc(locale::classic(), new ctype_byname<wchar_t>(static_cast<char const*>(0)));
47477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
47577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
47677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (runtime_error const&) {
47777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
47877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (...) {
47977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
48077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
48177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#      endif
48277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
48377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  try {
48477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    locale loc(locale::classic(), new ctype_byname<wchar_t>("yasli_language"));
48577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
48677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
48777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (runtime_error const&) {
48877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
48977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (...) {
49077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
49177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
49277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
49377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#      if  defined(STLPORT) || !defined(__GNUC__)
49477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  try {
49577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>(static_cast<char const*>(0)));
49677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
49777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
49877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (runtime_error const& /* e */) {
49977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    //CPPUNIT_MESSAGE( e.what() );
50077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
50177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (...) {
50277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
50377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
50477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#      endif
50577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
50677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  try {
50777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    locale loc(locale::classic(), new codecvt_byname<wchar_t, char, mbstate_t>("yasli_language"));
50877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
50977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
51077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (runtime_error const& /* e */) {
51177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    //CPPUNIT_MESSAGE( e.what() );
51277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
51377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  catch (...) {
51477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    CPPUNIT_FAIL;
51577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
51677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#    endif
51777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
51877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
51977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
52077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
521