string-test.cpp 7.7 KB

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