updated gnulib
[gnutls:gnutls.git] / gl / tests / test-c-ctype.c
1 /* Test of character handling in C locale.
2    Copyright (C) 2005, 2007-2015 Free Software Foundation, Inc.
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 3 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17 /* Written by Bruno Haible <bruno@clisp.org>, 2005.  */
18
19 #include <config.h>
20
21 #include "c-ctype.h"
22
23 #include <locale.h>
24
25 #include "macros.h"
26
27 static void
28 test_all (void)
29 {
30   int c;
31
32   for (c = -0x80; c < 0x100; c++)
33     {
34       ASSERT (c_isascii (c) == (c >= 0 && c < 0x80));
35
36       switch (c)
37         {
38         case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
39         case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
40         case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
41         case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
42         case 'Y': case 'Z':
43         case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
44         case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
45         case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
46         case 's': case 't': case 'u': case 'v': case 'w': case 'x':
47         case 'y': case 'z':
48         case '0': case '1': case '2': case '3': case '4': case '5':
49         case '6': case '7': case '8': case '9':
50           ASSERT (c_isalnum (c) == 1);
51           break;
52         default:
53           ASSERT (c_isalnum (c) == 0);
54           break;
55         }
56
57       switch (c)
58         {
59         case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
60         case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
61         case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
62         case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
63         case 'Y': case 'Z':
64         case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
65         case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
66         case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
67         case 's': case 't': case 'u': case 'v': case 'w': case 'x':
68         case 'y': case 'z':
69           ASSERT (c_isalpha (c) == 1);
70           break;
71         default:
72           ASSERT (c_isalpha (c) == 0);
73           break;
74         }
75
76       switch (c)
77         {
78         case '\t': case ' ':
79           ASSERT (c_isblank (c) == 1);
80           break;
81         default:
82           ASSERT (c_isblank (c) == 0);
83           break;
84         }
85
86       ASSERT (c_iscntrl (c) == ((c >= 0 && c < 0x20) || c == 0x7f));
87
88       switch (c)
89         {
90         case '0': case '1': case '2': case '3': case '4': case '5':
91         case '6': case '7': case '8': case '9':
92           ASSERT (c_isdigit (c) == 1);
93           break;
94         default:
95           ASSERT (c_isdigit (c) == 0);
96           break;
97         }
98
99       switch (c)
100         {
101         case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
102         case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
103         case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
104         case 's': case 't': case 'u': case 'v': case 'w': case 'x':
105         case 'y': case 'z':
106           ASSERT (c_islower (c) == 1);
107           break;
108         default:
109           ASSERT (c_islower (c) == 0);
110           break;
111         }
112
113       ASSERT (c_isgraph (c) == ((c >= 0x20 && c < 0x7f) && c != ' '));
114
115       ASSERT (c_isprint (c) == (c >= 0x20 && c < 0x7f));
116
117       ASSERT (c_ispunct (c) == (c_isgraph (c) && !c_isalnum (c)));
118
119       switch (c)
120         {
121         case ' ': case '\t': case '\n': case '\v': case '\f': case '\r':
122           ASSERT (c_isspace (c) == 1);
123           break;
124         default:
125           ASSERT (c_isspace (c) == 0);
126           break;
127         }
128
129       switch (c)
130         {
131         case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
132         case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
133         case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
134         case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
135         case 'Y': case 'Z':
136           ASSERT (c_isupper (c) == 1);
137           break;
138         default:
139           ASSERT (c_isupper (c) == 0);
140           break;
141         }
142
143       switch (c)
144         {
145         case '0': case '1': case '2': case '3': case '4': case '5':
146         case '6': case '7': case '8': case '9':
147         case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
148         case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
149           ASSERT (c_isxdigit (c) == 1);
150           break;
151         default:
152           ASSERT (c_isxdigit (c) == 0);
153           break;
154         }
155
156       switch (c)
157         {
158         case 'A':
159           ASSERT (c_tolower (c) == 'a');
160           ASSERT (c_toupper (c) == c);
161           break;
162         case 'B':
163           ASSERT (c_tolower (c) == 'b');
164           ASSERT (c_toupper (c) == c);
165           break;
166         case 'C':
167           ASSERT (c_tolower (c) == 'c');
168           ASSERT (c_toupper (c) == c);
169           break;
170         case 'D':
171           ASSERT (c_tolower (c) == 'd');
172           ASSERT (c_toupper (c) == c);
173           break;
174         case 'E':
175           ASSERT (c_tolower (c) == 'e');
176           ASSERT (c_toupper (c) == c);
177           break;
178         case 'F':
179           ASSERT (c_tolower (c) == 'f');
180           ASSERT (c_toupper (c) == c);
181           break;
182         case 'G':
183           ASSERT (c_tolower (c) == 'g');
184           ASSERT (c_toupper (c) == c);
185           break;
186         case 'H':
187           ASSERT (c_tolower (c) == 'h');
188           ASSERT (c_toupper (c) == c);
189           break;
190         case 'I':
191           ASSERT (c_tolower (c) == 'i');
192           ASSERT (c_toupper (c) == c);
193           break;
194         case 'J':
195           ASSERT (c_tolower (c) == 'j');
196           ASSERT (c_toupper (c) == c);
197           break;
198         case 'K':
199           ASSERT (c_tolower (c) == 'k');
200           ASSERT (c_toupper (c) == c);
201           break;
202         case 'L':
203           ASSERT (c_tolower (c) == 'l');
204           ASSERT (c_toupper (c) == c);
205           break;
206         case 'M':
207           ASSERT (c_tolower (c) == 'm');
208           ASSERT (c_toupper (c) == c);
209           break;
210         case 'N':
211           ASSERT (c_tolower (c) == 'n');
212           ASSERT (c_toupper (c) == c);
213           break;
214         case 'O':
215           ASSERT (c_tolower (c) == 'o');
216           ASSERT (c_toupper (c) == c);
217           break;
218         case 'P':
219           ASSERT (c_tolower (c) == 'p');
220           ASSERT (c_toupper (c) == c);
221           break;
222         case 'Q':
223           ASSERT (c_tolower (c) == 'q');
224           ASSERT (c_toupper (c) == c);
225           break;
226         case 'R':
227           ASSERT (c_tolower (c) == 'r');
228           ASSERT (c_toupper (c) == c);
229           break;
230         case 'S':
231           ASSERT (c_tolower (c) == 's');
232           ASSERT (c_toupper (c) == c);
233           break;
234         case 'T':
235           ASSERT (c_tolower (c) == 't');
236           ASSERT (c_toupper (c) == c);
237           break;
238         case 'U':
239           ASSERT (c_tolower (c) == 'u');
240           ASSERT (c_toupper (c) == c);
241           break;
242         case 'V':
243           ASSERT (c_tolower (c) == 'v');
244           ASSERT (c_toupper (c) == c);
245           break;
246         case 'W':
247           ASSERT (c_tolower (c) == 'w');
248           ASSERT (c_toupper (c) == c);
249           break;
250         case 'X':
251           ASSERT (c_tolower (c) == 'x');
252           ASSERT (c_toupper (c) == c);
253           break;
254         case 'Y':
255           ASSERT (c_tolower (c) == 'y');
256           ASSERT (c_toupper (c) == c);
257           break;
258         case 'Z':
259           ASSERT (c_tolower (c) == 'z');
260           ASSERT (c_toupper (c) == c);
261           break;
262         case 'a':
263           ASSERT (c_tolower (c) == c);
264           ASSERT (c_toupper (c) == 'A');
265           break;
266         case 'b':
267           ASSERT (c_tolower (c) == c);
268           ASSERT (c_toupper (c) == 'B');
269           break;
270         case 'c':
271           ASSERT (c_tolower (c) == c);
272           ASSERT (c_toupper (c) == 'C');
273           break;
274         case 'd':
275           ASSERT (c_tolower (c) == c);
276           ASSERT (c_toupper (c) == 'D');
277           break;
278         case 'e':
279           ASSERT (c_tolower (c) == c);
280           ASSERT (c_toupper (c) == 'E');
281           break;
282         case 'f':
283           ASSERT (c_tolower (c) == c);
284           ASSERT (c_toupper (c) == 'F');
285           break;
286         case 'g':
287           ASSERT (c_tolower (c) == c);
288           ASSERT (c_toupper (c) == 'G');
289           break;
290         case 'h':
291           ASSERT (c_tolower (c) == c);
292           ASSERT (c_toupper (c) == 'H');
293           break;
294         case 'i':
295           ASSERT (c_tolower (c) == c);
296           ASSERT (c_toupper (c) == 'I');
297           break;
298         case 'j':
299           ASSERT (c_tolower (c) == c);
300           ASSERT (c_toupper (c) == 'J');
301           break;
302         case 'k':
303           ASSERT (c_tolower (c) == c);
304           ASSERT (c_toupper (c) == 'K');
305           break;
306         case 'l':
307           ASSERT (c_tolower (c) == c);
308           ASSERT (c_toupper (c) == 'L');
309           break;
310         case 'm':
311           ASSERT (c_tolower (c) == c);
312           ASSERT (c_toupper (c) == 'M');
313           break;
314         case 'n':
315           ASSERT (c_tolower (c) == c);
316           ASSERT (c_toupper (c) == 'N');
317           break;
318         case 'o':
319           ASSERT (c_tolower (c) == c);
320           ASSERT (c_toupper (c) == 'O');
321           break;
322         case 'p':
323           ASSERT (c_tolower (c) == c);
324           ASSERT (c_toupper (c) == 'P');
325           break;
326         case 'q':
327           ASSERT (c_tolower (c) == c);
328           ASSERT (c_toupper (c) == 'Q');
329           break;
330         case 'r':
331           ASSERT (c_tolower (c) == c);
332           ASSERT (c_toupper (c) == 'R');
333           break;
334         case 's':
335           ASSERT (c_tolower (c) == c);
336           ASSERT (c_toupper (c) == 'S');
337           break;
338         case 't':
339           ASSERT (c_tolower (c) == c);
340           ASSERT (c_toupper (c) == 'T');
341           break;
342         case 'u':
343           ASSERT (c_tolower (c) == c);
344           ASSERT (c_toupper (c) == 'U');
345           break;
346         case 'v':
347           ASSERT (c_tolower (c) == c);
348           ASSERT (c_toupper (c) == 'V');
349           break;
350         case 'w':
351           ASSERT (c_tolower (c) == c);
352           ASSERT (c_toupper (c) == 'W');
353           break;
354         case 'x':
355           ASSERT (c_tolower (c) == c);
356           ASSERT (c_toupper (c) == 'X');
357           break;
358         case 'y':
359           ASSERT (c_tolower (c) == c);
360           ASSERT (c_toupper (c) == 'Y');
361           break;
362         case 'z':
363           ASSERT (c_tolower (c) == c);
364           ASSERT (c_toupper (c) == 'Z');
365           break;
366         default:
367           ASSERT (c_tolower (c) == c);
368           ASSERT (c_toupper (c) == c);
369           break;
370         }
371     }
372 }
373
374 int
375 main ()
376 {
377   test_all ();
378
379   setlocale (LC_ALL, "de_DE");
380   test_all ();
381
382   setlocale (LC_ALL, "ja_JP.EUC-JP");
383   test_all ();
384
385   return 0;
386 }