string-test.cpp 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. #include "test_common.h"
  2. #if PIKA_SYNTAX_FORMAT_ENABLE
  3. TEST(string, cformat) {
  4. /* init */
  5. pikaMemInfo.heapUsedMax = 0;
  6. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  7. /* run */
  8. obj_run(pikaMain, "s = cformat('test:%d:%f', 33, 1.5)\n");
  9. /* collect */
  10. char* s = obj_getStr(pikaMain, "s");
  11. /* assert */
  12. EXPECT_STREQ("test:33:1.500000", s);
  13. /* deinit */
  14. obj_deinit(pikaMain);
  15. EXPECT_EQ(pikaMemNow(), 0);
  16. }
  17. #endif
  18. #if PIKA_SYNTAX_FORMAT_ENABLE
  19. TEST(string, cformat1) {
  20. /* init */
  21. pikaMemInfo.heapUsedMax = 0;
  22. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  23. /* run */
  24. obj_run(pikaMain, "s = 'res:%d' % 23\n");
  25. /* collect */
  26. char* s = obj_getStr(pikaMain, "s");
  27. /* assert */
  28. EXPECT_STREQ("res:23", s);
  29. /* deinit */
  30. obj_deinit(pikaMain);
  31. EXPECT_EQ(pikaMemNow(), 0);
  32. }
  33. #endif
  34. #if PIKA_SYNTAX_FORMAT_ENABLE
  35. TEST(string, format1) {
  36. /* init */
  37. pikaMemInfo.heapUsedMax = 0;
  38. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  39. /* run */
  40. obj_run(pikaMain, "print('tes:%d,%f'%(123,1.5))\n");
  41. /* collect */
  42. /* assert */
  43. EXPECT_STREQ("tes:123,1.500000\r\n", log_buff[0]);
  44. /* deinit */
  45. obj_deinit(pikaMain);
  46. EXPECT_EQ(pikaMemNow(), 0);
  47. }
  48. #endif
  49. #if PIKA_SYNTAX_FORMAT_ENABLE
  50. TEST(string, format2) {
  51. /* init */
  52. pikaMemInfo.heapUsedMax = 0;
  53. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  54. /* run */
  55. obj_run(pikaMain, "print('tes:%d,%f'%(123,1.5), 23)\n");
  56. /* collect */
  57. /* assert */
  58. EXPECT_STREQ("tes:123,1.500000 23\r\n", log_buff[0]);
  59. /* deinit */
  60. obj_deinit(pikaMain);
  61. EXPECT_EQ(pikaMemNow(), 0);
  62. }
  63. #endif
  64. #if PIKA_SYNTAX_FORMAT_ENABLE
  65. TEST(string, print_file) {
  66. /* init */
  67. pikaMemInfo.heapUsedMax = 0;
  68. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  69. /* run */
  70. __platform_printf("BEGIN\r\n");
  71. pikaVM_runSingleFile(pikaMain, "../../examples/BuiltIn/print.py");
  72. /* collect */
  73. /* assert */
  74. EXPECT_STREQ(log_buff[0], "format: test,0123,15.50\r\n");
  75. EXPECT_STREQ(log_buff[1], "my name is old wang my age is 43\r\n");
  76. EXPECT_STREQ(log_buff[2], "test\r\n");
  77. EXPECT_STREQ(log_buff[3], "BEGIN\r\n");
  78. /* deinit */
  79. obj_deinit(pikaMain);
  80. EXPECT_EQ(pikaMemNow(), 0);
  81. }
  82. #endif
  83. #if PIKA_SYNTAX_FORMAT_ENABLE
  84. TEST(string, format_parse1) {
  85. pikaMemInfo.heapUsedMax = 0;
  86. Args* buffs = New_strBuff();
  87. char* lines = "print('tes:%0.2f'% mem.getMax())";
  88. printf("%s\n", lines);
  89. char* pikaAsm = Parser_multiLineToAsm(buffs, lines);
  90. printf("%s", pikaAsm);
  91. EXPECT_STREQ(pikaAsm,
  92. "B0\n"
  93. "2 STR tes:%0.2f\n"
  94. "2 RUN mem.getMax\n"
  95. "1 RUN cformat\n"
  96. "0 RUN print\n");
  97. args_deinit(buffs);
  98. EXPECT_EQ(pikaMemNow(), 0);
  99. }
  100. #endif
  101. TEST(string, split) {
  102. /* init */
  103. pikaMemInfo.heapUsedMax = 0;
  104. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  105. /* run */
  106. obj_run(pikaMain,
  107. "s = PikaStdData.String('a,b,c,d')\n"
  108. "tokens = s.split(',')\n"
  109. "for item in tokens:\n"
  110. " print(item)\n"
  111. "\n");
  112. /* collect */
  113. /* assert */
  114. EXPECT_STREQ(log_buff[0], "d\r\n");
  115. EXPECT_STREQ(log_buff[1], "c\r\n");
  116. EXPECT_STREQ(log_buff[2], "b\r\n");
  117. EXPECT_STREQ(log_buff[3], "a\r\n");
  118. /* deinit */
  119. obj_deinit(pikaMain);
  120. EXPECT_EQ(pikaMemNow(), 0);
  121. }
  122. TEST(string, strip) {
  123. /* init */
  124. pikaMemInfo.heapUsedMax = 0;
  125. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  126. /* run */
  127. obj_run(pikaMain,
  128. "s = PikaStdData.String(' a,b,c, d ')\n"
  129. "res = s.strip()\n"
  130. "\n");
  131. /* collect */
  132. char* res = obj_getStr(pikaMain, "res");
  133. /* assert */
  134. EXPECT_STREQ(res, "a,b,c, d");
  135. /* deinit */
  136. obj_deinit(pikaMain);
  137. EXPECT_EQ(pikaMemNow(), 0);
  138. }
  139. TEST(string, replace) {
  140. /* init */
  141. pikaMemInfo.heapUsedMax = 0;
  142. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  143. /* run */
  144. obj_run(pikaMain,
  145. "s = PikaStdData.String(' a,b,c, d ')\n"
  146. "res = s.replace('a', 'A')\n"
  147. "\n");
  148. /* collect */
  149. char* res = obj_getStr(pikaMain, "res");
  150. /* assert */
  151. EXPECT_STREQ(res, " A,b,c, d ");
  152. /* deinit */
  153. obj_deinit(pikaMain);
  154. EXPECT_EQ(pikaMemNow(), 0);
  155. }
  156. #if PIKA_SYNTAX_IMPORT_EX_ENABLE
  157. TEST(string, replace_chain) {
  158. /* init */
  159. pikaMemInfo.heapUsedMax = 0;
  160. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  161. /* run */
  162. obj_run(pikaMain,
  163. "from PikaStdData import String as S\n"
  164. "res = PikaStdData.String(' a,b,c, d ').replace('a', 'A')\n"
  165. "res2 = S(S('[test]').replace('[','')).replace(']','')\n"
  166. "\n");
  167. /* collect */
  168. char* res = obj_getStr(pikaMain, "res");
  169. char* res2 = obj_getStr(pikaMain, "res2");
  170. /* assert */
  171. EXPECT_STREQ(res, " A,b,c, d ");
  172. EXPECT_STREQ(res2, "test");
  173. /* deinit */
  174. obj_deinit(pikaMain);
  175. EXPECT_EQ(pikaMemNow(), 0);
  176. }
  177. #endif
  178. TEST(string, split_chain) {
  179. /* init */
  180. pikaMemInfo.heapUsedMax = 0;
  181. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  182. /* run */
  183. __platform_printf("BEGIN\r\n");
  184. obj_run(pikaMain,
  185. "PikaStdData.String(' a,b,c, d ').split(',')\n"
  186. "\n");
  187. /* collect */
  188. /* assert */
  189. EXPECT_STREQ(log_buff[0], "[' a', 'b', 'c', ' d ']\r\n");
  190. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  191. /* deinit */
  192. obj_deinit(pikaMain);
  193. EXPECT_EQ(pikaMemNow(), 0);
  194. }
  195. TEST(string, str_chain) {
  196. /* init */
  197. pikaMemInfo.heapUsedMax = 0;
  198. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  199. /* run */
  200. __platform_printf("BEGIN\r\n");
  201. obj_run(pikaMain,
  202. "PikaStdData.String('test').str\n"
  203. "\n");
  204. /* collect */
  205. /* assert */
  206. EXPECT_STREQ(log_buff[0], "'test'\r\n");
  207. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  208. /* deinit */
  209. obj_deinit(pikaMain);
  210. EXPECT_EQ(pikaMemNow(), 0);
  211. }
  212. #if PIKA_SYNTAX_FORMAT_ENABLE
  213. TEST(string, str_issue1) {
  214. /* init */
  215. pikaMemInfo.heapUsedMax = 0;
  216. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  217. /* run */
  218. __platform_printf("BEGIN\r\n");
  219. pikaVM_runSingleFile(pikaMain, "test/python/str_issue1.py");
  220. /* collect */
  221. char* ret_str = obj_getStr(pikaMain, "ret_str");
  222. /* assert */
  223. EXPECT_STREQ(ret_str, "None");
  224. /* deinit */
  225. obj_deinit(pikaMain);
  226. EXPECT_EQ(pikaMemNow(), 0);
  227. }
  228. #endif