]> pd.if.org Git - pdclib/blob - functions/wctype/wctype.c
dos2unix
[pdclib] / functions / wctype / wctype.c
1 /* wctype( const char * )
2
3    This file is part of the Public Domain C Library (PDCLib).
4    Permission is granted to use, modify, and / or redistribute at will.
5 */
6
7 #include <wctype.h>
8 #ifndef REGTEST
9 #include <string.h>
10 #include "_PDCLIB_locale.h"
11
12 wctype_t wctype( const char * property )
13 {
14     if(property) switch(property[0])
15     {
16         case 'a':
17             if(strcmp(property, "alpha") == 0) {
18                 return _PDCLIB_CTYPE_ALPHA;
19             } else if(strcmp(property, "alnum") == 0) {
20                 return _PDCLIB_CTYPE_ALPHA | _PDCLIB_CTYPE_DIGIT;
21             } else return 0;
22
23         case 'b':
24             if(strcmp(property, "blank") == 0) {
25                 return _PDCLIB_CTYPE_BLANK;
26             } else return 0;
27
28         case 'c':
29             if(strcmp(property, "cntrl") == 0) {
30                 return _PDCLIB_CTYPE_CNTRL;
31             } else return 0;
32
33         case 'd':
34             if(strcmp(property, "digit") == 0) {
35                 return _PDCLIB_CTYPE_DIGIT;
36             } else return 0;
37
38         case 'g':
39             if(strcmp(property, "graph") == 0) {
40                 return _PDCLIB_CTYPE_GRAPH;
41             } else return 0;
42
43         case 'l':
44             if(strcmp(property, "lower") == 0) {
45                 return _PDCLIB_CTYPE_LOWER;
46             } else return 0;
47
48         case 'p':
49             if(strcmp(property, "print") == 0) {
50                 return _PDCLIB_CTYPE_GRAPH | _PDCLIB_CTYPE_SPACE;
51             } else if(strcmp(property, "punct") == 0) {
52                 return _PDCLIB_CTYPE_PUNCT;
53             } else return 0;
54
55         case 's':
56             if(strcmp(property, "space") == 0) {
57                 return _PDCLIB_CTYPE_SPACE;
58             } else return 0;
59
60         case 'u':
61             if(strcmp(property, "upper") == 0) {
62                 return _PDCLIB_CTYPE_UPPER;
63             } else return 0;
64
65         case 'x':
66             if(strcmp(property, "xdigit") == 0) {
67                 return _PDCLIB_CTYPE_XDIGT;
68             } else return 0;
69     }
70     return 0;
71 }
72
73 #endif
74
75 #ifdef TEST
76 #include "_PDCLIB_test.h"
77
78 int main( void )
79 {
80     TESTCASE(wctype("")   == 0);
81     TESTCASE_NOREG(wctype(NULL) == 0); // mingw libc crashes on this
82
83     TESTCASE(wctype("alpha")  != 0);
84     TESTCASE(wctype("alnum")  != 0);
85     TESTCASE(wctype("blank")  != 0);
86     TESTCASE(wctype("cntrl")  != 0);
87     TESTCASE(wctype("digit")  != 0);
88     TESTCASE(wctype("graph")  != 0);
89     TESTCASE(wctype("lower")  != 0);
90     TESTCASE(wctype("print")  != 0);
91     TESTCASE(wctype("punct")  != 0);
92     TESTCASE(wctype("space")  != 0);
93     TESTCASE(wctype("upper")  != 0);
94     TESTCASE(wctype("xdigit") != 0);
95
96     TESTCASE_NOREG(wctype("alpha")  == _PDCLIB_CTYPE_ALPHA);
97     TESTCASE_NOREG(wctype("alnum")  == (_PDCLIB_CTYPE_ALPHA | _PDCLIB_CTYPE_DIGIT));
98     TESTCASE_NOREG(wctype("blank")  == _PDCLIB_CTYPE_BLANK);
99     TESTCASE_NOREG(wctype("cntrl")  == _PDCLIB_CTYPE_CNTRL);
100     TESTCASE_NOREG(wctype("digit")  == _PDCLIB_CTYPE_DIGIT);
101     TESTCASE_NOREG(wctype("graph")  == _PDCLIB_CTYPE_GRAPH);
102     TESTCASE_NOREG(wctype("lower")  == _PDCLIB_CTYPE_LOWER);
103     TESTCASE_NOREG(wctype("print")  == (_PDCLIB_CTYPE_GRAPH | _PDCLIB_CTYPE_SPACE));
104     TESTCASE_NOREG(wctype("punct")  == _PDCLIB_CTYPE_PUNCT);
105     TESTCASE_NOREG(wctype("space")  == _PDCLIB_CTYPE_SPACE);
106     TESTCASE_NOREG(wctype("upper")  == _PDCLIB_CTYPE_UPPER);
107     TESTCASE_NOREG(wctype("xdigit") == _PDCLIB_CTYPE_XDIGT);
108     return TEST_RESULTS;
109 }
110 #endif