stddata-test.cpp 14 KB

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