string-test.cpp 7.7 KB

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