]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/22_locale/ctype/scan/char/1.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 22_locale / ctype / scan / char / 1.cc
CommitLineData
a8b432f4
KG
1// 2002-05-10 ghazi
2
a5544970 3// Copyright (C) 2002-2019 Free Software Foundation, Inc.
a8b432f4
KG
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
748086b7 8// Free Software Foundation; either version 3, or (at your option)
a8b432f4
KG
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
748086b7
JJ
17// with this library; see the file COPYING3. If not see
18// <http://www.gnu.org/licenses/>.
19
a8b432f4
KG
20
21// { dg-do run }
22
23#include <locale>
24#include <testsuite_hooks.h>
25
15dee6bf
BK
26typedef char char_type;
27typedef std::char_traits<char_type> traits_type;
28class gnu_ctype: public std::ctype<char_type> { };
a8b432f4
KG
29
30// These two macros take a ctype mask, a string and a pointer within
31// the string that the scan function should return, usually either the
32// first or last character if the string contains identical values as
33// below.
34#define VERIFY_SCAN_IS(MASK, STRING, EXPECTED) \
35 VERIFY(gctype.scan_is((MASK), (STRING), \
15dee6bf 36 (STRING) + traits_type::length(STRING)) == (EXPECTED))
a8b432f4
KG
37#define VERIFY_SCAN_NOT(MASK, STRING, EXPECTED) \
38 VERIFY(gctype.scan_not((MASK), (STRING), \
15dee6bf 39 (STRING) + traits_type::length(STRING)) == (EXPECTED))
a8b432f4
KG
40
41// Sanity check scan_is() and scan_not().
42void test01()
43{
15dee6bf
BK
44 const char_type *const ca = "aaaaa";
45 const char_type *const cz = "zzzzz";
46 const char_type *const cA = "AAAAA";
47 const char_type *const cZ = "ZZZZZ";
48 const char_type *const c0 = "00000";
49 const char_type *const c9 = "99999";
50 const char_type *const cs = " ";
51 const char_type *const xf = "fffff";
52 const char_type *const xF = "FFFFF";
53 const char_type *const p1 = "!!!!!";
54 const char_type *const p2 = "/////";
a8b432f4
KG
55
56 gnu_ctype gctype;
57
58 // 'a'
59 VERIFY_SCAN_IS (std::ctype_base::alnum, ca, ca);
60 VERIFY_SCAN_IS (std::ctype_base::alpha, ca, ca);
61 VERIFY_SCAN_IS (std::ctype_base::cntrl, ca, ca+5);
62 VERIFY_SCAN_IS (std::ctype_base::digit, ca, ca+5);
63 VERIFY_SCAN_IS (std::ctype_base::graph, ca, ca);
64 VERIFY_SCAN_IS (std::ctype_base::lower, ca, ca);
65 VERIFY_SCAN_IS (std::ctype_base::print, ca, ca);
66 VERIFY_SCAN_IS (std::ctype_base::punct, ca, ca+5);
67 VERIFY_SCAN_IS (std::ctype_base::space, ca, ca+5);
68 VERIFY_SCAN_IS (std::ctype_base::upper, ca, ca+5);
69 VERIFY_SCAN_IS (std::ctype_base::xdigit, ca, ca);
70
71 VERIFY_SCAN_NOT (std::ctype_base::alnum, ca, ca+5);
72 VERIFY_SCAN_NOT (std::ctype_base::alpha, ca, ca+5);
73 VERIFY_SCAN_NOT (std::ctype_base::cntrl, ca, ca);
74 VERIFY_SCAN_NOT (std::ctype_base::digit, ca, ca);
75 VERIFY_SCAN_NOT (std::ctype_base::graph, ca, ca+5);
76 VERIFY_SCAN_NOT (std::ctype_base::lower, ca, ca+5);
77 VERIFY_SCAN_NOT (std::ctype_base::print, ca, ca+5);
78 VERIFY_SCAN_NOT (std::ctype_base::punct, ca, ca);
79 VERIFY_SCAN_NOT (std::ctype_base::space, ca, ca);
80 VERIFY_SCAN_NOT (std::ctype_base::upper, ca, ca);
81 VERIFY_SCAN_NOT (std::ctype_base::xdigit, ca, ca+5);
82
83 // 'z'
84 VERIFY_SCAN_IS (std::ctype_base::alnum, cz, cz);
85 VERIFY_SCAN_IS (std::ctype_base::alpha, cz, cz);
86 VERIFY_SCAN_IS (std::ctype_base::cntrl, cz, cz+5);
87 VERIFY_SCAN_IS (std::ctype_base::digit, cz, cz+5);
88 VERIFY_SCAN_IS (std::ctype_base::graph, cz, cz);
89 VERIFY_SCAN_IS (std::ctype_base::lower, cz, cz);
90 VERIFY_SCAN_IS (std::ctype_base::print, cz, cz);
91 VERIFY_SCAN_IS (std::ctype_base::punct, cz, cz+5);
92 VERIFY_SCAN_IS (std::ctype_base::space, cz, cz+5);
93 VERIFY_SCAN_IS (std::ctype_base::upper, cz, cz+5);
94 VERIFY_SCAN_IS (std::ctype_base::xdigit, cz, cz+5);
95
96 VERIFY_SCAN_NOT (std::ctype_base::alnum, cz, cz+5);
97 VERIFY_SCAN_NOT (std::ctype_base::alpha, cz, cz+5);
98 VERIFY_SCAN_NOT (std::ctype_base::cntrl, cz, cz);
99 VERIFY_SCAN_NOT (std::ctype_base::digit, cz, cz);
100 VERIFY_SCAN_NOT (std::ctype_base::graph, cz, cz+5);
101 VERIFY_SCAN_NOT (std::ctype_base::lower, cz, cz+5);
102 VERIFY_SCAN_NOT (std::ctype_base::print, cz, cz+5);
103 VERIFY_SCAN_NOT (std::ctype_base::punct, cz, cz);
104 VERIFY_SCAN_NOT (std::ctype_base::space, cz, cz);
105 VERIFY_SCAN_NOT (std::ctype_base::upper, cz, cz);
106 VERIFY_SCAN_NOT (std::ctype_base::xdigit, cz, cz);
107
108 // 'A'
109 VERIFY_SCAN_IS (std::ctype_base::alnum, cA, cA);
110 VERIFY_SCAN_IS (std::ctype_base::alpha, cA, cA);
111 VERIFY_SCAN_IS (std::ctype_base::cntrl, cA, cA+5);
112 VERIFY_SCAN_IS (std::ctype_base::digit, cA, cA+5);
113 VERIFY_SCAN_IS (std::ctype_base::graph, cA, cA);
114 VERIFY_SCAN_IS (std::ctype_base::lower, cA, cA+5);
115 VERIFY_SCAN_IS (std::ctype_base::print, cA, cA);
116 VERIFY_SCAN_IS (std::ctype_base::punct, cA, cA+5);
117 VERIFY_SCAN_IS (std::ctype_base::space, cA, cA+5);
118 VERIFY_SCAN_IS (std::ctype_base::upper, cA, cA);
119 VERIFY_SCAN_IS (std::ctype_base::xdigit, cA, cA);
120
121 VERIFY_SCAN_NOT (std::ctype_base::alnum, cA, cA+5);
122 VERIFY_SCAN_NOT (std::ctype_base::alpha, cA, cA+5);
123 VERIFY_SCAN_NOT (std::ctype_base::cntrl, cA, cA);
124 VERIFY_SCAN_NOT (std::ctype_base::digit, cA, cA);
125 VERIFY_SCAN_NOT (std::ctype_base::graph, cA, cA+5);
126 VERIFY_SCAN_NOT (std::ctype_base::lower, cA, cA);
127 VERIFY_SCAN_NOT (std::ctype_base::print, cA, cA+5);
128 VERIFY_SCAN_NOT (std::ctype_base::punct, cA, cA);
129 VERIFY_SCAN_NOT (std::ctype_base::space, cA, cA);
130 VERIFY_SCAN_NOT (std::ctype_base::upper, cA, cA+5);
131 VERIFY_SCAN_NOT (std::ctype_base::xdigit, cA, cA+5);
132
133 // 'Z'
134 VERIFY_SCAN_IS (std::ctype_base::alnum, cZ, cZ);
135 VERIFY_SCAN_IS (std::ctype_base::alpha, cZ, cZ);
136 VERIFY_SCAN_IS (std::ctype_base::cntrl, cZ, cZ+5);
137 VERIFY_SCAN_IS (std::ctype_base::digit, cZ, cZ+5);
138 VERIFY_SCAN_IS (std::ctype_base::graph, cZ, cZ);
139 VERIFY_SCAN_IS (std::ctype_base::lower, cZ, cZ+5);
140 VERIFY_SCAN_IS (std::ctype_base::print, cZ, cZ);
141 VERIFY_SCAN_IS (std::ctype_base::punct, cZ, cZ+5);
142 VERIFY_SCAN_IS (std::ctype_base::space, cZ, cZ+5);
143 VERIFY_SCAN_IS (std::ctype_base::upper, cZ, cZ);
144 VERIFY_SCAN_IS (std::ctype_base::xdigit, cZ, cZ+5);
145
146 VERIFY_SCAN_NOT (std::ctype_base::alnum, cZ, cZ+5);
147 VERIFY_SCAN_NOT (std::ctype_base::alpha, cZ, cZ+5);
148 VERIFY_SCAN_NOT (std::ctype_base::cntrl, cZ, cZ);
149 VERIFY_SCAN_NOT (std::ctype_base::digit, cZ, cZ);
150 VERIFY_SCAN_NOT (std::ctype_base::graph, cZ, cZ+5);
151 VERIFY_SCAN_NOT (std::ctype_base::lower, cZ, cZ);
152 VERIFY_SCAN_NOT (std::ctype_base::print, cZ, cZ+5);
153 VERIFY_SCAN_NOT (std::ctype_base::punct, cZ, cZ);
154 VERIFY_SCAN_NOT (std::ctype_base::space, cZ, cZ);
155 VERIFY_SCAN_NOT (std::ctype_base::upper, cZ, cZ+5);
156 VERIFY_SCAN_NOT (std::ctype_base::xdigit, cZ, cZ);
157
158 // '0'
159 VERIFY_SCAN_IS (std::ctype_base::alnum, c0, c0);
160 VERIFY_SCAN_IS (std::ctype_base::alpha, c0, c0+5);
161 VERIFY_SCAN_IS (std::ctype_base::cntrl, c0, c0+5);
162 VERIFY_SCAN_IS (std::ctype_base::digit, c0, c0);
163 VERIFY_SCAN_IS (std::ctype_base::graph, c0, c0);
164 VERIFY_SCAN_IS (std::ctype_base::lower, c0, c0+5);
165 VERIFY_SCAN_IS (std::ctype_base::print, c0, c0);
166 VERIFY_SCAN_IS (std::ctype_base::punct, c0, c0+5);
167 VERIFY_SCAN_IS (std::ctype_base::space, c0, c0+5);
168 VERIFY_SCAN_IS (std::ctype_base::upper, c0, c0+5);
169 VERIFY_SCAN_IS (std::ctype_base::xdigit, c0, c0);
170
171 VERIFY_SCAN_NOT (std::ctype_base::alnum, c0, c0+5);
172 VERIFY_SCAN_NOT (std::ctype_base::alpha, c0, c0);
173 VERIFY_SCAN_NOT (std::ctype_base::cntrl, c0, c0);
174 VERIFY_SCAN_NOT (std::ctype_base::digit, c0, c0+5);
175 VERIFY_SCAN_NOT (std::ctype_base::graph, c0, c0+5);
176 VERIFY_SCAN_NOT (std::ctype_base::lower, c0, c0);
177 VERIFY_SCAN_NOT (std::ctype_base::print, c0, c0+5);
178 VERIFY_SCAN_NOT (std::ctype_base::punct, c0, c0);
179 VERIFY_SCAN_NOT (std::ctype_base::space, c0, c0);
180 VERIFY_SCAN_NOT (std::ctype_base::upper, c0, c0);
181 VERIFY_SCAN_NOT (std::ctype_base::xdigit, c0, c0+5);
182
183 // '9'
184 VERIFY_SCAN_IS (std::ctype_base::alnum, c9, c9);
185 VERIFY_SCAN_IS (std::ctype_base::alpha, c9, c9+5);
186 VERIFY_SCAN_IS (std::ctype_base::cntrl, c9, c9+5);
187 VERIFY_SCAN_IS (std::ctype_base::digit, c9, c9);
188 VERIFY_SCAN_IS (std::ctype_base::graph, c9, c9);
189 VERIFY_SCAN_IS (std::ctype_base::lower, c9, c9+5);
190 VERIFY_SCAN_IS (std::ctype_base::print, c9, c9);
191 VERIFY_SCAN_IS (std::ctype_base::punct, c9, c9+5);
192 VERIFY_SCAN_IS (std::ctype_base::space, c9, c9+5);
193 VERIFY_SCAN_IS (std::ctype_base::upper, c9, c9+5);
194 VERIFY_SCAN_IS (std::ctype_base::xdigit, c9, c9);
195
196 VERIFY_SCAN_NOT (std::ctype_base::alnum, c9, c9+5);
197 VERIFY_SCAN_NOT (std::ctype_base::alpha, c9, c9);
198 VERIFY_SCAN_NOT (std::ctype_base::cntrl, c9, c9);
199 VERIFY_SCAN_NOT (std::ctype_base::digit, c9, c9+5);
200 VERIFY_SCAN_NOT (std::ctype_base::graph, c9, c9+5);
201 VERIFY_SCAN_NOT (std::ctype_base::lower, c9, c9);
202 VERIFY_SCAN_NOT (std::ctype_base::print, c9, c9+5);
203 VERIFY_SCAN_NOT (std::ctype_base::punct, c9, c9);
204 VERIFY_SCAN_NOT (std::ctype_base::space, c9, c9);
205 VERIFY_SCAN_NOT (std::ctype_base::upper, c9, c9);
206 VERIFY_SCAN_NOT (std::ctype_base::xdigit, c9, c9+5);
207
208 // ' '
209 VERIFY_SCAN_IS (std::ctype_base::alnum, cs, cs+5);
210 VERIFY_SCAN_IS (std::ctype_base::alpha, cs, cs+5);
211 VERIFY_SCAN_IS (std::ctype_base::cntrl, cs, cs+5);
212 VERIFY_SCAN_IS (std::ctype_base::digit, cs, cs+5);
213 VERIFY_SCAN_IS (std::ctype_base::graph, cs, cs+5);
214 VERIFY_SCAN_IS (std::ctype_base::lower, cs, cs+5);
215 VERIFY_SCAN_IS (std::ctype_base::print, cs, cs);
216 VERIFY_SCAN_IS (std::ctype_base::punct, cs, cs+5);
217 VERIFY_SCAN_IS (std::ctype_base::space, cs, cs);
218 VERIFY_SCAN_IS (std::ctype_base::upper, cs, cs+5);
219 VERIFY_SCAN_IS (std::ctype_base::xdigit, cs, cs+5);
220
221 VERIFY_SCAN_NOT (std::ctype_base::alnum, cs, cs);
222 VERIFY_SCAN_NOT (std::ctype_base::alpha, cs, cs);
223 VERIFY_SCAN_NOT (std::ctype_base::cntrl, cs, cs);
224 VERIFY_SCAN_NOT (std::ctype_base::digit, cs, cs);
225 VERIFY_SCAN_NOT (std::ctype_base::graph, cs, cs);
226 VERIFY_SCAN_NOT (std::ctype_base::lower, cs, cs);
227 VERIFY_SCAN_NOT (std::ctype_base::print, cs, cs+5);
228 VERIFY_SCAN_NOT (std::ctype_base::punct, cs, cs);
229 VERIFY_SCAN_NOT (std::ctype_base::space, cs, cs+5);
230 VERIFY_SCAN_NOT (std::ctype_base::upper, cs, cs);
231 VERIFY_SCAN_NOT (std::ctype_base::xdigit, cs, cs);
232
233 // 'f'
234 VERIFY_SCAN_IS (std::ctype_base::alnum, xf, xf);
235 VERIFY_SCAN_IS (std::ctype_base::alpha, xf, xf);
236 VERIFY_SCAN_IS (std::ctype_base::cntrl, xf, xf+5);
237 VERIFY_SCAN_IS (std::ctype_base::digit, xf, xf+5);
238 VERIFY_SCAN_IS (std::ctype_base::graph, xf, xf);
239 VERIFY_SCAN_IS (std::ctype_base::lower, xf, xf);
240 VERIFY_SCAN_IS (std::ctype_base::print, xf, xf);
241 VERIFY_SCAN_IS (std::ctype_base::punct, xf, xf+5);
242 VERIFY_SCAN_IS (std::ctype_base::space, xf, xf+5);
243 VERIFY_SCAN_IS (std::ctype_base::upper, xf, xf+5);
244 VERIFY_SCAN_IS (std::ctype_base::xdigit, xf, xf);
245
246 VERIFY_SCAN_NOT (std::ctype_base::alnum, xf, xf+5);
247 VERIFY_SCAN_NOT (std::ctype_base::alpha, xf, xf+5);
248 VERIFY_SCAN_NOT (std::ctype_base::cntrl, xf, xf);
249 VERIFY_SCAN_NOT (std::ctype_base::digit, xf, xf);
250 VERIFY_SCAN_NOT (std::ctype_base::graph, xf, xf+5);
251 VERIFY_SCAN_NOT (std::ctype_base::lower, xf, xf+5);
252 VERIFY_SCAN_NOT (std::ctype_base::print, xf, xf+5);
253 VERIFY_SCAN_NOT (std::ctype_base::punct, xf, xf);
254 VERIFY_SCAN_NOT (std::ctype_base::space, xf, xf);
255 VERIFY_SCAN_NOT (std::ctype_base::upper, xf, xf);
256 VERIFY_SCAN_NOT (std::ctype_base::xdigit, xf, xf+5);
257
258 // 'F'
259 VERIFY_SCAN_IS (std::ctype_base::alnum, xF, xF);
260 VERIFY_SCAN_IS (std::ctype_base::alpha, xF, xF);
261 VERIFY_SCAN_IS (std::ctype_base::cntrl, xF, xF+5);
262 VERIFY_SCAN_IS (std::ctype_base::digit, xF, xF+5);
263 VERIFY_SCAN_IS (std::ctype_base::graph, xF, xF);
264 VERIFY_SCAN_IS (std::ctype_base::lower, xF, xF+5);
265 VERIFY_SCAN_IS (std::ctype_base::print, xF, xF);
266 VERIFY_SCAN_IS (std::ctype_base::punct, xF, xF+5);
267 VERIFY_SCAN_IS (std::ctype_base::space, xF, xF+5);
268 VERIFY_SCAN_IS (std::ctype_base::upper, xF, xF);
269 VERIFY_SCAN_IS (std::ctype_base::xdigit, xF, xF);
270
271 VERIFY_SCAN_NOT (std::ctype_base::alnum, xF, xF+5);
272 VERIFY_SCAN_NOT (std::ctype_base::alpha, xF, xF+5);
273 VERIFY_SCAN_NOT (std::ctype_base::cntrl, xF, xF);
274 VERIFY_SCAN_NOT (std::ctype_base::digit, xF, xF);
275 VERIFY_SCAN_NOT (std::ctype_base::graph, xF, xF+5);
276 VERIFY_SCAN_NOT (std::ctype_base::lower, xF, xF);
277 VERIFY_SCAN_NOT (std::ctype_base::print, xF, xF+5);
278 VERIFY_SCAN_NOT (std::ctype_base::punct, xF, xF);
279 VERIFY_SCAN_NOT (std::ctype_base::space, xF, xF);
280 VERIFY_SCAN_NOT (std::ctype_base::upper, xF, xF+5);
281 VERIFY_SCAN_NOT (std::ctype_base::xdigit, xF, xF+5);
282
283 // '!'
284 VERIFY_SCAN_IS (std::ctype_base::alnum, p1, p1+5);
285 VERIFY_SCAN_IS (std::ctype_base::alpha, p1, p1+5);
286 VERIFY_SCAN_IS (std::ctype_base::cntrl, p1, p1+5);
287 VERIFY_SCAN_IS (std::ctype_base::digit, p1, p1+5);
288 VERIFY_SCAN_IS (std::ctype_base::graph, p1, p1);
289 VERIFY_SCAN_IS (std::ctype_base::lower, p1, p1+5);
290 VERIFY_SCAN_IS (std::ctype_base::print, p1, p1);
291 VERIFY_SCAN_IS (std::ctype_base::punct, p1, p1);
292 VERIFY_SCAN_IS (std::ctype_base::space, p1, p1+5);
293 VERIFY_SCAN_IS (std::ctype_base::upper, p1, p1+5);
294 VERIFY_SCAN_IS (std::ctype_base::xdigit, p1, p1+5);
295
296 VERIFY_SCAN_NOT (std::ctype_base::alnum, p1, p1);
297 VERIFY_SCAN_NOT (std::ctype_base::alpha, p1, p1);
298 VERIFY_SCAN_NOT (std::ctype_base::cntrl, p1, p1);
299 VERIFY_SCAN_NOT (std::ctype_base::digit, p1, p1);
300 VERIFY_SCAN_NOT (std::ctype_base::lower, p1, p1);
301 VERIFY_SCAN_NOT (std::ctype_base::print, p1, p1+5);
302 VERIFY_SCAN_NOT (std::ctype_base::punct, p1, p1+5);
303 VERIFY_SCAN_NOT (std::ctype_base::space, p1, p1);
304 VERIFY_SCAN_NOT (std::ctype_base::upper, p1, p1);
305 VERIFY_SCAN_NOT (std::ctype_base::xdigit, p1, p1);
306
307 // '/'
308 VERIFY_SCAN_IS (std::ctype_base::alnum, p2, p2+5);
309 VERIFY_SCAN_IS (std::ctype_base::alpha, p2, p2+5);
310 VERIFY_SCAN_IS (std::ctype_base::cntrl, p2, p2+5);
311 VERIFY_SCAN_IS (std::ctype_base::digit, p2, p2+5);
312 VERIFY_SCAN_IS (std::ctype_base::graph, p2, p2);
313 VERIFY_SCAN_IS (std::ctype_base::lower, p2, p2+5);
314 VERIFY_SCAN_IS (std::ctype_base::print, p2, p2);
315 VERIFY_SCAN_IS (std::ctype_base::punct, p2, p2);
316 VERIFY_SCAN_IS (std::ctype_base::space, p2, p2+5);
317 VERIFY_SCAN_IS (std::ctype_base::upper, p2, p2+5);
318 VERIFY_SCAN_IS (std::ctype_base::xdigit, p2, p2+5);
319
320 VERIFY_SCAN_NOT (std::ctype_base::alnum, p2, p2);
321 VERIFY_SCAN_NOT (std::ctype_base::alpha, p2, p2);
322 VERIFY_SCAN_NOT (std::ctype_base::cntrl, p2, p2);
323 VERIFY_SCAN_NOT (std::ctype_base::digit, p2, p2);
324 VERIFY_SCAN_NOT (std::ctype_base::graph, p2, p2+5);
325 VERIFY_SCAN_NOT (std::ctype_base::lower, p2, p2);
326 VERIFY_SCAN_NOT (std::ctype_base::print, p2, p2+5);
327 VERIFY_SCAN_NOT (std::ctype_base::punct, p2, p2+5);
328 VERIFY_SCAN_NOT (std::ctype_base::space, p2, p2);
329 VERIFY_SCAN_NOT (std::ctype_base::upper, p2, p2);
330 VERIFY_SCAN_NOT (std::ctype_base::xdigit, p2, p2);
331}
332
333int main()
334{
335 test01();
336 return 0;
337}