is_many.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
1//===----------------------------------------------------------------------===//
2//
3// ��������������������The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <locale>
11
12// template <class charT> class ctype_byname;
13
14// const charT* do_is(const charT* low, const charT* high, mask* vec) const;
15
16#include <locale>
17#include <string>
18#include <vector>
19#include <cassert>
20
21#include <stdio.h>
22
23int main()
24{
25    {
26        std::locale l("en_US");
27        {
28            typedef std::ctype<wchar_t> F;
29            const F& f = std::use_facet<F>(l);
30            const std::wstring in(L"\x00DA A\x07.a1");
31            std::vector<F::mask> m(in.size());
32            const wchar_t* h = f.is(in.data(), in.data() + in.size(), m.data());
33            assert(h == in.data() + in.size());
34
35            // L'\x00DA'
36            assert(!(m[0] & F::space));
37            assert( (m[0] & F::print));
38            assert(!(m[0] & F::cntrl));
39            assert( (m[0] & F::upper));
40            assert(!(m[0] & F::lower));
41            assert( (m[0] & F::alpha));
42            assert(!(m[0] & F::digit));
43            assert(!(m[0] & F::punct));
44            assert(!(m[0] & F::xdigit));
45            assert(!(m[0] & F::blank));
46            assert( (m[0] & F::alnum));
47            assert( (m[0] & F::graph));
48
49            // L' '
50            assert( (m[1] & F::space));
51            assert( (m[1] & F::print));
52            assert(!(m[1] & F::cntrl));
53            assert(!(m[1] & F::upper));
54            assert(!(m[1] & F::lower));
55            assert(!(m[1] & F::alpha));
56            assert(!(m[1] & F::digit));
57            assert(!(m[1] & F::punct));
58            assert(!(m[1] & F::xdigit));
59            assert( (m[1] & F::blank));
60            assert(!(m[1] & F::alnum));
61            assert(!(m[1] & F::graph));
62
63            // L'A'
64            assert(!(m[2] & F::space));
65            assert( (m[2] & F::print));
66            assert(!(m[2] & F::cntrl));
67            assert( (m[2] & F::upper));
68            assert(!(m[2] & F::lower));
69            assert( (m[2] & F::alpha));
70            assert(!(m[2] & F::digit));
71            assert(!(m[2] & F::punct));
72            assert( (m[2] & F::xdigit));
73            assert(!(m[2] & F::blank));
74            assert( (m[2] & F::alnum));
75            assert( (m[2] & F::graph));
76
77            // L'\x07'
78            assert(!(m[3] & F::space));
79            assert(!(m[3] & F::print));
80            assert( (m[3] & F::cntrl));
81            assert(!(m[3] & F::upper));
82            assert(!(m[3] & F::lower));
83            assert(!(m[3] & F::alpha));
84            assert(!(m[3] & F::digit));
85            assert(!(m[3] & F::punct));
86            assert(!(m[3] & F::xdigit));
87            assert(!(m[3] & F::blank));
88            assert(!(m[3] & F::alnum));
89            assert(!(m[3] & F::graph));
90
91            // L'.'
92            assert(!(m[4] & F::space));
93            assert( (m[4] & F::print));
94            assert(!(m[4] & F::cntrl));
95            assert(!(m[4] & F::upper));
96            assert(!(m[4] & F::lower));
97            assert(!(m[4] & F::alpha));
98            assert(!(m[4] & F::digit));
99            assert( (m[4] & F::punct));
100            assert(!(m[4] & F::xdigit));
101            assert(!(m[4] & F::blank));
102            assert(!(m[4] & F::alnum));
103            assert( (m[4] & F::graph));
104
105            // L'a'
106            assert(!(m[5] & F::space));
107            assert( (m[5] & F::print));
108            assert(!(m[5] & F::cntrl));
109            assert(!(m[5] & F::upper));
110            assert( (m[5] & F::lower));
111            assert( (m[5] & F::alpha));
112            assert(!(m[5] & F::digit));
113            assert(!(m[5] & F::punct));
114            assert( (m[5] & F::xdigit));
115            assert(!(m[5] & F::blank));
116            assert( (m[5] & F::alnum));
117            assert( (m[5] & F::graph));
118
119            // L'1'
120            assert(!(m[6] & F::space));
121            assert( (m[6] & F::print));
122            assert(!(m[6] & F::cntrl));
123            assert(!(m[6] & F::upper));
124            assert(!(m[6] & F::lower));
125            assert(!(m[6] & F::alpha));
126            assert( (m[6] & F::digit));
127            assert(!(m[6] & F::punct));
128            assert( (m[6] & F::xdigit));
129            assert(!(m[6] & F::blank));
130            assert( (m[6] & F::alnum));
131            assert( (m[6] & F::graph));
132        }
133    }
134    {
135        std::locale l("C");
136        {
137            typedef std::ctype<wchar_t> F;
138            const F& f = std::use_facet<F>(l);
139            const std::wstring in(L"\x00DA A\x07.a1");
140            std::vector<F::mask> m(in.size());
141            const wchar_t* h = f.is(in.data(), in.data() + in.size(), m.data());
142            assert(h == in.data() + in.size());
143
144            // L'\x00DA'
145            assert(!(m[0] & F::space));
146            assert(!(m[0] & F::print));
147            assert(!(m[0] & F::cntrl));
148            assert(!(m[0] & F::upper));
149            assert(!(m[0] & F::lower));
150            assert(!(m[0] & F::alpha));
151            assert(!(m[0] & F::digit));
152            assert(!(m[0] & F::punct));
153            assert(!(m[0] & F::xdigit));
154            assert(!(m[0] & F::blank));
155            assert(!(m[0] & F::alnum));
156            assert(!(m[0] & F::graph));
157
158            // L' '
159            assert( (m[1] & F::space));
160            assert( (m[1] & F::print));
161            assert(!(m[1] & F::cntrl));
162            assert(!(m[1] & F::upper));
163            assert(!(m[1] & F::lower));
164            assert(!(m[1] & F::alpha));
165            assert(!(m[1] & F::digit));
166            assert(!(m[1] & F::punct));
167            assert(!(m[1] & F::xdigit));
168            assert( (m[1] & F::blank));
169            assert(!(m[1] & F::alnum));
170            assert(!(m[1] & F::graph));
171
172            // L'A'
173            assert(!(m[2] & F::space));
174            assert( (m[2] & F::print));
175            assert(!(m[2] & F::cntrl));
176            assert( (m[2] & F::upper));
177            assert(!(m[2] & F::lower));
178            assert( (m[2] & F::alpha));
179            assert(!(m[2] & F::digit));
180            assert(!(m[2] & F::punct));
181            assert( (m[2] & F::xdigit));
182            assert(!(m[2] & F::blank));
183            assert( (m[2] & F::alnum));
184            assert( (m[2] & F::graph));
185
186            // L'\x07'
187            assert(!(m[3] & F::space));
188            assert(!(m[3] & F::print));
189            assert( (m[3] & F::cntrl));
190            assert(!(m[3] & F::upper));
191            assert(!(m[3] & F::lower));
192            assert(!(m[3] & F::alpha));
193            assert(!(m[3] & F::digit));
194            assert(!(m[3] & F::punct));
195            assert(!(m[3] & F::xdigit));
196            assert(!(m[3] & F::blank));
197            assert(!(m[3] & F::alnum));
198            assert(!(m[3] & F::graph));
199
200            // L'.'
201            assert(!(m[4] & F::space));
202            assert( (m[4] & F::print));
203            assert(!(m[4] & F::cntrl));
204            assert(!(m[4] & F::upper));
205            assert(!(m[4] & F::lower));
206            assert(!(m[4] & F::alpha));
207            assert(!(m[4] & F::digit));
208            assert( (m[4] & F::punct));
209            assert(!(m[4] & F::xdigit));
210            assert(!(m[4] & F::blank));
211            assert(!(m[4] & F::alnum));
212            assert( (m[4] & F::graph));
213
214            // L'a'
215            assert(!(m[5] & F::space));
216            assert( (m[5] & F::print));
217            assert(!(m[5] & F::cntrl));
218            assert(!(m[5] & F::upper));
219            assert( (m[5] & F::lower));
220            assert( (m[5] & F::alpha));
221            assert(!(m[5] & F::digit));
222            assert(!(m[5] & F::punct));
223            assert( (m[5] & F::xdigit));
224            assert(!(m[5] & F::blank));
225            assert( (m[5] & F::alnum));
226            assert( (m[5] & F::graph));
227
228            // L'1'
229            assert(!(m[6] & F::space));
230            assert( (m[6] & F::print));
231            assert(!(m[6] & F::cntrl));
232            assert(!(m[6] & F::upper));
233            assert(!(m[6] & F::lower));
234            assert(!(m[6] & F::alpha));
235            assert( (m[6] & F::digit));
236            assert(!(m[6] & F::punct));
237            assert( (m[6] & F::xdigit));
238            assert(!(m[6] & F::blank));
239            assert( (m[6] & F::alnum));
240            assert( (m[6] & F::graph));
241        }
242    }
243}
244