strs-test.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "test_common.h"
  2. extern PikaMemInfo pikaMemInfo;
  3. /* the log_buff of printf */
  4. extern char log_buff[LOG_BUFF_MAX][LOG_SIZE];
  5. static void printInfo(const char* argName, char* argVal) {
  6. printf("\t\t[info] %s: \"%s\"\r\n", argName, argVal);
  7. }
  8. static int mem;
  9. TEST(strs, append) {
  10. Args* buffs = New_strBuff();
  11. char* res = strsAppend(buffs, "a", "b");
  12. EXPECT_STREQ("ab", res);
  13. args_deinit(buffs);
  14. EXPECT_EQ(pikaMemNow(), 0);
  15. }
  16. TEST(strs, formatInt) {
  17. Args* buffs = New_strBuff();
  18. char* res = strsFormat(buffs, 32, "test: %d", 3);
  19. EXPECT_STREQ("test: 3", res);
  20. args_deinit(buffs);
  21. EXPECT_EQ(pikaMemNow(), 0);
  22. }
  23. TEST(strs, analizeDef) {
  24. mem = pikaMemNow();
  25. Args* buffs = New_args(NULL);
  26. char currentClassName[] = "Compiler";
  27. char line[] = " def analizeFile(pythonApiPath: str):";
  28. printInfo("currentClassName", currentClassName);
  29. char* defSentenceWithBlock = strsRemovePrefix(buffs, line, " def ");
  30. char* defSentence = strsDeleteChar(buffs, defSentenceWithBlock, ' ');
  31. printInfo("defSentence", defSentence);
  32. char* methodName = strsGetFirstToken(buffs, defSentence, '(');
  33. printInfo("methodName", methodName);
  34. char* methodObjPath =
  35. strsAppend(buffs, strsAppend(buffs, currentClassName, "."), methodName);
  36. printInfo("methodObjPath", methodObjPath);
  37. char* returnType = strsCut(buffs, defSentence, '>', ':');
  38. printInfo("returnType", returnType);
  39. char* typeList = strsCut(buffs, defSentence, '(', ')');
  40. printInfo("typeList", typeList);
  41. if (0 != strGetSize(typeList)) {
  42. int argNum = strCountSign(typeList, ',') + 1;
  43. char* typeListBuff = strsCopy(buffs, typeList);
  44. for (int i = 0; i < argNum; i++) {
  45. char* typeDeclareation = strsPopToken(buffs, &typeListBuff, ',');
  46. printInfo("typeDeclareation", typeDeclareation);
  47. char* argName = strsGetFirstToken(buffs, typeDeclareation, ':');
  48. printInfo("argName", argName);
  49. char* argType = strPointToLastToken(typeDeclareation, ':');
  50. printInfo("argType", argType);
  51. }
  52. }
  53. args_deinit(buffs);
  54. return;
  55. }
  56. TEST(strs, format) {
  57. Args* buffs = New_args(NULL);
  58. char* fmt = strsFormat(buffs, 128, "test int: %d, float %f", 1, 34.2);
  59. EXPECT_TRUE(strEqu("test int: 1, float 34.200000", fmt));
  60. args_deinit(buffs);
  61. }
  62. TEST(strs, mem) {
  63. EXPECT_EQ(pikaMemNow(), mem);
  64. }
  65. TEST(strs, arg_strAppend) {
  66. Arg* str_arg = arg_newStr("a");
  67. str_arg = arg_strAppend(str_arg, "b");
  68. EXPECT_STREQ(arg_getStr(str_arg), "ab");
  69. arg_deinit(str_arg);
  70. EXPECT_EQ(pikaMemNow(), 0);
  71. }
  72. TEST(strs, strsReplace) {
  73. Args* buffs = New_strBuff();
  74. char* res = strsReplace(buffs, "abcdefg", "cd", "47");
  75. EXPECT_STREQ(res, "ab47efg");
  76. args_deinit(buffs);
  77. EXPECT_EQ(pikaMemNow(), 0);
  78. }
  79. TEST(strs, cut_) {
  80. Args* buffs = New_strBuff();
  81. char* res = strsCut(buffs, "print('test,test')", '(', ')');
  82. EXPECT_STREQ(res, "'test,test'");
  83. args_deinit(buffs);
  84. EXPECT_EQ(pikaMemNow(), 0);
  85. }
  86. TEST(str, strPointToLastToken) {
  87. char* tokens = "abc.efg";
  88. char* last_token = strPointToLastToken(tokens, '.');
  89. EXPECT_STREQ(last_token, "efg");
  90. }
  91. TEST(str, transfer) {
  92. /* init */
  93. pikaMemInfo.heapUsedMax = 0;
  94. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  95. extern unsigned char pikaModules_py_a[];
  96. obj_linkLibrary(pikaMain, pikaModules_py_a);
  97. /* run */
  98. __platform_printf("BEGIN\r\n");
  99. pikaVM_run(pikaMain, "'\\r\\n'\n");
  100. /* collect */
  101. /* assert */
  102. EXPECT_STREQ(log_buff[0], "'\r\n'\r\n");
  103. /* deinit */
  104. obj_deinit(pikaMain);
  105. EXPECT_EQ(pikaMemNow(), 0);
  106. }