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