compile-test.cpp 21 KB

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