2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / libstdc++-v3 / testsuite / 22_locale / ctype / is / wchar_t / 2.cc
blobdf028783f85be1613bdaa5653818570d80d22019
1 // { dg-do run { xfail *-*-![linux]* } }
2 // Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
3 //
4 // This file is part of the GNU ISO C++ Library. This library is free
5 // software; you can redistribute it and/or modify it under the
6 // terms of the GNU General Public License as published by the
7 // Free Software Foundation; either version 2, or (at your option)
8 // any later version.
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License along
16 // with this library; see the file COPYING. If not, write to the Free
17 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
18 // USA.
20 // As a special exception, you may use this file as part of a free software
21 // library without restriction. Specifically, if other files instantiate
22 // templates or use macros or inline functions from this file, or you compile
23 // this file and link it with other files to produce an executable, this
24 // file does not by itself cause the resulting executable to be covered by
25 // the GNU General Public License. This exception does not however
26 // invalidate any other reasons why the executable file might be covered by
27 // the GNU General Public License.
29 // 22.2.1.3.2 ctype<char> members
31 #include <locale>
32 #include <vector>
33 #include <testsuite_hooks.h>
35 typedef wchar_t char_type;
37 // libstdc++/4456, libstdc++/4457, libstdc++/4458
38 void test02()
40 using namespace std;
41 typedef ctype_base::mask mask;
42 typedef vector<mask> vector_type;
44 bool test __attribute__((unused)) = true;
46 // const int max = numeric_limits<char>::max();
47 const int max = 255;
48 const int ctype_mask_max = 10;
49 vector_type v_c(max);
50 vector_type v_de(max);
52 // "C"
53 locale loc_c = locale::classic();
54 const ctype<wchar_t>& ctype_c = use_facet<ctype<wchar_t> >(loc_c);
55 for (int i = 0; i < max; ++i)
57 char_type c = static_cast<wchar_t>(i);
58 mask mask_test = static_cast<mask>(0);
59 mask mask_is = static_cast<mask>(0);
60 for (int j = 0; j <= ctype_mask_max; ++j)
62 mask_test = static_cast<mask>(1 << j);
63 if (ctype_c.is(mask_test, c))
64 mask_is |= mask_test;
66 v_c[i] = mask_is;
69 // "de_DE"
70 locale loc_de = __gnu_test::try_named_locale("de_DE");
71 const ctype<wchar_t>& ctype_de = use_facet<ctype<wchar_t> >(loc_de);
72 for (int i = 0; i < max; ++i)
74 char_type c = static_cast<wchar_t>(i);
75 mask mask_test = static_cast<mask>(0);
76 mask mask_is = static_cast<mask>(0);
77 for (int j = 0; j <= ctype_mask_max; ++j)
79 mask_test = static_cast<mask>(1 << j);
80 if (ctype_de.is(mask_test, c))
81 mask_is |= mask_test;
83 v_de[i] = mask_is;
86 #if QUANNUM_VERBOSE_LYRICALLY_ADEPT_BAY_AREA_MCS_MODE
87 for (int i = 0; i < max; ++i)
89 char_type mark = v_c[i] == v_de[i] ? ' ' : '-';
90 cout << i << ' ' << mark << ' ' << static_cast<wchar_t>(i) << '\t' ;
91 cout << "v_c: " << setw(4) << v_c[i] << '\t';
92 cout << "v_de: " << setw(4) << v_de[i] << endl;
94 cout << (v_c == v_de) << endl;
95 #endif
97 VERIFY( v_c != v_de );
100 int main()
102 test02();
103 return 0;