string-test.cpp 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  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, split_str) {
  125. /* init */
  126. pikaMemInfo.heapUsedMax = 0;
  127. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  128. /* run */
  129. obj_run(pikaMain,
  130. "s = PikaStdData.String('aabbcc')\n"
  131. "tokens = s.split('bb')\n"
  132. "for item in tokens:\n"
  133. " print(item)\n"
  134. "\n");
  135. /* collect */
  136. /* assert */
  137. EXPECT_STREQ(log_buff[0], "cc\r\n");
  138. EXPECT_STREQ(log_buff[1], "aa\r\n");
  139. /* deinit */
  140. obj_deinit(pikaMain);
  141. EXPECT_EQ(pikaMemNow(), 0);
  142. }
  143. TEST(string, strip) {
  144. /* init */
  145. pikaMemInfo.heapUsedMax = 0;
  146. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  147. /* run */
  148. obj_run(pikaMain,
  149. "s = PikaStdData.String(' a,b,c, d ')\n"
  150. "res = s.strip()\n"
  151. "\n");
  152. /* collect */
  153. char* res = obj_getStr(pikaMain, "res");
  154. /* assert */
  155. EXPECT_STREQ(res, "a,b,c, d");
  156. /* deinit */
  157. obj_deinit(pikaMain);
  158. EXPECT_EQ(pikaMemNow(), 0);
  159. }
  160. TEST(string, replace) {
  161. /* init */
  162. pikaMemInfo.heapUsedMax = 0;
  163. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  164. /* run */
  165. obj_run(pikaMain,
  166. "s = PikaStdData.String(' a,b,c, d ')\n"
  167. "res = s.replace('a', 'A')\n"
  168. "\n");
  169. /* collect */
  170. char* res = obj_getStr(pikaMain, "res");
  171. /* assert */
  172. EXPECT_STREQ(res, " A,b,c, d ");
  173. /* deinit */
  174. obj_deinit(pikaMain);
  175. EXPECT_EQ(pikaMemNow(), 0);
  176. }
  177. #if PIKA_SYNTAX_IMPORT_EX_ENABLE
  178. TEST(string, replace_chain) {
  179. /* init */
  180. pikaMemInfo.heapUsedMax = 0;
  181. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  182. /* run */
  183. obj_run(pikaMain,
  184. "from PikaStdData import String as S\n"
  185. "res = PikaStdData.String(' a,b,c, d ').replace('a', 'A')\n"
  186. "res2 = S(S('[test]').replace('[','')).replace(']','')\n"
  187. "\n");
  188. /* collect */
  189. char* res = obj_getStr(pikaMain, "res");
  190. char* res2 = obj_getStr(pikaMain, "res2");
  191. /* assert */
  192. EXPECT_STREQ(res, " A,b,c, d ");
  193. EXPECT_STREQ(res2, "test");
  194. /* deinit */
  195. obj_deinit(pikaMain);
  196. EXPECT_EQ(pikaMemNow(), 0);
  197. }
  198. #endif
  199. #if !PIKA_NANO_ENABLE
  200. TEST(string, split_chain) {
  201. /* init */
  202. pikaMemInfo.heapUsedMax = 0;
  203. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  204. /* run */
  205. __platform_printf("BEGIN\r\n");
  206. obj_run(pikaMain,
  207. "PikaStdData.String(' a,b,c, d ').split(',')\n"
  208. "\n");
  209. /* collect */
  210. /* assert */
  211. EXPECT_STREQ(log_buff[0], "[' a', 'b', 'c', ' d ']\r\n");
  212. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  213. /* deinit */
  214. obj_deinit(pikaMain);
  215. EXPECT_EQ(pikaMemNow(), 0);
  216. }
  217. #endif
  218. TEST(string, str_chain) {
  219. /* init */
  220. pikaMemInfo.heapUsedMax = 0;
  221. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  222. /* run */
  223. __platform_printf("BEGIN\r\n");
  224. obj_run(pikaMain,
  225. "PikaStdData.String('test').str\n"
  226. "\n");
  227. /* collect */
  228. /* assert */
  229. EXPECT_STREQ(log_buff[0], "'test'\r\n");
  230. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  231. /* deinit */
  232. obj_deinit(pikaMain);
  233. EXPECT_EQ(pikaMemNow(), 0);
  234. }
  235. #if PIKA_SYNTAX_FORMAT_ENABLE
  236. TEST(string, str_issue1) {
  237. /* init */
  238. pikaMemInfo.heapUsedMax = 0;
  239. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  240. /* run */
  241. __platform_printf("BEGIN\r\n");
  242. pikaVM_runSingleFile(pikaMain, "test/python/str_issue1.py");
  243. /* collect */
  244. char* ret_str = obj_getStr(pikaMain, "ret_str");
  245. /* assert */
  246. EXPECT_STREQ(ret_str, "None");
  247. /* deinit */
  248. obj_deinit(pikaMain);
  249. EXPECT_EQ(pikaMemNow(), 0);
  250. }
  251. #endif
  252. #if PIKA_STRING_UTF8_ENABLE
  253. TEST(string, utf8_1) {
  254. /* init */
  255. pikaMemInfo.heapUsedMax = 0;
  256. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  257. /* run */
  258. __platform_printf("BEGIN\r\n");
  259. obj_run(pikaMain,
  260. "s = '你好,Hello, Halo, Hi.'\n"
  261. "s1 = s[0:9]\n"
  262. "s2 = s[0:2]\n"
  263. "s1\n"
  264. "s2\n");
  265. /* collect */
  266. char* s1 = obj_getStr(pikaMain, "s1");
  267. char* s2 = obj_getStr(pikaMain, "s2");
  268. /* assert */
  269. EXPECT_STREQ(s1, "你好,Hello,");
  270. EXPECT_STREQ(s2, "你好");
  271. /* deinit */
  272. obj_deinit(pikaMain);
  273. EXPECT_EQ(pikaMemNow(), 0);
  274. }
  275. #endif
  276. TEST(string, popfirsttoken) {
  277. char test[] = "a,b,c, d";
  278. char* p = test;
  279. char* token = strPopFirstToken(&p, ',');
  280. EXPECT_STREQ(token, "a");
  281. EXPECT_STREQ(p, "b,c, d");
  282. }
  283. TEST(string, popfirsttoken_no) {
  284. char test[] = "a,b,c, d";
  285. char* p = test;
  286. char* token = strPopFirstToken(&p, '.');
  287. EXPECT_STREQ(token, "a,b,c, d");
  288. EXPECT_STREQ(p, "");
  289. }
  290. TEST(string, popfirsttoken_void) {
  291. char test[] = "";
  292. char* p = test;
  293. char* token = strPopFirstToken(&p, '.');
  294. EXPECT_STREQ(token, "");
  295. EXPECT_STREQ(p, "");
  296. }
  297. TEST_END