OSDN Git Service

605e5f3dfdbbbebc5b710880614a3aeb5aab6a3e
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / testsuite / 22_locale / ctype / is / char / 2.cc
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.
9
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.
14
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.
19
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.
28
29 // 22.2.1.3.2 ctype<char> members
30
31 #include <locale>
32 #include <vector>
33 #include <testsuite_hooks.h>
34
35 typedef char char_type;
36
37 // libstdc++/4456, libstdc++/4457, libstdc++/4458
38 void test02()
39 {
40   using namespace std;
41   typedef ctype_base::mask      mask;
42   typedef vector<mask>          vector_type;
43
44   bool test = true;
45
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);
51
52   // "C"
53   locale loc_c = locale::classic();
54   const ctype<char>& ctype_c = use_facet<ctype<char> >(loc_c); 
55   for (int i = 0; i < max; ++i)
56     {
57       char_type c = static_cast<char>(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)
61         {
62           mask_test = static_cast<mask>(1 << j);
63           if (ctype_c.is(mask_test, c))
64             mask_is |= mask_test;
65         }
66       v_c[i] = mask_is;
67     }   
68
69   // "de_DE"
70   locale loc_de = __gnu_cxx_test::try_named_locale("de_DE");
71   const ctype<char>& ctype_de = use_facet<ctype<char> >(loc_de); 
72   for (int i = 0; i < max; ++i)
73     {
74       char_type c = static_cast<char>(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)
78         {
79           mask_test = static_cast<mask>(1 << j);
80           if (ctype_de.is(mask_test, c))
81             mask_is |= mask_test;
82         }
83       v_de[i] = mask_is;
84     }   
85
86 #if QUANNUM_VERBOSE_LYRICALLY_ADEPT_BAY_AREA_MCS_MODE
87     for (int i = 0; i < max; ++i)
88     {
89       char_type mark = v_c[i] == v_de[i] ? ' ' : '-';
90       cout << i << ' ' << mark << ' ' << static_cast<char>(i) << '\t' ;
91       cout << "v_c: " << setw(4) << v_c[i] << '\t';
92       cout << "v_de: " << setw(4) << v_de[i] << endl;
93     }
94     cout << (v_c == v_de) << endl;
95 #endif
96
97   VERIFY( v_c != v_de );
98 }
99
100 int main() 
101 {
102   test02();
103   return 0;
104 }