1 // Copyright (c) 1999-2018 David Muse
2 // See the file COPYING for more information
3 
4 #include <rudiments/character.h>
5 #include <rudiments/stdio.h>
6 #include "test.cpp"
7 
main(int argc,const char ** argv)8 int main(int argc, const char **argv) {
9 
10 	header("character");
11 
12 	bool	isalphanumeric[]={
13 		false,false,false,false,false,false,false,false,false,false,
14 		false,false,false,false,false,false,false,false,false,false,
15 		false,false,false,false,false,false,false,false,false,false,
16 		false,false,false,false,false,false,false,false,false,false,
17 		false,false,false,false,false,false,false,false,true,true,
18 		true,true,true,true,true,true,true,true,false,false,
19 		false,false,false,false,false,true,true,true,true,true,
20 		true,true,true,true,true,true,true,true,true,true,
21 		true,true,true,true,true,true,true,true,true,true,
22 		true,false,false,false,false,false,false,true,true,true,
23 		true,true,true,true,true,true,true,true,true,true,
24 		true,true,true,true,true,true,true,true,true,true,
25 		true,true,true,false,false,false,false,false
26 	};
27 
28 	bool	isalphabetical[]={
29 		false,false,false,false,false,false,false,false,false,false,
30 		false,false,false,false,false,false,false,false,false,false,
31 		false,false,false,false,false,false,false,false,false,false,
32 		false,false,false,false,false,false,false,false,false,false,
33 		false,false,false,false,false,false,false,false,false,false,
34 		false,false,false,false,false,false,false,false,false,false,
35 		false,false,false,false,false,true,true,true,true,true,
36 		true,true,true,true,true,true,true,true,true,true,
37 		true,true,true,true,true,true,true,true,true,true,
38 		true,false,false,false,false,false,false,true,true,true,
39 		true,true,true,true,true,true,true,true,true,true,
40 		true,true,true,true,true,true,true,true,true,true,
41 		true,true,true,false,false,false,false,false
42 	};
43 
44 	bool	islowercase[]={
45 		false,false,false,false,false,false,false,false,false,false,
46 		false,false,false,false,false,false,false,false,false,false,
47 		false,false,false,false,false,false,false,false,false,false,
48 		false,false,false,false,false,false,false,false,false,false,
49 		false,false,false,false,false,false,false,false,false,false,
50 		false,false,false,false,false,false,false,false,false,false,
51 		false,false,false,false,false,false,false,false,false,false,
52 		false,false,false,false,false,false,false,false,false,false,
53 		false,false,false,false,false,false,false,false,false,false,
54 		false,false,false,false,false,false,false,true,true,true,
55 		true,true,true,true,true,true,true,true,true,true,
56 		true,true,true,true,true,true,true,true,true,true,
57 		true,true,true,false,false,false,false,false
58 	};
59 
60 	bool	isuppercase[]={
61 		false,false,false,false,false,false,false,false,false,false,
62 		false,false,false,false,false,false,false,false,false,false,
63 		false,false,false,false,false,false,false,false,false,false,
64 		false,false,false,false,false,false,false,false,false,false,
65 		false,false,false,false,false,false,false,false,false,false,
66 		false,false,false,false,false,false,false,false,false,false,
67 		false,false,false,false,false,true,true,true,true,true,
68 		true,true,true,true,true,true,true,true,true,true,
69 		true,true,true,true,true,true,true,true,true,true,
70 		true,false,false,false,false,false,false,false,false,false,
71 		false,false,false,false,false,false,false,false,false,false,
72 		false,false,false,false,false,false,false,false,false,false,
73 		false,false,false,false,false,false,false,false
74 	};
75 
76 	bool	ispunctuation[]={
77 		false,false,false,false,false,false,false,false,false,false,
78 		false,false,false,false,false,false,false,false,false,false,
79 		false,false,false,false,false,false,false,false,false,false,
80 		false,false,false,true,true,true,true,true,true,true,
81 		true,true,true,true,true,true,true,true,false,false,
82 		false,false,false,false,false,false,false,false,true,true,
83 		true,true,true,true,true,false,false,false,false,false,
84 		false,false,false,false,false,false,false,false,false,false,
85 		false,false,false,false,false,false,false,false,false,false,
86 		false,true,true,true,true,true,true,false,false,false,
87 		false,false,false,false,false,false,false,false,false,false,
88 		false,false,false,false,false,false,false,false,false,false,
89 		false,false,false,true,true,true,true,false
90 	};
91 
92 	bool	isprintable[]={
93 		false,false,false,false,false,false,false,false,false,false,
94 		false,false,false,false,false,false,false,false,false,false,
95 		false,false,false,false,false,false,false,false,false,false,
96 		false,false,true,true,true,true,true,true,true,true,
97 		true,true,true,true,true,true,true,true,true,true,
98 		true,true,true,true,true,true,true,true,true,true,
99 		true,true,true,true,true,true,true,true,true,true,
100 		true,true,true,true,true,true,true,true,true,true,
101 		true,true,true,true,true,true,true,true,true,true,
102 		true,true,true,true,true,true,true,true,true,true,
103 		true,true,true,true,true,true,true,true,true,true,
104 		true,true,true,true,true,true,true,true,true,true,
105 		true,true,true,true,true,true,true,false
106 	};
107 
108 	bool	isprintablenonspace[]={
109 		false,false,false,false,false,false,false,false,false,false,
110 		false,false,false,false,false,false,false,false,false,false,
111 		false,false,false,false,false,false,false,false,false,false,
112 		false,false,false,true,true,true,true,true,true,true,
113 		true,true,true,true,true,true,true,true,true,true,
114 		true,true,true,true,true,true,true,true,true,true,
115 		true,true,true,true,true,true,true,true,true,true,
116 		true,true,true,true,true,true,true,true,true,true,
117 		true,true,true,true,true,true,true,true,true,true,
118 		true,true,true,true,true,true,true,true,true,true,
119 		true,true,true,true,true,true,true,true,true,true,
120 		true,true,true,true,true,true,true,true,true,true,
121 		true,true,true,true,true,true,true,false
122 	};
123 
124 	bool	iscontrolchar[]={
125 		true,true,true,true,true,true,true,true,true,true,
126 		true,true,true,true,true,true,true,true,true,true,
127 		true,true,true,true,true,true,true,true,true,true,
128 		true,true,false,false,false,false,false,false,false,false,
129 		false,false,false,false,false,false,false,false,false,false,
130 		false,false,false,false,false,false,false,false,false,false,
131 		false,false,false,false,false,false,false,false,false,false,
132 		false,false,false,false,false,false,false,false,false,false,
133 		false,false,false,false,false,false,false,false,false,false,
134 		false,false,false,false,false,false,false,false,false,false,
135 		false,false,false,false,false,false,false,false,false,false,
136 		false,false,false,false,false,false,false,false,false,false,
137 		false,false,false,false,false,false,false,true
138 	};
139 
140 	bool	isdigit[]={
141 		false,false,false,false,false,false,false,false,false,false,
142 		false,false,false,false,false,false,false,false,false,false,
143 		false,false,false,false,false,false,false,false,false,false,
144 		false,false,false,false,false,false,false,false,false,false,
145 		false,false,false,false,false,false,false,false,true,true,
146 		true,true,true,true,true,true,true,true,false,false,
147 		false,false,false,false,false,false,false,false,false,false,
148 		false,false,false,false,false,false,false,false,false,false,
149 		false,false,false,false,false,false,false,false,false,false,
150 		false,false,false,false,false,false,false,false,false,false,
151 		false,false,false,false,false,false,false,false,false,false,
152 		false,false,false,false,false,false,false,false,false,false,
153 		false,false,false,false,false,false,false,false
154 	};
155 
156 	bool	ishexdigit[]={
157 		false,false,false,false,false,false,false,false,false,false,
158 		false,false,false,false,false,false,false,false,false,false,
159 		false,false,false,false,false,false,false,false,false,false,
160 		false,false,false,false,false,false,false,false,false,false,
161 		false,false,false,false,false,false,false,false,true,true,
162 		true,true,true,true,true,true,true,true,false,false,
163 		false,false,false,false,false,true,true,true,true,true,
164 		true,false,false,false,false,false,false,false,false,false,
165 		false,false,false,false,false,false,false,false,false,false,
166 		false,false,false,false,false,false,false,true,true,true,
167 		true,true,true,false,false,false,false,false,false,false,
168 		false,false,false,false,false,false,false,false,false,false,
169 		false,false,false,false,false,false,false,false
170 	};
171 
172 	bool	isblank[]={
173 		false,false,false,false,false,false,false,false,false,true,
174 		false,false,false,false,false,false,false,false,false,false,
175 		false,false,false,false,false,false,false,false,false,false,
176 		false,false,true,false,false,false,false,false,false,false,
177 		false,false,false,false,false,false,false,false,false,false,
178 		false,false,false,false,false,false,false,false,false,false,
179 		false,false,false,false,false,false,false,false,false,false,
180 		false,false,false,false,false,false,false,false,false,false,
181 		false,false,false,false,false,false,false,false,false,false,
182 		false,false,false,false,false,false,false,false,false,false,
183 		false,false,false,false,false,false,false,false,false,false,
184 		false,false,false,false,false,false,false,false,false,false,
185 		false,false,false,false,false,false,false,false
186 	};
187 
188 	bool	iswhitespace[]={
189 		false,false,false,false,false,false,false,false,false,true,
190 		true,true,true,true,false,false,false,false,false,false,
191 		false,false,false,false,false,false,false,false,false,false,
192 		false,false,true,false,false,false,false,false,false,false,
193 		false,false,false,false,false,false,false,false,false,false,
194 		false,false,false,false,false,false,false,false,false,false,
195 		false,false,false,false,false,false,false,false,false,false,
196 		false,false,false,false,false,false,false,false,false,false,
197 		false,false,false,false,false,false,false,false,false,false,
198 		false,false,false,false,false,false,false,false,false,false,
199 		false,false,false,false,false,false,false,false,false,false,
200 		false,false,false,false,false,false,false,false,false,false,
201 		false,false,false,false,false,false,false,false
202 	};
203 
204 	bool	isascii[]={
205 		true,true,true,true,true,true,true,true,true,true,
206 		true,true,true,true,true,true,true,true,true,true,
207 		true,true,true,true,true,true,true,true,true,true,
208 		true,true,true,true,true,true,true,true,true,true,
209 		true,true,true,true,true,true,true,true,true,true,
210 		true,true,true,true,true,true,true,true,true,true,
211 		true,true,true,true,true,true,true,true,true,true,
212 		true,true,true,true,true,true,true,true,true,true,
213 		true,true,true,true,true,true,true,true,true,true,
214 		true,true,true,true,true,true,true,true,true,true,
215 		true,true,true,true,true,true,true,true,true,true,
216 		true,true,true,true,true,true,true,true,true,true,
217 		true,true,true,true,true,true,true,true
218 	};
219 
220 	char	touppercase[]={
221 		0,1,2,3,4,5,6,7,8,9,
222 		10,11,12,13,14,15,16,17,18,19,
223 		20,21,22,23,24,25,26,27,28,29,
224 		30,31,32,33,34,35,36,37,38,39,
225 		40,41,42,43,44,45,46,47,48,49,
226 		50,51,52,53,54,55,56,57,58,59,
227 		60,61,62,63,64,65,66,67,68,69,
228 		70,71,72,73,74,75,76,77,78,79,
229 		80,81,82,83,84,85,86,87,88,89,
230 		90,91,92,93,94,95,96,'A','B','C',
231 		'D','E','F','G','H','I','J','K','L','M',
232 		'N','O','P','Q','R','S','T','U','V','W',
233 		'X','Y','Z',123,124,125,126,127
234 	};
235 
236 	char	tolowercase[]={
237 		0,1,2,3,4,5,6,7,8,9,
238 		10,11,12,13,14,15,16,17,18,19,
239 		20,21,22,23,24,25,26,27,28,29,
240 		30,31,32,33,34,35,36,37,38,39,
241 		40,41,42,43,44,45,46,47,48,49,
242 		50,51,52,53,54,55,56,57,58,59,
243 		60,61,62,63,64,'a','b','c','d','e',
244 		'f','g','h','i','j','k','l','m','n','o',
245 		'p','q','r','s','t','u','v','w','x','y',
246 		'z',91,92,93,94,95,96,97,98,99,
247 		100,101,102,103,104,105,106,107,108,109,
248 		110,111,112,113,114,115,116,117,118,119,
249 		120,121,122,123,124,125,126,127
250 	};
251 
252 	char	toascii[]={
253 		0,1,2,3,4,5,6,7,8,9,
254 		10,11,12,13,14,15,16,17,18,19,
255 		20,21,22,23,24,25,26,27,28,29,
256 		30,31,32,33,34,35,36,37,38,39,
257 		40,41,42,43,44,45,46,47,48,49,
258 		50,51,52,53,54,55,56,57,58,59,
259 		60,61,62,63,64,65,66,67,68,69,
260 		70,71,72,73,74,75,76,77,78,79,
261 		80,81,82,83,84,85,86,87,88,89,
262 		90,91,92,93,94,95,96,97,98,99,
263 		100,101,102,103,104,105,106,107,108,109,
264 		110,111,112,113,114,115,116,117,118,119,
265 		120,121,122,123,124,125,126,127
266 	};
267 
268 	stdoutput.printf("character:\n");
269 
270 	for (unsigned char c=0; c<128; c++) {
271 
272 		stdoutput.printf("\t0x%02x \"%c\":\n",c,c);
273 		test("\tisAlphanumeric",
274 			character::isAlphanumeric(c)==isalphanumeric[c]);
275 		test("\tisAlphabetical",
276 			character::isAlphabetical(c)==isalphabetical[c]);
277 		test("\tisLowerase",
278 			character::isLowerCase(c)==islowercase[c]);
279 		test("\tisUpperCase",
280 			character::isUpperCase(c)==isuppercase[c]);
281 		test("\tisPunctuation",
282 			character::isPunctuation(c)==ispunctuation[c]);
283 		test("\tisPrintable",
284 			character::isPrintable(c)==isprintable[c]);
285 		test("\tisPrintableNonSpace",
286 			character::isPrintableNonSpace(c)==
287 					isprintablenonspace[c]);
288 		test("\tisControlCharacter",
289 			character::isControlCharacter(c)==iscontrolchar[c]);
290 		test("\tisDigit",
291 			character::isDigit(c)==isdigit[c]);
292 		test("\tisHexDigit",
293 			character::isHexDigit(c)==ishexdigit[c]);
294 		test("\tisBlank",
295 			character::isBlank(c)==isblank[c]);
296 		test("\tisWhitespace",
297 			character::isWhitespace(c)==iswhitespace[c]);
298 		test("\tisAscii",
299 			character::isAscii(c)==isascii[c]);
300 		test("\ttoUpperCase",
301 			character::toUpperCase(c)==touppercase[c]);
302 		test("\ttoLowerCase",
303 			character::toLowerCase(c)==tolowercase[c]);
304 		test("\ttoAscii",
305 			character::toAscii(c)==toascii[c]);
306 	}
307 }
308