0005-ctype.c (10082B)
1 #include <assert.h> 2 #include <ctype.h> 3 #include <stdio.h> 4 #include <limits.h> 5 6 /* 7 * This test assumes an ascii representation 8 */ 9 10 #define TESTW(f) fputs(#f ":" , stdout); \ 11 for (i = 0; i <= UCHAR_MAX; i++) \ 12 if (f(i)) printf(" %d", i); \ 13 putchar('\n') 14 15 #define TESTC(f) fputs(#f ": " , stdout); \ 16 for (i = 0; i <= UCHAR_MAX; i++) \ 17 if (f(i)) putchar(i); \ 18 putchar('\n') 19 20 #define TESTEOF(f) fputs(#f ": " , stdout); \ 21 if (!f(EOF)) putchar('!'); puts("EOF"); 22 23 #define TESTLU(f) \ 24 for (i = 0; i < UCHAR_MAX; i++) { \ 25 n = f(i); \ 26 if (!isgraph(i)) \ 27 continue; \ 28 printf("%s: %c <-> %c\n", #f, i, n); \ 29 } 30 31 void 32 test1() 33 { 34 int i; 35 36 puts("\ntest1"); 37 TESTC(isalnum); 38 TESTC(isalpha); 39 TESTC(isdigit); 40 TESTC(isgraph); 41 TESTC(islower); 42 TESTC(isupper); 43 TESTC(isprint); 44 TESTC(ispunct); 45 TESTC(isxdigit); 46 TESTC(isdigit); 47 TESTW(iscntrl); 48 TESTW(isspace); 49 TESTEOF(isalpha); 50 TESTEOF(isdigit); 51 TESTEOF(isgraph); 52 TESTEOF(islower); 53 TESTEOF(isupper); 54 TESTEOF(isprint); 55 TESTEOF(ispunct); 56 TESTEOF(isxdigit); 57 TESTEOF(isdigit); 58 TESTEOF(iscntrl); 59 TESTEOF(isspace); 60 } 61 62 #undef isalnum 63 #undef isalpha 64 #undef isdigit 65 #undef isgraph 66 #undef islower 67 #undef isupper 68 #undef isprint 69 #undef ispunct 70 #undef isxdigit 71 #undef isdigit 72 73 void 74 test2() 75 { 76 int i; 77 78 puts("\ntest2"); 79 TESTC(isalnum); 80 TESTC(isalpha); 81 TESTC(isdigit); 82 TESTC(isgraph); 83 TESTC(islower); 84 TESTC(isupper); 85 TESTC(isprint); 86 TESTC(ispunct); 87 TESTC(isxdigit); 88 TESTC(isdigit); 89 TESTW(iscntrl); 90 TESTW(isspace); 91 TESTEOF(isalpha); 92 TESTEOF(isdigit); 93 TESTEOF(isgraph); 94 TESTEOF(islower); 95 TESTEOF(isupper); 96 TESTEOF(isprint); 97 TESTEOF(ispunct); 98 TESTEOF(isxdigit); 99 TESTEOF(isdigit); 100 TESTEOF(iscntrl); 101 TESTEOF(isspace); 102 } 103 104 void test3() 105 { 106 int i, n; 107 108 puts("\ntest3"); 109 TESTLU(tolower); 110 TESTLU(toupper); 111 } 112 113 #undef tolower 114 #undef toupper 115 116 void test4() 117 { 118 int i, n; 119 120 puts("\ntest4"); 121 TESTLU(tolower); 122 TESTLU(toupper); 123 assert(tolower(EOF) == EOF); 124 assert(toupper(EOF) == EOF); 125 } 126 127 int 128 main() 129 { 130 test1(); 131 test2(); 132 test3(); 133 test4(); 134 135 return 0; 136 } 137 138 /* 139 output: 140 141 test1 142 isalnum: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 143 isalpha: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 144 isdigit: 0123456789 145 isgraph: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 146 islower: abcdefghijklmnopqrstuvwxyz 147 isupper: ABCDEFGHIJKLMNOPQRSTUVWXYZ 148 isprint: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 149 ispunct: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 150 isxdigit: 0123456789ABCDEFabcdef 151 isdigit: 0123456789 152 iscntrl: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 127 153 isspace: 9 10 11 12 13 32 154 isalpha: !EOF 155 isdigit: !EOF 156 isgraph: !EOF 157 islower: !EOF 158 isupper: !EOF 159 isprint: !EOF 160 ispunct: !EOF 161 isxdigit: !EOF 162 isdigit: !EOF 163 iscntrl: !EOF 164 isspace: !EOF 165 166 test2 167 isalnum: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 168 isalpha: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 169 isdigit: 0123456789 170 isgraph: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 171 islower: abcdefghijklmnopqrstuvwxyz 172 isupper: ABCDEFGHIJKLMNOPQRSTUVWXYZ 173 isprint: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 174 ispunct: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 175 isxdigit: 0123456789ABCDEFabcdef 176 isdigit: 0123456789 177 iscntrl: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 127 178 isspace: 9 10 11 12 13 32 179 isalpha: !EOF 180 isdigit: !EOF 181 isgraph: !EOF 182 islower: !EOF 183 isupper: !EOF 184 isprint: !EOF 185 ispunct: !EOF 186 isxdigit: !EOF 187 isdigit: !EOF 188 iscntrl: !EOF 189 isspace: !EOF 190 191 test3 192 tolower: ! <-> ! 193 tolower: " <-> " 194 tolower: # <-> # 195 tolower: $ <-> $ 196 tolower: % <-> % 197 tolower: & <-> & 198 tolower: ' <-> ' 199 tolower: ( <-> ( 200 tolower: ) <-> ) 201 tolower: * <-> * 202 tolower: + <-> + 203 tolower: , <-> , 204 tolower: - <-> - 205 tolower: . <-> . 206 tolower: / <-> / 207 tolower: 0 <-> 0 208 tolower: 1 <-> 1 209 tolower: 2 <-> 2 210 tolower: 3 <-> 3 211 tolower: 4 <-> 4 212 tolower: 5 <-> 5 213 tolower: 6 <-> 6 214 tolower: 7 <-> 7 215 tolower: 8 <-> 8 216 tolower: 9 <-> 9 217 tolower: : <-> : 218 tolower: ; <-> ; 219 tolower: < <-> < 220 tolower: = <-> = 221 tolower: > <-> > 222 tolower: ? <-> ? 223 tolower: @ <-> @ 224 tolower: A <-> a 225 tolower: B <-> b 226 tolower: C <-> c 227 tolower: D <-> d 228 tolower: E <-> e 229 tolower: F <-> f 230 tolower: G <-> g 231 tolower: H <-> h 232 tolower: I <-> i 233 tolower: J <-> j 234 tolower: K <-> k 235 tolower: L <-> l 236 tolower: M <-> m 237 tolower: N <-> n 238 tolower: O <-> o 239 tolower: P <-> p 240 tolower: Q <-> q 241 tolower: R <-> r 242 tolower: S <-> s 243 tolower: T <-> t 244 tolower: U <-> u 245 tolower: V <-> v 246 tolower: W <-> w 247 tolower: X <-> x 248 tolower: Y <-> y 249 tolower: Z <-> z 250 tolower: [ <-> [ 251 tolower: \ <-> \ 252 tolower: ] <-> ] 253 tolower: ^ <-> ^ 254 tolower: _ <-> _ 255 tolower: ` <-> ` 256 tolower: a <-> a 257 tolower: b <-> b 258 tolower: c <-> c 259 tolower: d <-> d 260 tolower: e <-> e 261 tolower: f <-> f 262 tolower: g <-> g 263 tolower: h <-> h 264 tolower: i <-> i 265 tolower: j <-> j 266 tolower: k <-> k 267 tolower: l <-> l 268 tolower: m <-> m 269 tolower: n <-> n 270 tolower: o <-> o 271 tolower: p <-> p 272 tolower: q <-> q 273 tolower: r <-> r 274 tolower: s <-> s 275 tolower: t <-> t 276 tolower: u <-> u 277 tolower: v <-> v 278 tolower: w <-> w 279 tolower: x <-> x 280 tolower: y <-> y 281 tolower: z <-> z 282 tolower: { <-> { 283 tolower: | <-> | 284 tolower: } <-> } 285 tolower: ~ <-> ~ 286 toupper: ! <-> ! 287 toupper: " <-> " 288 toupper: # <-> # 289 toupper: $ <-> $ 290 toupper: % <-> % 291 toupper: & <-> & 292 toupper: ' <-> ' 293 toupper: ( <-> ( 294 toupper: ) <-> ) 295 toupper: * <-> * 296 toupper: + <-> + 297 toupper: , <-> , 298 toupper: - <-> - 299 toupper: . <-> . 300 toupper: / <-> / 301 toupper: 0 <-> 0 302 toupper: 1 <-> 1 303 toupper: 2 <-> 2 304 toupper: 3 <-> 3 305 toupper: 4 <-> 4 306 toupper: 5 <-> 5 307 toupper: 6 <-> 6 308 toupper: 7 <-> 7 309 toupper: 8 <-> 8 310 toupper: 9 <-> 9 311 toupper: : <-> : 312 toupper: ; <-> ; 313 toupper: < <-> < 314 toupper: = <-> = 315 toupper: > <-> > 316 toupper: ? <-> ? 317 toupper: @ <-> @ 318 toupper: A <-> A 319 toupper: B <-> B 320 toupper: C <-> C 321 toupper: D <-> D 322 toupper: E <-> E 323 toupper: F <-> F 324 toupper: G <-> G 325 toupper: H <-> H 326 toupper: I <-> I 327 toupper: J <-> J 328 toupper: K <-> K 329 toupper: L <-> L 330 toupper: M <-> M 331 toupper: N <-> N 332 toupper: O <-> O 333 toupper: P <-> P 334 toupper: Q <-> Q 335 toupper: R <-> R 336 toupper: S <-> S 337 toupper: T <-> T 338 toupper: U <-> U 339 toupper: V <-> V 340 toupper: W <-> W 341 toupper: X <-> X 342 toupper: Y <-> Y 343 toupper: Z <-> Z 344 toupper: [ <-> [ 345 toupper: \ <-> \ 346 toupper: ] <-> ] 347 toupper: ^ <-> ^ 348 toupper: _ <-> _ 349 toupper: ` <-> ` 350 toupper: a <-> A 351 toupper: b <-> B 352 toupper: c <-> C 353 toupper: d <-> D 354 toupper: e <-> E 355 toupper: f <-> F 356 toupper: g <-> G 357 toupper: h <-> H 358 toupper: i <-> I 359 toupper: j <-> J 360 toupper: k <-> K 361 toupper: l <-> L 362 toupper: m <-> M 363 toupper: n <-> N 364 toupper: o <-> O 365 toupper: p <-> P 366 toupper: q <-> Q 367 toupper: r <-> R 368 toupper: s <-> S 369 toupper: t <-> T 370 toupper: u <-> U 371 toupper: v <-> V 372 toupper: w <-> W 373 toupper: x <-> X 374 toupper: y <-> Y 375 toupper: z <-> Z 376 toupper: { <-> { 377 toupper: | <-> | 378 toupper: } <-> } 379 toupper: ~ <-> ~ 380 381 test4 382 tolower: ! <-> ! 383 tolower: " <-> " 384 tolower: # <-> # 385 tolower: $ <-> $ 386 tolower: % <-> % 387 tolower: & <-> & 388 tolower: ' <-> ' 389 tolower: ( <-> ( 390 tolower: ) <-> ) 391 tolower: * <-> * 392 tolower: + <-> + 393 tolower: , <-> , 394 tolower: - <-> - 395 tolower: . <-> . 396 tolower: / <-> / 397 tolower: 0 <-> 0 398 tolower: 1 <-> 1 399 tolower: 2 <-> 2 400 tolower: 3 <-> 3 401 tolower: 4 <-> 4 402 tolower: 5 <-> 5 403 tolower: 6 <-> 6 404 tolower: 7 <-> 7 405 tolower: 8 <-> 8 406 tolower: 9 <-> 9 407 tolower: : <-> : 408 tolower: ; <-> ; 409 tolower: < <-> < 410 tolower: = <-> = 411 tolower: > <-> > 412 tolower: ? <-> ? 413 tolower: @ <-> @ 414 tolower: A <-> a 415 tolower: B <-> b 416 tolower: C <-> c 417 tolower: D <-> d 418 tolower: E <-> e 419 tolower: F <-> f 420 tolower: G <-> g 421 tolower: H <-> h 422 tolower: I <-> i 423 tolower: J <-> j 424 tolower: K <-> k 425 tolower: L <-> l 426 tolower: M <-> m 427 tolower: N <-> n 428 tolower: O <-> o 429 tolower: P <-> p 430 tolower: Q <-> q 431 tolower: R <-> r 432 tolower: S <-> s 433 tolower: T <-> t 434 tolower: U <-> u 435 tolower: V <-> v 436 tolower: W <-> w 437 tolower: X <-> x 438 tolower: Y <-> y 439 tolower: Z <-> z 440 tolower: [ <-> [ 441 tolower: \ <-> \ 442 tolower: ] <-> ] 443 tolower: ^ <-> ^ 444 tolower: _ <-> _ 445 tolower: ` <-> ` 446 tolower: a <-> a 447 tolower: b <-> b 448 tolower: c <-> c 449 tolower: d <-> d 450 tolower: e <-> e 451 tolower: f <-> f 452 tolower: g <-> g 453 tolower: h <-> h 454 tolower: i <-> i 455 tolower: j <-> j 456 tolower: k <-> k 457 tolower: l <-> l 458 tolower: m <-> m 459 tolower: n <-> n 460 tolower: o <-> o 461 tolower: p <-> p 462 tolower: q <-> q 463 tolower: r <-> r 464 tolower: s <-> s 465 tolower: t <-> t 466 tolower: u <-> u 467 tolower: v <-> v 468 tolower: w <-> w 469 tolower: x <-> x 470 tolower: y <-> y 471 tolower: z <-> z 472 tolower: { <-> { 473 tolower: | <-> | 474 tolower: } <-> } 475 tolower: ~ <-> ~ 476 toupper: ! <-> ! 477 toupper: " <-> " 478 toupper: # <-> # 479 toupper: $ <-> $ 480 toupper: % <-> % 481 toupper: & <-> & 482 toupper: ' <-> ' 483 toupper: ( <-> ( 484 toupper: ) <-> ) 485 toupper: * <-> * 486 toupper: + <-> + 487 toupper: , <-> , 488 toupper: - <-> - 489 toupper: . <-> . 490 toupper: / <-> / 491 toupper: 0 <-> 0 492 toupper: 1 <-> 1 493 toupper: 2 <-> 2 494 toupper: 3 <-> 3 495 toupper: 4 <-> 4 496 toupper: 5 <-> 5 497 toupper: 6 <-> 6 498 toupper: 7 <-> 7 499 toupper: 8 <-> 8 500 toupper: 9 <-> 9 501 toupper: : <-> : 502 toupper: ; <-> ; 503 toupper: < <-> < 504 toupper: = <-> = 505 toupper: > <-> > 506 toupper: ? <-> ? 507 toupper: @ <-> @ 508 toupper: A <-> A 509 toupper: B <-> B 510 toupper: C <-> C 511 toupper: D <-> D 512 toupper: E <-> E 513 toupper: F <-> F 514 toupper: G <-> G 515 toupper: H <-> H 516 toupper: I <-> I 517 toupper: J <-> J 518 toupper: K <-> K 519 toupper: L <-> L 520 toupper: M <-> M 521 toupper: N <-> N 522 toupper: O <-> O 523 toupper: P <-> P 524 toupper: Q <-> Q 525 toupper: R <-> R 526 toupper: S <-> S 527 toupper: T <-> T 528 toupper: U <-> U 529 toupper: V <-> V 530 toupper: W <-> W 531 toupper: X <-> X 532 toupper: Y <-> Y 533 toupper: Z <-> Z 534 toupper: [ <-> [ 535 toupper: \ <-> \ 536 toupper: ] <-> ] 537 toupper: ^ <-> ^ 538 toupper: _ <-> _ 539 toupper: ` <-> ` 540 toupper: a <-> A 541 toupper: b <-> B 542 toupper: c <-> C 543 toupper: d <-> D 544 toupper: e <-> E 545 toupper: f <-> F 546 toupper: g <-> G 547 toupper: h <-> H 548 toupper: i <-> I 549 toupper: j <-> J 550 toupper: k <-> K 551 toupper: l <-> L 552 toupper: m <-> M 553 toupper: n <-> N 554 toupper: o <-> O 555 toupper: p <-> P 556 toupper: q <-> Q 557 toupper: r <-> R 558 toupper: s <-> S 559 toupper: t <-> T 560 toupper: u <-> U 561 toupper: v <-> V 562 toupper: w <-> W 563 toupper: x <-> X 564 toupper: y <-> Y 565 toupper: z <-> Z 566 toupper: { <-> { 567 toupper: | <-> | 568 toupper: } <-> } 569 toupper: ~ <-> ~ 570 end: 571 */