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