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