compile-test.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679
  1. #include "test_common.h"
  2. TEST(compiler, file) {
  3. char* lines =
  4. "len = calls.len()\n"
  5. "mode = 'none'\n"
  6. "info_index = 0\n"
  7. "for i in range(0, len):\n"
  8. " if len == 0:\n"
  9. " break\n"
  10. " if info_index == 0:\n"
  11. " mode = calls[i]\n"
  12. " info_index = 1\n"
  13. " elif info_index == 1:\n"
  14. " if mode == 'always':\n"
  15. " todo = calls[i]\n"
  16. " todo()\n"
  17. " info_index = 0\n"
  18. " elif mode == 'when':\n"
  19. " when = calls[i]\n"
  20. " info_index = 2\n"
  21. " elif mode == 'period_ms':\n"
  22. " period_ms = calls[i]\n"
  23. " info_index = 2\n"
  24. " elif info_index == 2:\n"
  25. " if mode == 'when':\n"
  26. " if when():\n"
  27. " todo = calls[i]\n"
  28. " todo()\n"
  29. " info_index = 0\n"
  30. " elif mode == 'period_ms':\n"
  31. " todo = calls[i]\n"
  32. " info_index = 3\n"
  33. " elif info_index == 3:\n"
  34. " if mode == 'period_ms':\n"
  35. " if tick > calls[i]:\n"
  36. " todo()\n"
  37. " calls[i] = tick + period_ms\n"
  38. " info_index = 0\n"
  39. "\n";
  40. pikaCompile("task.bin", lines);
  41. Parser_linesToArray(lines);
  42. EXPECT_EQ(pikaMemNow(), 0);
  43. }
  44. TEST(compiler, task) {
  45. char* lines =
  46. "len = calls.len()\n"
  47. "mode = 'none'\n"
  48. "info_index = 0\n"
  49. "for i in range(0, len):\n"
  50. " if len == 0:\n"
  51. " break\n"
  52. " if info_index == 0:\n"
  53. " mode = calls[i]\n"
  54. " info_index = 1\n"
  55. " elif info_index == 1:\n"
  56. " if mode == 'always':\n"
  57. " todo = calls[i]\n"
  58. " todo()\n"
  59. " info_index = 0\n"
  60. " elif mode == 'when':\n"
  61. " when = calls[i]\n"
  62. " info_index = 2\n"
  63. " elif mode == 'period_ms':\n"
  64. " period_ms = calls[i]\n"
  65. " info_index = 2\n"
  66. " elif info_index == 2:\n"
  67. " if mode == 'when':\n"
  68. " if when():\n"
  69. " todo = calls[i]\n"
  70. " todo()\n"
  71. " info_index = 0\n"
  72. " elif mode == 'period_ms':\n"
  73. " todo = calls[i]\n"
  74. " info_index = 3\n"
  75. " elif info_index == 3:\n"
  76. " if mode == 'period_ms':\n"
  77. " if tick > calls[i]:\n"
  78. " todo()\n"
  79. " calls[i] = tick + period_ms\n"
  80. " info_index = 0\n"
  81. "\n";
  82. Args buffs = {0};
  83. char* pikaAsm = Parser_linesToAsm(&buffs, lines);
  84. ByteCodeFrame bytecode_frame;
  85. byteCodeFrame_init(&bytecode_frame);
  86. byteCodeFrame_appendFromAsm(&bytecode_frame, pikaAsm);
  87. /* do something */
  88. byteCodeFrame_print(&bytecode_frame);
  89. printf("Asm size: %d\r\n", (int)strGetSize(pikaAsm));
  90. byteCodeFrame_printAsArray(&bytecode_frame);
  91. /* deinit */
  92. byteCodeFrame_deinit(&bytecode_frame);
  93. strsDeinit(&buffs);
  94. EXPECT_EQ(pikaMemNow(), 0);
  95. }
  96. TEST(compiler, demo1) {
  97. char* lines = "append(__val)";
  98. Parser_linesToArray(lines);
  99. EXPECT_EQ(pikaMemNow(), 0);
  100. }
  101. TEST(compiler, snake_file) {
  102. char* lines =
  103. "from PikaObj import *\n"
  104. "import PikaStdLib\n"
  105. "import machine \n"
  106. "\n"
  107. "# hardware init\n"
  108. "lcd = machine.LCD()\n"
  109. "lcd.init()\n"
  110. "lcd.clear('white')\n"
  111. "key = machine.KEY()\n"
  112. "key.init()\n"
  113. "time = machine.Time()\n"
  114. "x_max = 120\n"
  115. "y_max = 150\n"
  116. "\n"
  117. "# snake init\n"
  118. "s = machine.Point()\n"
  119. "w = 9\n"
  120. "h = 9\n"
  121. "s.x = 50\n"
  122. "s.y = 10\n"
  123. "len = 0\n"
  124. "while len < 3:\n"
  125. " b = s\n"
  126. " i = 0\n"
  127. " while i < len:\n"
  128. " b = b.next\n"
  129. " i = i + 1\n"
  130. " b.next = machine.Point()\n"
  131. " b.next.x = b.x - 10\n"
  132. " b.next.y = b.y\n"
  133. " b.next.prev = b\n"
  134. " len = len + 1\n"
  135. "# ring link\n"
  136. "b.next = s\n"
  137. "s.prev = b\n"
  138. "\n"
  139. "i = 0\n"
  140. "b = s\n"
  141. "while i < len:\n"
  142. " lcd.fill(b.x, b.y, w, h, 'blue')\n"
  143. " b = b.next\n"
  144. " i = i + 1\n"
  145. "\n"
  146. "print('snake lengh')\n"
  147. "print(len)\n"
  148. "\n"
  149. "# fruit init\n"
  150. "f = machine.Point()\n"
  151. "f.x = 30\n"
  152. "f.y = 20\n"
  153. "lcd.fill(f.x, f.y, w, h, 'green')\n"
  154. "\n"
  155. "# memory check\n"
  156. "mem = PikaStdLib.MemChecker()\n"
  157. "print('mem used max:')\n"
  158. "mem.max()\n"
  159. "\n"
  160. "# main loop\n"
  161. "d = 0\n"
  162. "isUpdate = 1\n"
  163. "isEat = 0\n"
  164. "while True:\n"
  165. " if isUpdate:\n"
  166. " # isUpdate = 0\n"
  167. " # check eat fruit\n"
  168. " if f.x == s.x and f.y == s.y:\n"
  169. " # have eat fruit\n"
  170. " isEat = 1\n"
  171. " f.x = f.x + 30\n"
  172. " if f.x > x_max:\n"
  173. " f.x = f.x - x_max\n"
  174. " f.y = f.y + 30\n"
  175. " if f.y > y_max:\n"
  176. " f.y = f.y - y_max\n"
  177. " lcd.fill(f.x, f.y, w, h, 'green')\n"
  178. " # move snake by the direction\n"
  179. " if d == 0:\n"
  180. " x_new = s.x + 10\n"
  181. " y_new = s.y\n"
  182. " if x_new > x_max:\n"
  183. " x_new = 0\n"
  184. " elif d == 1:\n"
  185. " x_new = s.x\n"
  186. " y_new = s.y - 10\n"
  187. " if y_new < 0:\n"
  188. " y_new = y_max\n"
  189. " elif d == 2:\n"
  190. " x_new = s.x\n"
  191. " y_new = s.y + 10\n"
  192. " if y_new > y_max:\n"
  193. " y_new = 0\n"
  194. " elif d == 3:\n"
  195. " x_new = s.x - 10\n"
  196. " y_new = s.y\n"
  197. " if x_new < 0:\n"
  198. " x_new = x_max\n"
  199. " if isEat:\n"
  200. " isEat = 0\n"
  201. " b_new = machine.Point()\n"
  202. " b_new.x = x_new\n"
  203. " b_new.y = y_new\n"
  204. " b_new.prev = s.prev\n"
  205. " b_new.next = s\n"
  206. " s.prev.next = b_new\n"
  207. " s.prev = b_new\n"
  208. " s = b_new\n"
  209. " len = len + 1\n"
  210. " print('snake lengh')\n"
  211. " print(len)\n"
  212. " print('mem used max:')\n"
  213. " mem.max()\n"
  214. " # drow the snake and fruit\n"
  215. " # clear last body\n"
  216. " lcd.fill(s.prev.x, s.prev.y, w, h, 'white')\n"
  217. " # new body\n"
  218. " s.prev.x = x_new\n"
  219. " s.prev.y = y_new\n"
  220. " # head is last body\n"
  221. " s = s.prev\n"
  222. " lcd.fill(s.x, s.y, w, h, 'blue')\n"
  223. " b = s\n"
  224. " i = 0\n"
  225. " # scan key\n"
  226. " key_val = key.get()\n"
  227. " if key_val == 0:\n"
  228. " d = 0\n"
  229. " isUpdate = 1\n"
  230. " elif key_val == 1:\n"
  231. " d = 1\n"
  232. " isUpdate = 1\n"
  233. " elif key_val == 2:\n"
  234. " d = 2\n"
  235. " isUpdate = 1\n"
  236. " elif key_val == 3:\n"
  237. " d = 3\n"
  238. " isUpdate = 1\n";
  239. pikaCompile("snake.bin", lines);
  240. EXPECT_EQ(pikaMemNow(), 0);
  241. }
  242. TEST(compiler, import_bf_mem) {
  243. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  244. char* lines =
  245. "def mytest():\n"
  246. " print('test')\n"
  247. "\n";
  248. ByteCodeFrame bf;
  249. byteCodeFrame_init(&bf);
  250. bytecodeFrame_fromLines(&bf, lines);
  251. obj_importModuleWithByteCodeFrame(pikaMain, "mtest", &bf);
  252. byteCodeFrame_deinit(&bf);
  253. obj_deinit(pikaMain);
  254. EXPECT_EQ(pikaMemNow(), 0);
  255. }
  256. TEST(compiler, import_bf1) {
  257. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  258. char* lines =
  259. "def mytest():\n"
  260. " print('test_import_bf1')\n"
  261. "\n";
  262. ByteCodeFrame bf;
  263. byteCodeFrame_init(&bf);
  264. bytecodeFrame_fromLines(&bf, lines);
  265. obj_importModuleWithByteCodeFrame(pikaMain, "mtest", &bf);
  266. obj_run(pikaMain,
  267. "mtest.mytest()\n"
  268. "\n");
  269. EXPECT_STREQ(log_buff[0], "test_import_bf1\r\n");
  270. byteCodeFrame_deinit(&bf);
  271. obj_deinit(pikaMain);
  272. EXPECT_EQ(pikaMemNow(), 0);
  273. }
  274. TEST(compiler, import_bf2) {
  275. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  276. char* lines =
  277. "class Test:\n"
  278. " def mytest(self):\n"
  279. " print('test_import_bf2')\n"
  280. "\n";
  281. ByteCodeFrame bf;
  282. byteCodeFrame_init(&bf);
  283. bytecodeFrame_fromLines(&bf, lines);
  284. obj_importModuleWithByteCodeFrame(pikaMain, "mtest", &bf);
  285. obj_run(pikaMain,
  286. "m = mtest.Test()\n"
  287. "m.mytest()\n"
  288. "\n");
  289. byteCodeFrame_deinit(&bf);
  290. obj_deinit(pikaMain);
  291. EXPECT_STREQ(log_buff[0], "test_import_bf2\r\n");
  292. EXPECT_EQ(pikaMemNow(), 0);
  293. }
  294. TEST(compiler, file1) {
  295. pikaCompileFile("test/python/main.py");
  296. EXPECT_EQ(pikaMemNow(), 0);
  297. }
  298. TEST(compiler, file2) {
  299. pikaCompileFile("test/python/main_snake_LCD.py");
  300. EXPECT_EQ(pikaMemNow(), 0);
  301. }
  302. TEST(lib, init) {
  303. LibObj* lib = New_LibObj(NULL);
  304. LibObj_deinit(lib);
  305. EXPECT_EQ(pikaMemNow(), 0);
  306. }
  307. TEST(lib, lib_link_bytecode) {
  308. LibObj* lib = New_LibObj(NULL);
  309. LibObj_dynamicLink(lib, "module1", (uint8_t*)0x3344);
  310. LibObj_dynamicLink(lib, "module2", (uint8_t*)0x33433);
  311. LibObj_dynamicLink(lib, "module3", (uint8_t*)0x33433);
  312. LibObj_dynamicLink(lib, "module4", (uint8_t*)0x33433);
  313. LibObj_dynamicLink(lib, "module5", (uint8_t*)0x33433);
  314. EXPECT_STREQ(obj_getStr(lib, "module1.name"), "module1");
  315. EXPECT_EQ((uintptr_t)obj_getPtr(lib, "module1.bytecode"), 0x3344);
  316. /* deinit */
  317. LibObj_deinit(lib);
  318. EXPECT_EQ(pikaMemNow(), 0);
  319. }
  320. TEST(lib, lib_push_file) {
  321. LibObj* lib = New_LibObj(NULL);
  322. LibObj_staticLinkFile(lib, "test/python/main.py.o");
  323. /* deinit */
  324. LibObj_deinit(lib);
  325. EXPECT_EQ(pikaMemNow(), 0);
  326. }
  327. TEST(lib, lib_push_files) {
  328. LibObj* lib = New_LibObj(NULL);
  329. LibObj_staticLinkFile(lib, "test/python/main.py.o");
  330. LibObj_staticLinkFile(lib, "test/python/main_snake_LCD.py.o");
  331. LibObj_listModules(lib);
  332. /* asset */
  333. EXPECT_STREQ(log_buff[0], "main\r\n");
  334. EXPECT_STREQ(log_buff[1], "main_snake_LCD\r\n");
  335. /* deinit */
  336. LibObj_deinit(lib);
  337. EXPECT_EQ(pikaMemNow(), 0);
  338. }
  339. TEST(lib, lib_compile_link) {
  340. LibObj* lib = New_LibObj(NULL);
  341. pikaCompileFile("test/python/UnitTest.py");
  342. pikaCompileFile("test/python/main.py");
  343. pikaCompileFile("test/python/main_snake_LCD.py");
  344. LibObj_staticLinkFile(lib, "test/python/UnitTest.py.o");
  345. LibObj_staticLinkFile(lib, "test/python/main.py.o");
  346. LibObj_staticLinkFile(lib, "test/python/main_snake_LCD.py.o");
  347. LibObj_listModules(lib);
  348. /* asset */
  349. EXPECT_STREQ(log_buff[0], "UnitTest\r\n");
  350. EXPECT_STREQ(log_buff[1], "main\r\n");
  351. EXPECT_STREQ(log_buff[2], "main_snake_LCD\r\n");
  352. /* deinit */
  353. LibObj_deinit(lib);
  354. EXPECT_EQ(pikaMemNow(), 0);
  355. }
  356. TEST(lib, compile_link_import) {
  357. LibObj* lib = New_LibObj(NULL);
  358. pikaCompileFile("test/python/test_module1.py");
  359. LibObj_staticLinkFile(lib, "test/python/test_module1.py.o");
  360. LibObj_listModules(lib);
  361. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  362. obj_linkLibObj(pikaMain, lib);
  363. obj_run(pikaMain,
  364. "import test_module1\n"
  365. "test_module1.mytest()\n");
  366. /* asset */
  367. EXPECT_STREQ(log_buff[0], "test_module_1_hello\r\n");
  368. /* deinit */
  369. LibObj_deinit(lib);
  370. obj_deinit(pikaMain);
  371. EXPECT_EQ(pikaMemNow(), 0);
  372. }
  373. TEST(lib, lib_to_file) {
  374. LibObj* lib = New_LibObj(NULL);
  375. pikaCompileFile("test/python/UnitTest.py");
  376. pikaCompileFile("test/python/main.py");
  377. pikaCompileFile("test/python/main_snake_LCD.py");
  378. LibObj_staticLinkFile(lib, "test/python/UnitTest.py.o");
  379. LibObj_staticLinkFile(lib, "test/python/main.py.o");
  380. LibObj_staticLinkFile(lib, "test/python/main_snake_LCD.py.o");
  381. LibObj_listModules(lib);
  382. LibObj_saveLibraryFile(lib, "test/python/lib_to_file.py.a");
  383. /* asset */
  384. EXPECT_STREQ(log_buff[0], "UnitTest\r\n");
  385. EXPECT_STREQ(log_buff[1], "main\r\n");
  386. EXPECT_STREQ(log_buff[2], "main_snake_LCD\r\n");
  387. /* deinit */
  388. LibObj_deinit(lib);
  389. EXPECT_EQ(pikaMemNow(), 0);
  390. }
  391. TEST(lib, save2) {
  392. LibObj* lib = New_LibObj(NULL);
  393. pikaCompileFile("test/python/test_module1.py");
  394. pikaCompileFile("test/python/test_module2.py");
  395. pikaCompileFile("test/python/test_module3.py");
  396. LibObj_staticLinkFile(lib, "test/python/test_module1.py.o");
  397. LibObj_staticLinkFile(lib, "test/python/test_module2.py.o");
  398. LibObj_staticLinkFile(lib, "test/python/test_module3.py.o");
  399. LibObj_listModules(lib);
  400. LibObj_saveLibraryFile(lib, "test/python/test_module.py.a");
  401. /* asset */
  402. EXPECT_STREQ(log_buff[0], "test_module1\r\n");
  403. EXPECT_STREQ(log_buff[1], "test_module2\r\n");
  404. EXPECT_STREQ(log_buff[2], "test_module3\r\n");
  405. /* deinit */
  406. LibObj_deinit(lib);
  407. EXPECT_EQ(pikaMemNow(), 0);
  408. }
  409. TEST(lib, load_file) {
  410. /* compile */
  411. LibObj* lib = New_LibObj(NULL);
  412. LibObj_loadLibraryFile(lib, "test/python/test_module.py.a");
  413. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  414. obj_linkLibObj(pikaMain, lib);
  415. obj_run(pikaMain,
  416. "import test_module1\n"
  417. "import test_module2\n"
  418. "import test_module3\n"
  419. "test_module1.mytest()\n"
  420. "test_module2.mytest()\n"
  421. "test_module3.mytest()\n");
  422. /* asset */
  423. EXPECT_STREQ(log_buff[2], "test_module_1_hello\r\n");
  424. EXPECT_STREQ(log_buff[1], "test_module_2_hello\r\n");
  425. EXPECT_STREQ(log_buff[0], "test_module_3_hello\r\n");
  426. /* deinit */
  427. LibObj_deinit(lib);
  428. obj_deinit(pikaMain);
  429. EXPECT_EQ(pikaMemNow(), 0);
  430. }
  431. TEST(lib, load_no_file) {
  432. /* compile */
  433. LibObj* lib = New_LibObj(NULL);
  434. int res = LibObj_loadLibraryFile(lib, "test/python/mian.py.o");
  435. EXPECT_EQ(res, PIKA_RES_ERR_IO_ERROR);
  436. /* deinit */
  437. LibObj_deinit(lib);
  438. EXPECT_EQ(pikaMemNow(), 0);
  439. }
  440. TEST(lib, load_err_file_type) {
  441. /* compile */
  442. LibObj* lib = New_LibObj(NULL);
  443. int res = LibObj_loadLibraryFile(lib, "test/python/main.py.o");
  444. EXPECT_EQ(res, PIKA_RES_ERR_OPERATION_FAILED);
  445. /* deinit */
  446. LibObj_deinit(lib);
  447. EXPECT_EQ(pikaMemNow(), 0);
  448. }
  449. TEST(lib, lib_file_to_array) {
  450. Lib_loadLibraryFileToArray("test/python/lib_to_file.py.a", "test/python");
  451. EXPECT_EQ(pikaMemNow(), 0);
  452. }
  453. TEST(make, maker) {
  454. PikaMaker* maker = New_PikaMaker();
  455. obj_deinit(maker);
  456. EXPECT_EQ(pikaMemNow(), 0);
  457. }
  458. TEST(make, compile) {
  459. PikaMaker* maker = New_PikaMaker();
  460. pikaMaker_setPWD(maker, "package/pikascript/");
  461. pikaMaker_compileModule(maker, "main");
  462. obj_deinit(maker);
  463. EXPECT_EQ(pikaMemNow(), 0);
  464. }
  465. TEST(make, depend) {
  466. PikaMaker* maker = New_PikaMaker();
  467. pikaMaker_setPWD(maker, "package/pikascript/");
  468. pikaMaker_getDependencies(maker, "main");
  469. pikaMaker_printStates(maker);
  470. // char* uncompiled = pikaMaker_getFirstNocompiled(maker);
  471. // EXPECT_STREQ(uncompiled, "test_module1");
  472. obj_deinit(maker);
  473. EXPECT_EQ(pikaMemNow(), 0);
  474. }
  475. TEST(make, compile_depend) {
  476. PikaMaker* maker = New_PikaMaker();
  477. pikaMaker_setPWD(maker, "package/pikascript/");
  478. pikaMaker_getDependencies(maker, "main");
  479. char* uncompiled = pikaMaker_getFirstNocompiled(maker);
  480. pikaMaker_compileModule(maker, uncompiled);
  481. pikaMaker_getDependencies(maker, uncompiled);
  482. uncompiled = pikaMaker_getFirstNocompiled(maker);
  483. // EXPECT_STREQ(uncompiled, "test_module3");
  484. pikaMaker_printStates(maker);
  485. obj_deinit(maker);
  486. EXPECT_EQ(pikaMemNow(), 0);
  487. }
  488. TEST(make, compile_depend_all) {
  489. PikaMaker* maker = New_PikaMaker();
  490. pikaMaker_setPWD(maker, "package/pikascript/");
  491. pikaMaker_compileModuleWithDepends(maker, "main");
  492. pikaMaker_printStates(maker);
  493. obj_deinit(maker);
  494. EXPECT_EQ(pikaMemNow(), 0);
  495. }
  496. TEST(make, compile_link_all) {
  497. PikaMaker* maker = New_PikaMaker();
  498. pikaMaker_setPWD(maker, "package/pikascript/");
  499. pikaMaker_compileModuleWithDepends(maker, "main");
  500. pikaMaker_printStates(maker);
  501. pikaMaker_linkCompiledModules(maker, "pikaModules.py.a");
  502. obj_deinit(maker);
  503. EXPECT_EQ(pikaMemNow(), 0);
  504. }
  505. TEST(compiler, __str__) {
  506. char* lines = "__res = __str__()";
  507. Parser_linesToArray(lines);
  508. EXPECT_EQ(pikaMemNow(), 0);
  509. }
  510. TEST(compiler, __len__) {
  511. char* lines = "__res = __len__()";
  512. Parser_linesToArray(lines);
  513. EXPECT_EQ(pikaMemNow(), 0);
  514. }
  515. TEST(compiler, __del__) {
  516. char* lines = "__del__()";
  517. Parser_linesToArray(lines);
  518. EXPECT_EQ(pikaMemNow(), 0);
  519. }
  520. TEST(compiler, event_cb) {
  521. char* lines = "_eventCallBack(_eventSignal)";
  522. Parser_linesToArray(lines);
  523. EXPECT_EQ(pikaMemNow(), 0);
  524. }
  525. TEST(compiler, event_cb_lvgl) {
  526. char* lines = "eventCallBack(eventSignal)";
  527. Parser_linesToArray(lines);
  528. EXPECT_EQ(pikaMemNow(), 0);
  529. }
  530. TEST(compiler, __setitem__) {
  531. char* lines = "__setitem__(__key, __val)";
  532. Parser_linesToArray(lines);
  533. EXPECT_EQ(pikaMemNow(), 0);
  534. }
  535. TEST(compiler, __getitem__) {
  536. char* lines = "__res = __getitem__(__key)";
  537. Parser_linesToArray(lines);
  538. EXPECT_EQ(pikaMemNow(), 0);
  539. }
  540. TEST(compiler, __add__) {
  541. char* lines = "__res = __add__(__others)";
  542. Parser_linesToArray(lines);
  543. EXPECT_EQ(pikaMemNow(), 0);
  544. }
  545. TEST(compiler, __sub__) {
  546. char* lines = "__res = __sub__(__others)";
  547. Parser_linesToArray(lines);
  548. EXPECT_EQ(pikaMemNow(), 0);
  549. }
  550. TEST(compiler, __contains__) {
  551. char* lines = "__res = __contains__(__others)";
  552. Parser_linesToArray(lines);
  553. EXPECT_EQ(pikaMemNow(), 0);
  554. }
  555. TEST(compiler, __callback) {
  556. char* lines = "__callback(__frameBuffer, __isNewFrame)";
  557. Parser_linesToArray(lines);
  558. EXPECT_EQ(pikaMemNow(), 0);
  559. }
  560. TEST(compiler, __list) {
  561. char* lines =
  562. "__res = []\n"
  563. "for __item in __list:\n"
  564. " __res.append(__item)\n"
  565. "del __item\n"
  566. "del __list\n";
  567. Parser_linesToArray(lines);
  568. EXPECT_EQ(pikaMemNow(), 0);
  569. }
  570. TEST(compiler, getattr) {
  571. char* lines = "@res = __getattribute__(@name)";
  572. Parser_linesToArray(lines);
  573. EXPECT_EQ(pikaMemNow(), 0);
  574. }
  575. TEST(compiler, getattr2) {
  576. char* lines = "@res = __getattr__(@name)";
  577. Parser_linesToArray(lines);
  578. EXPECT_EQ(pikaMemNow(), 0);
  579. }
  580. TEST(compiler, setattr) {
  581. char* lines = "__setattr__(@name, @value)";
  582. Parser_linesToArray(lines);
  583. EXPECT_EQ(pikaMemNow(), 0);
  584. }
  585. TEST(compiler, dict_update) {
  586. char* lines =
  587. "for @item in @other:\n"
  588. " @self[@item] = @other[@item]\n";
  589. Parser_linesToArray(lines);
  590. EXPECT_EQ(pikaMemNow(), 0);
  591. }
  592. TEST(compiler, i_pp) {
  593. char* lines =
  594. "i = 0\n"
  595. "while i < 10000:\n"
  596. " i += 1\n";
  597. Parser_linesToArray(lines);
  598. EXPECT_EQ(pikaMemNow(), 0);
  599. }
  600. TEST(compiler, benchmark) {
  601. char* lines =
  602. "num = 0\n"
  603. "i = 2\n"
  604. "while i < 1000:\n"
  605. " is_prime = 1\n"
  606. " j = 2\n"
  607. " while j < i:\n"
  608. " if i%j==0 :\n"
  609. " is_prime = 0\n"
  610. " break\n"
  611. " j += 1 \n"
  612. " if is_prime:\n"
  613. " num = num + i\n"
  614. " i += 1\n"
  615. "\n";
  616. Parser_linesToArray(lines);
  617. EXPECT_EQ(pikaMemNow(), 0);
  618. }