OSDN Git Service

629866287907cea8f6e3a9380eee4920d144aba4
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / testsuite / 22_locale / collate_byname / 1.cc
1 // 2001-08-15 Benjamin Kosnik  <bkoz@redhat.com>
2
3 // Copyright (C) 2001, 2002 Free Software Foundation
4 //
5 // This file is part of the GNU ISO C++ Library.  This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 2, or (at your option)
9 // any later version.
10
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING.  If not, write to the Free
18 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19 // USA.
20
21 // 22.2.4.2 Template class collate_byname
22
23 #include <locale>
24 #include <testsuite_hooks.h>
25
26 void test01()
27 {
28   using namespace std;
29   typedef std::collate<char>::string_type string_type;
30
31   bool test = true;
32   string str;
33   locale loc_c = locale::classic();
34
35   locale loc_byname(locale::classic(), new collate_byname<char>("de_DE"));
36   str = loc_byname.name();
37
38   locale loc_de("de_DE");
39   str = loc_de.name();
40
41   VERIFY( loc_de != loc_byname );
42
43   // cache the collate facets
44   const collate<char>& coll_byname = use_facet<collate<char> >(loc_byname); 
45   const collate<char>& coll_de = use_facet<collate<char> >(loc_de); 
46
47   // Check German "de_DE" locale.
48   int i1;
49   int i2;
50   long l1;
51   long l2;
52   const char* strlit3 = "Äuglein Augment"; // "C" == "Augment Äuglein"
53   const char* strlit4 = "Base baß Baß Bast"; // "C" == "Base baß Baß Bast"
54
55   int size3 = strlen(strlit3) - 1;
56   i1 = coll_de.compare(strlit3, strlit3 + size3, strlit3, strlit3 + 7);
57   VERIFY ( i1 == 1 );
58   i1 = coll_de.compare(strlit3, strlit3 + 7, strlit3, strlit3 + size3);
59   VERIFY ( i1 == -1 );
60   i1 = coll_de.compare(strlit3, strlit3 + 7, strlit3, strlit3 + 7);
61   VERIFY ( i1 == 0 );
62
63   i1 = coll_de.compare(strlit3, strlit3 + 6, strlit3 + 8, strlit3 + 14);
64   VERIFY ( i1 == -1 );
65
66   int size4 = strlen(strlit4) - 1;
67   i2 = coll_de.compare(strlit4, strlit4 + size4, strlit4, strlit4 + 13);
68   VERIFY ( i2 == 1 );
69   i2 = coll_de.compare(strlit4, strlit4 + 13, strlit4, strlit4 + size4);
70   VERIFY ( i2 == -1 );
71   i2 = coll_de.compare(strlit4, strlit4 + size4, strlit4, strlit4 + size4);
72   VERIFY ( i2 == 0 );
73
74   l1 = coll_de.hash(strlit3, strlit3 + size3);
75   l2 = coll_de.hash(strlit3, strlit3 + size3 - 1);
76   VERIFY ( l1 != l2 );
77   l1 = coll_de.hash(strlit3, strlit3 + size3);
78   l2 = coll_de.hash(strlit4, strlit4 + size4);
79   VERIFY ( l1 != l2 );
80
81   string str3 = coll_de.transform(strlit3, strlit3 + size3);
82   string str4 = coll_de.transform(strlit4, strlit4 + size4);
83   i1 = str3.compare(str4);
84   i2 = coll_de.compare(strlit3, strlit3 + size3, strlit4, strlit4 + size4);
85   VERIFY ( i2 == -1 );
86   VERIFY ( i1 * i2 > 0 );
87
88
89   // Check byname locale
90   int i3;
91   int i4;
92   long l3;
93   long l4;
94   size4 = strlen(strlit3) - 1;
95   i3 = coll_de.compare(strlit3, strlit3 + size4, strlit3, strlit3 + 7);
96   VERIFY ( i3 == 1 );
97   i3 = coll_de.compare(strlit3, strlit3 + 7, strlit3, strlit3 + size4);
98   VERIFY ( i3 == -1 );
99   i3 = coll_de.compare(strlit3, strlit3 + 7, strlit3, strlit3 + 7);
100   VERIFY ( i3 == 0 );
101
102   i3 = coll_de.compare(strlit3, strlit3 + 6, strlit3 + 8, strlit3 + 14);
103   VERIFY ( i3 == -1 );
104
105   size4 = strlen(strlit4) - 1;
106   i4 = coll_de.compare(strlit4, strlit4 + size4, strlit4, strlit4 + 13);
107   VERIFY ( i4 == 1 );
108   i4 = coll_de.compare(strlit4, strlit4 + 13, strlit4, strlit4 + size4);
109   VERIFY ( i4 == -1 );
110   i4 = coll_de.compare(strlit4, strlit4 + size4, strlit4, strlit4 + size4);
111   VERIFY ( i4 == 0 );
112
113   l3 = coll_de.hash(strlit3, strlit3 + size4);
114   l4 = coll_de.hash(strlit3, strlit3 + size4 - 1);
115   VERIFY ( l3 != l4 );
116   l3 = coll_de.hash(strlit3, strlit3 + size4);
117   l4 = coll_de.hash(strlit4, strlit4 + size4);
118   VERIFY ( l3 != l4 );
119
120   string str5 = coll_de.transform(strlit3, strlit3 + size3);
121   string str6 = coll_de.transform(strlit4, strlit4 + size4);
122   i3 = str5.compare(str6);
123   i4 = coll_de.compare(strlit3, strlit3 + size4, strlit4, strlit4 + size4);
124   VERIFY ( i4 == -1 );
125   VERIFY ( i3 * i4 > 0 );
126
127   // Verify byname == de
128   VERIFY ( str5 == str3 );
129   VERIFY ( str6 == str4 );
130 }
131
132 int main()
133 {
134   test01();
135   return 0;
136 }