stb_cpp.cpp 2.2 KB

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