scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

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 */