is_many.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//===----------------------------------------------------------------------===//
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//                     The LLVM Compiler Infrastructure
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// This file is dual licensed under the MIT and the University of Illinois Open
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Source Licenses. See LICENSE.TXT for details.
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//===----------------------------------------------------------------------===//
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// <locale>
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// template <class charT> class ctype_byname;
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// const charT* do_is(const charT* low, const charT* high, mask* vec) const;
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <locale>
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <string>
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <vector>
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <cassert>
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <stdio.h>
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverint main()
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    {
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        std::locale l("en_US");
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        {
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            typedef std::ctype<wchar_t> F;
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            const F& f = std::use_facet<F>(l);
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            const std::wstring in(L"\x00DA A\x07.a1");
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            std::vector<F::mask> m(in.size());
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            const wchar_t* h = f.is(in.data(), in.data() + in.size(), m.data());
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(h == in.data() + in.size());
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            // L'\x00DA'
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[0] & F::space));
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[0] & F::print));
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[0] & F::cntrl));
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[0] & F::upper));
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[0] & F::lower));
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[0] & F::alpha));
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[0] & F::digit));
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[0] & F::punct));
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[0] & F::xdigit));
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[0] & F::blank));
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[0] & F::alnum));
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[0] & F::graph));
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            // L' '
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[1] & F::space));
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[1] & F::print));
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[1] & F::cntrl));
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[1] & F::upper));
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[1] & F::lower));
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[1] & F::alpha));
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[1] & F::digit));
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[1] & F::punct));
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[1] & F::xdigit));
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[1] & F::blank));
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[1] & F::alnum));
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[1] & F::graph));
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            // L'A'
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[2] & F::space));
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[2] & F::print));
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[2] & F::cntrl));
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[2] & F::upper));
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[2] & F::lower));
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[2] & F::alpha));
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[2] & F::digit));
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[2] & F::punct));
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[2] & F::xdigit));
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[2] & F::blank));
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[2] & F::alnum));
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[2] & F::graph));
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            // L'\x07'
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[3] & F::space));
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[3] & F::print));
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert( (m[3] & F::cntrl));
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[3] & F::upper));
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            assert(!(m[3] & F::lower));
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            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