stddata-test.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. #include "test_common.h"
  2. #if PIKA_SYNTAX_SLICE_ENABLE
  3. TEST(stddata, test1) {
  4. /* init */
  5. pikaMemInfo.heapUsedMax = 0;
  6. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  7. /* run */
  8. __platform_printf("BEGIN\r\n");
  9. pikaVM_runSingleFile(pikaMain, "../../examples/BuiltIn/dict.py");
  10. /* collect */
  11. /* assert */
  12. EXPECT_STREQ(log_buff[0], "{'len': 3, 'list': [1, 2, 3]}\r\n");
  13. EXPECT_STREQ(log_buff[1], "dict_keys(['c', 'b', 'a'])\r\n");
  14. EXPECT_STREQ(log_buff[2], "a\r\n");
  15. EXPECT_STREQ(log_buff[3], "b\r\n");
  16. EXPECT_STREQ(log_buff[4], "c\r\n");
  17. EXPECT_STREQ(log_buff[5], "a\r\n");
  18. EXPECT_STREQ(log_buff[6], "b\r\n");
  19. EXPECT_STREQ(log_buff[7], "c\r\n");
  20. EXPECT_STREQ(log_buff[8], "{'c': 'test', 'b': 2, 'a': 1}\r\n");
  21. EXPECT_STREQ(log_buff[9], "BEGIN\r\n");
  22. /* deinit */
  23. obj_deinit(pikaMain);
  24. EXPECT_EQ(pikaMemNow(), 0);
  25. }
  26. #endif
  27. /* test b2a_hex */
  28. TEST(stddata, test2) {
  29. /* init */
  30. pikaMemInfo.heapUsedMax = 0;
  31. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  32. /* run */
  33. __platform_printf("BEGIN\r\n");
  34. obj_run(pikaMain,
  35. "import binascii\n"
  36. "res = str(binascii.b2a_hex(b'德卡科技'))\n");
  37. /* collect */
  38. char* res = obj_getStr(pikaMain, "res");
  39. /* assert */
  40. EXPECT_STREQ(res, "E5BEB7E58DA1E7A791E68A80");
  41. /* deinit */
  42. obj_deinit(pikaMain);
  43. }
  44. /* test a2b_hex */
  45. TEST(stddata, a2b_hex) {
  46. /* init */
  47. pikaMemInfo.heapUsedMax = 0;
  48. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  49. /* run */
  50. __platform_printf("BEGIN\r\n");
  51. obj_run(pikaMain,
  52. "import binascii\n"
  53. "text = binascii.a2b_hex('e4b8ade69687e6b58be8af95e794a8e4be8b')\n"
  54. "res = str(text)\n");
  55. /* collect */
  56. char* res = obj_getStr(pikaMain, "res");
  57. /* assert */
  58. EXPECT_STREQ(res, "中文测试用例");
  59. /* deinit */
  60. obj_deinit(pikaMain);
  61. }
  62. #if PIKA_SYNTAX_IMPORT_EX_ENABLE
  63. TEST(stddata, encode_decode) {
  64. /* init */
  65. pikaMemInfo.heapUsedMax = 0;
  66. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  67. /* run */
  68. __platform_printf("BEGIN\r\n");
  69. pikaVM_runSingleFile(pikaMain, "../../examples/BuiltIn/encode_decode.py");
  70. /* collect */
  71. char* b_s = obj_getStr(pikaMain, "b_s");
  72. uint8_t* s_b = obj_getBytes(pikaMain, "s_b");
  73. /* assert */
  74. EXPECT_STREQ(b_s, "test");
  75. EXPECT_EQ(s_b[0], 't');
  76. EXPECT_EQ(s_b[1], 'e');
  77. EXPECT_EQ(s_b[2], 's');
  78. EXPECT_EQ(s_b[3], 't');
  79. /* deinit */
  80. obj_deinit(pikaMain);
  81. }
  82. #endif
  83. #if PIKA_FILEIO_ENABLE
  84. TEST(stddata, fileio) {
  85. /* init */
  86. pikaMemInfo.heapUsedMax = 0;
  87. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  88. /* run */
  89. __platform_printf("BEGIN\r\n");
  90. pikaVM_runSingleFile(pikaMain, "../../examples/BuiltIn/file.py");
  91. Arg* s = obj_getArg(pikaMain, "s");
  92. Arg* b = obj_getArg(pikaMain, "b");
  93. /* assert */
  94. EXPECT_EQ(arg_getType(s), ARG_TYPE_STRING);
  95. EXPECT_EQ(arg_getType(b), ARG_TYPE_BYTES);
  96. /* deinit */
  97. obj_deinit(pikaMain);
  98. }
  99. #endif
  100. #if !PIKA_NANO_ENABLE
  101. TEST(list, in) {
  102. /* init */
  103. pikaMemInfo.heapUsedMax = 0;
  104. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  105. /* run */
  106. __platform_printf("BEGIN\r\n");
  107. obj_run(pikaMain,
  108. "a = [1, 2, 3]\n"
  109. "if 1 in a:\n"
  110. " print('1 in a')\n");
  111. /* collect */
  112. /* assert */
  113. EXPECT_STREQ(log_buff[0], "1 in a\r\n");
  114. /* deinit */
  115. obj_deinit(pikaMain);
  116. EXPECT_EQ(pikaMemNow(), 0);
  117. }
  118. TEST(dict, in) {
  119. /* init */
  120. pikaMemInfo.heapUsedMax = 0;
  121. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  122. /* run */
  123. __platform_printf("BEGIN\r\n");
  124. obj_run(pikaMain,
  125. "if \"a\" in {\"a\":1, \"b\":2}:\n"
  126. " print('a in dict')\n");
  127. /* collect */
  128. /* assert */
  129. EXPECT_STREQ(log_buff[0], "a in dict\r\n");
  130. /* deinit */
  131. obj_deinit(pikaMain);
  132. EXPECT_EQ(pikaMemNow(), 0);
  133. }
  134. TEST(list, slice) {
  135. /* init */
  136. pikaMemInfo.heapUsedMax = 0;
  137. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  138. /* run */
  139. __platform_printf("BEGIN\r\n");
  140. obj_run(pikaMain,
  141. "[1, 2, 3, 4][0:2]\n"
  142. "(5, 6, 7, 8)[1:4]\n");
  143. /* collect */
  144. /* assert */
  145. EXPECT_STREQ(log_buff[0], "(6, 7, 8)\r\n");
  146. EXPECT_STREQ(log_buff[1], "[1, 2]\r\n");
  147. /* deinit */
  148. obj_deinit(pikaMain);
  149. EXPECT_EQ(pikaMemNow(), 0);
  150. }
  151. #endif
  152. #if !PIKA_NANO_ENABLE
  153. TEST(str, split) {
  154. /* init */
  155. pikaMemInfo.heapUsedMax = 0;
  156. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  157. /* run */
  158. __platform_printf("BEGIN\r\n");
  159. obj_run(pikaMain, "'test,test'.split(',')\n");
  160. /* collect */
  161. /* assert */
  162. EXPECT_STREQ(log_buff[0], "['test', 'test']\r\n");
  163. /* deinit */
  164. obj_deinit(pikaMain);
  165. EXPECT_EQ(pikaMemNow(), 0);
  166. }
  167. TEST(str, split2) {
  168. /* init */
  169. pikaMemInfo.heapUsedMax = 0;
  170. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  171. /* run */
  172. __platform_printf("BEGIN\r\n");
  173. obj_run(pikaMain,
  174. "s = 'test,test'\n"
  175. "s.split(',')\n");
  176. /* collect */
  177. /* assert */
  178. EXPECT_STREQ(log_buff[0], "['test', 'test']\r\n");
  179. /* deinit */
  180. obj_deinit(pikaMain);
  181. EXPECT_EQ(pikaMemNow(), 0);
  182. }
  183. TEST(dict, cmodule) {
  184. /* init */
  185. pikaMemInfo.heapUsedMax = 0;
  186. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  187. /* run */
  188. __platform_printf("BEGIN\r\n");
  189. obj_run(pikaMain,
  190. "s = GTestTask.test_dict()\n"
  191. "print(s)");
  192. /* collect */
  193. /* assert */
  194. EXPECT_STREQ(log_buff[0], "{'para2': 2, 'para1': 1}\r\n");
  195. /* deinit */
  196. obj_deinit(pikaMain);
  197. EXPECT_EQ(pikaMemNow(), 0);
  198. }
  199. TEST(dict, items) {
  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. "d = {'a':1, 'b':2}\n"
  207. "print(d.items())\n");
  208. /* collect */
  209. /* assert */
  210. EXPECT_STREQ(log_buff[0], "dict_items([('b', 2), ('a', 1)])\r\n");
  211. /* deinit */
  212. obj_deinit(pikaMain);
  213. EXPECT_EQ(pikaMemNow(), 0);
  214. }
  215. TEST(dict, items2) {
  216. /* init */
  217. pikaMemInfo.heapUsedMax = 0;
  218. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  219. /* run */
  220. __platform_printf("BEGIN\r\n");
  221. obj_run(pikaMain,
  222. "d = {'a':1, 'b':2}\n"
  223. "for i in d.items():\n"
  224. " print(i)\n");
  225. /* collect */
  226. /* assert */
  227. EXPECT_STREQ(log_buff[2], "BEGIN\r\n");
  228. EXPECT_STREQ(log_buff[1], "('b', 2)\r\n");
  229. EXPECT_STREQ(log_buff[0], "('a', 1)\r\n");
  230. /* deinit */
  231. obj_deinit(pikaMain);
  232. EXPECT_EQ(pikaMemNow(), 0);
  233. }
  234. TEST(dict, items_kv) {
  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. "d = {'a':1, 'b':2}\n"
  242. "for k, v in d.items():\n"
  243. " print(k, v)\n");
  244. /* collect */
  245. /* assert */
  246. EXPECT_STREQ(log_buff[0], "a 1\r\n");
  247. EXPECT_STREQ(log_buff[1], "b 2\r\n");
  248. EXPECT_STREQ(log_buff[2], "BEGIN\r\n");
  249. /* deinit */
  250. obj_deinit(pikaMain);
  251. EXPECT_EQ(pikaMemNow(), 0);
  252. }
  253. TEST(stddata, list_str) {
  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, "list('test')");
  260. /* collect */
  261. /* assert */
  262. EXPECT_STREQ(log_buff[0], "['t', 'e', 's', 't']\r\n");
  263. /* deinit */
  264. obj_deinit(pikaMain);
  265. EXPECT_EQ(pikaMemNow(), 0);
  266. }
  267. TEST(stddata, list_bytes) {
  268. /* init */
  269. pikaMemInfo.heapUsedMax = 0;
  270. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  271. /* run */
  272. __platform_printf("BEGIN\r\n");
  273. obj_run(pikaMain, "list(b'test')");
  274. /* collect */
  275. /* assert */
  276. EXPECT_STREQ(log_buff[0], "[116, 101, 115, 116]\r\n");
  277. /* deinit */
  278. obj_deinit(pikaMain);
  279. EXPECT_EQ(pikaMemNow(), 0);
  280. }
  281. TEST(stddata, bytes_list) {
  282. /* init */
  283. pikaMemInfo.heapUsedMax = 0;
  284. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  285. /* run */
  286. __platform_printf("BEGIN\r\n");
  287. obj_run(pikaMain, "bytes([1,2,3,4])");
  288. /* collect */
  289. /* assert */
  290. EXPECT_STREQ(log_buff[0], "b'\\x01\\x02\\x03\\x04'\r\n");
  291. /* deinit */
  292. obj_deinit(pikaMain);
  293. EXPECT_EQ(pikaMemNow(), 0);
  294. }
  295. TEST(stddata, list_pop_) {
  296. /* init */
  297. pikaMemInfo.heapUsedMax = 0;
  298. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  299. /* run */
  300. __platform_printf("BEGIN\r\n");
  301. obj_run(pikaMain,
  302. "l = [1,2,3,4]\n"
  303. "l.pop()\n"
  304. "l.pop()\n"
  305. "l");
  306. /* collect */
  307. /* assert */
  308. EXPECT_STREQ(log_buff[0], "[1, 2]\r\n");
  309. EXPECT_STREQ(log_buff[1], "3\r\n");
  310. EXPECT_STREQ(log_buff[2], "4\r\n");
  311. EXPECT_STREQ(log_buff[3], "BEGIN\r\n");
  312. /* deinit */
  313. obj_deinit(pikaMain);
  314. EXPECT_EQ(pikaMemNow(), 0);
  315. }
  316. TEST(stddata, list_remove_) {
  317. /* init */
  318. pikaMemInfo.heapUsedMax = 0;
  319. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  320. /* run */
  321. __platform_printf("BEGIN\r\n");
  322. obj_run(pikaMain,
  323. "l = [1,2,3,4,5]\n"
  324. "l.remove(2)\n"
  325. "l\n"
  326. "l.remove(3)\n"
  327. "l");
  328. /* collect */
  329. /* assert */
  330. EXPECT_STREQ(log_buff[1], "[1, 3, 4, 5]\r\n");
  331. EXPECT_STREQ(log_buff[0], "[1, 4, 5]\r\n");
  332. /* deinit */
  333. obj_deinit(pikaMain);
  334. EXPECT_EQ(pikaMemNow(), 0);
  335. }
  336. TEST(stddata, list_insert_) {
  337. /* init */
  338. pikaMemInfo.heapUsedMax = 0;
  339. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  340. /* run */
  341. __platform_printf("BEGIN\r\n");
  342. obj_run(pikaMain,
  343. "l = [1,2,3]\n"
  344. "l.insert(1, 'q')\n"
  345. "l");
  346. /* collect */
  347. /* assert */
  348. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  349. EXPECT_STREQ(log_buff[0], "[1, 'q', 2, 3]\r\n");
  350. /* deinit */
  351. obj_deinit(pikaMain);
  352. EXPECT_EQ(pikaMemNow(), 0);
  353. }
  354. TEST(stddata, dict_update) {
  355. /* init */
  356. pikaMemInfo.heapUsedMax = 0;
  357. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  358. /* run */
  359. __platform_printf("BEGIN\r\n");
  360. obj_run(pikaMain,
  361. "d = {'a':1, 'b':2, 'c':3}\n"
  362. "d.update({'b':4, 'd':5})\n"
  363. "res1 = d['b']\n"
  364. "res2 = d['a']\n"
  365. "print(d)\n");
  366. /* collect */
  367. /* assert */
  368. EXPECT_EQ(obj_getInt(pikaMain, "res1"), 4);
  369. EXPECT_EQ(obj_getInt(pikaMain, "res2"), 1);
  370. /* deinit */
  371. obj_deinit(pikaMain);
  372. EXPECT_EQ(pikaMemNow(), 0);
  373. }
  374. TEST(issue, id_test) {
  375. /* init */
  376. pikaMemInfo.heapUsedMax = 0;
  377. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  378. /* run */
  379. __platform_printf("BEGIN\r\n");
  380. pikaVM_runSingleFile(pikaMain, "test/python/issue/issue_id_test.py");
  381. /* collect */
  382. /* assert */
  383. EXPECT_STREQ(log_buff[0], "dog2 eat...\r\n");
  384. EXPECT_STREQ(log_buff[3], "dog1 eat...\r\n");
  385. /* deinit */
  386. obj_deinit(pikaMain);
  387. EXPECT_EQ(pikaMemNow(), 0);
  388. }
  389. TEST(str, strip) {
  390. /* init */
  391. pikaMemInfo.heapUsedMax = 0;
  392. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  393. /* run */
  394. __platform_printf("BEGIN\r\n");
  395. obj_run(pikaMain, "s1 = 'test$'.strip('$')");
  396. /* collect */
  397. /* assert */
  398. char* s1 = obj_getStr(pikaMain, "s1");
  399. EXPECT_STREQ(s1, "test");
  400. /* deinit */
  401. obj_deinit(pikaMain);
  402. EXPECT_EQ(pikaMemNow(), 0);
  403. }
  404. TEST(str, big_slice) {
  405. /* init */
  406. pikaMemInfo.heapUsedMax = 0;
  407. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  408. /* run */
  409. __platform_printf("BEGIN\r\n");
  410. pikaVM_runSingleFile(pikaMain, "test/python/issue/issue_big_str_slice.py");
  411. /* collect */
  412. /* assert */
  413. /* deinit */
  414. obj_deinit(pikaMain);
  415. EXPECT_EQ(pikaMemNow(), 0);
  416. }
  417. TEST(std, eval) {
  418. /* init */
  419. pikaMemInfo.heapUsedMax = 0;
  420. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  421. /* run */
  422. __platform_printf("BEGIN\r\n");
  423. obj_run(pikaMain, "eval('1+1')");
  424. /* collect */
  425. /* assert */
  426. EXPECT_STREQ(log_buff[0], "2\r\n");
  427. /* deinit */
  428. obj_deinit(pikaMain);
  429. EXPECT_EQ(pikaMemNow(), 0);
  430. }
  431. #endif