stddata-test.cpp 13 KB

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