1 #define WIN32_MEAN_AND_LEAN
2 #define WIN32_LEAN_AND_MEAN
3 //#include <windows.h>
4 #include <conio.h>
5 #define STB_DEFINE
6 #ifndef _M_AMD64
7 #define STB_NPTR
8 #endif
9 #define STB_ONLY
10 #include "stb.h"
11 //#include "stb_file.h"
12 
13 int count;
c(int truth,const char * error)14 void c(int truth, const char *error)
15 {
16    if (!truth) {
17       fprintf(stderr, "Test failed: %s\n", error);
18       ++count;
19    }
20 }
21 
expects(stb_matcher * m,char * s,int result,int len,const char * str)22 char *expects(stb_matcher *m, char *s, int result, int len, const char *str)
23 {
24    int res2,len2=0;
25    res2 = stb_lex(m, s, &len2);
26    c(result == res2 && len == len2, str);
27    return s + len;
28 }
29 
test_lex(void)30 void test_lex(void)
31 {
32    stb_matcher *m = stb_lex_matcher();
33    //         tok_en5 .3 20.1 20. .20 .1
34    char *s = (char*) "tok_en5.3 20.1 20. .20.1";
35 
36    stb_lex_item(m, "[a-zA-Z_][a-zA-Z0-9_]*", 1   );
37    stb_lex_item(m, "[0-9]*\\.?[0-9]*"      , 2   );
38    stb_lex_item(m, "[\r\n\t ]+"            , 3   );
39    stb_lex_item(m, "."                     , -99 );
40    s=expects(m,s,1,7, "stb_lex 1");
41    s=expects(m,s,2,2, "stb_lex 2");
42    s=expects(m,s,3,1, "stb_lex 3");
43    s=expects(m,s,2,4, "stb_lex 4");
44    s=expects(m,s,3,1, "stb_lex 5");
45    s=expects(m,s,2,3, "stb_lex 6");
46    s=expects(m,s,3,1, "stb_lex 7");
47    s=expects(m,s,2,3, "stb_lex 8");
48    s=expects(m,s,2,2, "stb_lex 9");
49    s=expects(m,s,0,0, "stb_lex 10");
50    stb_matcher_free(m);
51 }
52 
main(int argc,char ** argv)53 int main(int argc, char **argv)
54 {
55 #if 0
56    char *p;
57    p = (char*) "abcdefghijklmnopqrstuvwxyz";
58    c(stb_ischar('c', p), "stb_ischar 1");
59    c(stb_ischar('x', p), "stb_ischar 2");
60    c(!stb_ischar('#', p), "stb_ischar 3");
61    c(!stb_ischar('X', p), "stb_ischar 4");
62    p = (char*) "0123456789";
63    c(!stb_ischar('c', p), "stb_ischar 5");
64    c(!stb_ischar('x', p), "stb_ischar 6");
65    c(!stb_ischar('#', p), "stb_ischar 7");
66    c(!stb_ischar('X', p), "stb_ischar 8");
67    p = (char*) "#####";
68    c(!stb_ischar('c', p), "stb_ischar a");
69    c(!stb_ischar('x', p), "stb_ischar b");
70    c(stb_ischar('#', p), "stb_ischar c");
71    c(!stb_ischar('X', p), "stb_ischar d");
72    p = (char*) "xXyY";
73    c(!stb_ischar('c', p), "stb_ischar e");
74    c(stb_ischar('x', p), "stb_ischar f");
75    c(!stb_ischar('#', p), "stb_ischar g");
76    c(stb_ischar('X', p), "stb_ischar h");
77 #endif
78 
79    test_lex();
80 
81    if (count) {
82       _getch();
83    }
84    return 0;
85 }
86