1#include <assert.h>2#include <ctype.h>3#include <stdio.h>4#include <limits.h>56/*7 * This test assumes an ascii representation8 */910#define TESTW(f) fputs(#f ":" , stdout); \11 for (i = 0; i <= UCHAR_MAX; i++) \12 if (f(i)) printf(" %d", i); \13 putchar('\n')1415#define TESTC(f) fputs(#f ": " , stdout); \16 for (i = 0; i <= UCHAR_MAX; i++) \17 if (f(i)) putchar(i); \18 putchar('\n')1920#define TESTEOF(f) fputs(#f ": " , stdout); \21 if (!f(EOF)) putchar('!'); puts("EOF");2223#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 }3031void32test1()33{34 int i;3536 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}6162#undef isalnum63#undef isalpha64#undef isdigit65#undef isgraph66#undef islower67#undef isupper68#undef isprint69#undef ispunct70#undef isxdigit71#undef isdigit7273void74test2()75{76 int i;7778 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}103104void test3()105{106 int i, n;107108 puts("\ntest3");109 TESTLU(tolower);110 TESTLU(toupper);111}112113#undef tolower114#undef toupper115116void test4()117{118 int i, n;119120 puts("\ntest4");121 TESTLU(tolower);122 TESTLU(toupper);123 assert(tolower(EOF) == EOF);124 assert(toupper(EOF) == EOF);125}126127int128main()129{130 test1();131 test2();132 test3();133 test4();134135 return 0;136}137138/*139output:140141test1142isalnum: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz143isalpha: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz144isdigit: 0123456789145isgraph: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~146islower: abcdefghijklmnopqrstuvwxyz147isupper: ABCDEFGHIJKLMNOPQRSTUVWXYZ148isprint: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~149ispunct: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~150isxdigit: 0123456789ABCDEFabcdef151isdigit: 0123456789152iscntrl: 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 127153isspace: 9 10 11 12 13 32154isalpha: !EOF155isdigit: !EOF156isgraph: !EOF157islower: !EOF158isupper: !EOF159isprint: !EOF160ispunct: !EOF161isxdigit: !EOF162isdigit: !EOF163iscntrl: !EOF164isspace: !EOF165166test2167isalnum: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz168isalpha: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz169isdigit: 0123456789170isgraph: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~171islower: abcdefghijklmnopqrstuvwxyz172isupper: ABCDEFGHIJKLMNOPQRSTUVWXYZ173isprint: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~174ispunct: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~175isxdigit: 0123456789ABCDEFabcdef176isdigit: 0123456789177iscntrl: 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 127178isspace: 9 10 11 12 13 32179isalpha: !EOF180isdigit: !EOF181isgraph: !EOF182islower: !EOF183isupper: !EOF184isprint: !EOF185ispunct: !EOF186isxdigit: !EOF187isdigit: !EOF188iscntrl: !EOF189isspace: !EOF190191test3192tolower: ! <-> !193tolower: " <-> "194tolower: # <-> #195tolower: $ <-> $196tolower: % <-> %197tolower: & <-> &198tolower: ' <-> '199tolower: ( <-> (200tolower: ) <-> )201tolower: * <-> *202tolower: + <-> +203tolower: , <-> ,204tolower: - <-> -205tolower: . <-> .206tolower: / <-> /207tolower: 0 <-> 0208tolower: 1 <-> 1209tolower: 2 <-> 2210tolower: 3 <-> 3211tolower: 4 <-> 4212tolower: 5 <-> 5213tolower: 6 <-> 6214tolower: 7 <-> 7215tolower: 8 <-> 8216tolower: 9 <-> 9217tolower: : <-> :218tolower: ; <-> ;219tolower: < <-> <220tolower: = <-> =221tolower: > <-> >222tolower: ? <-> ?223tolower: @ <-> @224tolower: A <-> a225tolower: B <-> b226tolower: C <-> c227tolower: D <-> d228tolower: E <-> e229tolower: F <-> f230tolower: G <-> g231tolower: H <-> h232tolower: I <-> i233tolower: J <-> j234tolower: K <-> k235tolower: L <-> l236tolower: M <-> m237tolower: N <-> n238tolower: O <-> o239tolower: P <-> p240tolower: Q <-> q241tolower: R <-> r242tolower: S <-> s243tolower: T <-> t244tolower: U <-> u245tolower: V <-> v246tolower: W <-> w247tolower: X <-> x248tolower: Y <-> y249tolower: Z <-> z250tolower: [ <-> [251tolower: \ <-> \252tolower: ] <-> ]253tolower: ^ <-> ^254tolower: _ <-> _255tolower: ` <-> `256tolower: a <-> a257tolower: b <-> b258tolower: c <-> c259tolower: d <-> d260tolower: e <-> e261tolower: f <-> f262tolower: g <-> g263tolower: h <-> h264tolower: i <-> i265tolower: j <-> j266tolower: k <-> k267tolower: l <-> l268tolower: m <-> m269tolower: n <-> n270tolower: o <-> o271tolower: p <-> p272tolower: q <-> q273tolower: r <-> r274tolower: s <-> s275tolower: t <-> t276tolower: u <-> u277tolower: v <-> v278tolower: w <-> w279tolower: x <-> x280tolower: y <-> y281tolower: z <-> z282tolower: { <-> {283tolower: | <-> |284tolower: } <-> }285tolower: ~ <-> ~286toupper: ! <-> !287toupper: " <-> "288toupper: # <-> #289toupper: $ <-> $290toupper: % <-> %291toupper: & <-> &292toupper: ' <-> '293toupper: ( <-> (294toupper: ) <-> )295toupper: * <-> *296toupper: + <-> +297toupper: , <-> ,298toupper: - <-> -299toupper: . <-> .300toupper: / <-> /301toupper: 0 <-> 0302toupper: 1 <-> 1303toupper: 2 <-> 2304toupper: 3 <-> 3305toupper: 4 <-> 4306toupper: 5 <-> 5307toupper: 6 <-> 6308toupper: 7 <-> 7309toupper: 8 <-> 8310toupper: 9 <-> 9311toupper: : <-> :312toupper: ; <-> ;313toupper: < <-> <314toupper: = <-> =315toupper: > <-> >316toupper: ? <-> ?317toupper: @ <-> @318toupper: A <-> A319toupper: B <-> B320toupper: C <-> C321toupper: D <-> D322toupper: E <-> E323toupper: F <-> F324toupper: G <-> G325toupper: H <-> H326toupper: I <-> I327toupper: J <-> J328toupper: K <-> K329toupper: L <-> L330toupper: M <-> M331toupper: N <-> N332toupper: O <-> O333toupper: P <-> P334toupper: Q <-> Q335toupper: R <-> R336toupper: S <-> S337toupper: T <-> T338toupper: U <-> U339toupper: V <-> V340toupper: W <-> W341toupper: X <-> X342toupper: Y <-> Y343toupper: Z <-> Z344toupper: [ <-> [345toupper: \ <-> \346toupper: ] <-> ]347toupper: ^ <-> ^348toupper: _ <-> _349toupper: ` <-> `350toupper: a <-> A351toupper: b <-> B352toupper: c <-> C353toupper: d <-> D354toupper: e <-> E355toupper: f <-> F356toupper: g <-> G357toupper: h <-> H358toupper: i <-> I359toupper: j <-> J360toupper: k <-> K361toupper: l <-> L362toupper: m <-> M363toupper: n <-> N364toupper: o <-> O365toupper: p <-> P366toupper: q <-> Q367toupper: r <-> R368toupper: s <-> S369toupper: t <-> T370toupper: u <-> U371toupper: v <-> V372toupper: w <-> W373toupper: x <-> X374toupper: y <-> Y375toupper: z <-> Z376toupper: { <-> {377toupper: | <-> |378toupper: } <-> }379toupper: ~ <-> ~380381test4382tolower: ! <-> !383tolower: " <-> "384tolower: # <-> #385tolower: $ <-> $386tolower: % <-> %387tolower: & <-> &388tolower: ' <-> '389tolower: ( <-> (390tolower: ) <-> )391tolower: * <-> *392tolower: + <-> +393tolower: , <-> ,394tolower: - <-> -395tolower: . <-> .396tolower: / <-> /397tolower: 0 <-> 0398tolower: 1 <-> 1399tolower: 2 <-> 2400tolower: 3 <-> 3401tolower: 4 <-> 4402tolower: 5 <-> 5403tolower: 6 <-> 6404tolower: 7 <-> 7405tolower: 8 <-> 8406tolower: 9 <-> 9407tolower: : <-> :408tolower: ; <-> ;409tolower: < <-> <410tolower: = <-> =411tolower: > <-> >412tolower: ? <-> ?413tolower: @ <-> @414tolower: A <-> a415tolower: B <-> b416tolower: C <-> c417tolower: D <-> d418tolower: E <-> e419tolower: F <-> f420tolower: G <-> g421tolower: H <-> h422tolower: I <-> i423tolower: J <-> j424tolower: K <-> k425tolower: L <-> l426tolower: M <-> m427tolower: N <-> n428tolower: O <-> o429tolower: P <-> p430tolower: Q <-> q431tolower: R <-> r432tolower: S <-> s433tolower: T <-> t434tolower: U <-> u435tolower: V <-> v436tolower: W <-> w437tolower: X <-> x438tolower: Y <-> y439tolower: Z <-> z440tolower: [ <-> [441tolower: \ <-> \442tolower: ] <-> ]443tolower: ^ <-> ^444tolower: _ <-> _445tolower: ` <-> `446tolower: a <-> a447tolower: b <-> b448tolower: c <-> c449tolower: d <-> d450tolower: e <-> e451tolower: f <-> f452tolower: g <-> g453tolower: h <-> h454tolower: i <-> i455tolower: j <-> j456tolower: k <-> k457tolower: l <-> l458tolower: m <-> m459tolower: n <-> n460tolower: o <-> o461tolower: p <-> p462tolower: q <-> q463tolower: r <-> r464tolower: s <-> s465tolower: t <-> t466tolower: u <-> u467tolower: v <-> v468tolower: w <-> w469tolower: x <-> x470tolower: y <-> y471tolower: z <-> z472tolower: { <-> {473tolower: | <-> |474tolower: } <-> }475tolower: ~ <-> ~476toupper: ! <-> !477toupper: " <-> "478toupper: # <-> #479toupper: $ <-> $480toupper: % <-> %481toupper: & <-> &482toupper: ' <-> '483toupper: ( <-> (484toupper: ) <-> )485toupper: * <-> *486toupper: + <-> +487toupper: , <-> ,488toupper: - <-> -489toupper: . <-> .490toupper: / <-> /491toupper: 0 <-> 0492toupper: 1 <-> 1493toupper: 2 <-> 2494toupper: 3 <-> 3495toupper: 4 <-> 4496toupper: 5 <-> 5497toupper: 6 <-> 6498toupper: 7 <-> 7499toupper: 8 <-> 8500toupper: 9 <-> 9501toupper: : <-> :502toupper: ; <-> ;503toupper: < <-> <504toupper: = <-> =505toupper: > <-> >506toupper: ? <-> ?507toupper: @ <-> @508toupper: A <-> A509toupper: B <-> B510toupper: C <-> C511toupper: D <-> D512toupper: E <-> E513toupper: F <-> F514toupper: G <-> G515toupper: H <-> H516toupper: I <-> I517toupper: J <-> J518toupper: K <-> K519toupper: L <-> L520toupper: M <-> M521toupper: N <-> N522toupper: O <-> O523toupper: P <-> P524toupper: Q <-> Q525toupper: R <-> R526toupper: S <-> S527toupper: T <-> T528toupper: U <-> U529toupper: V <-> V530toupper: W <-> W531toupper: X <-> X532toupper: Y <-> Y533toupper: Z <-> Z534toupper: [ <-> [535toupper: \ <-> \536toupper: ] <-> ]537toupper: ^ <-> ^538toupper: _ <-> _539toupper: ` <-> `540toupper: a <-> A541toupper: b <-> B542toupper: c <-> C543toupper: d <-> D544toupper: e <-> E545toupper: f <-> F546toupper: g <-> G547toupper: h <-> H548toupper: i <-> I549toupper: j <-> J550toupper: k <-> K551toupper: l <-> L552toupper: m <-> M553toupper: n <-> N554toupper: o <-> O555toupper: p <-> P556toupper: q <-> Q557toupper: r <-> R558toupper: s <-> S559toupper: t <-> T560toupper: u <-> U561toupper: v <-> V562toupper: w <-> W563toupper: x <-> X564toupper: y <-> Y565toupper: z <-> Z566toupper: { <-> {567toupper: | <-> |568toupper: } <-> }569toupper: ~ <-> ~570end:571*/