object-test.cpp 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. #include "test_common.h"
  2. void testFloat(PikaObj* obj, Args* args) {
  3. float val1 = args_getFloat(args, "val1");
  4. float val2 = args_getFloat(args, "val2");
  5. int32_t isShow = args_getInt(args, "isShow");
  6. if (isShow) {
  7. printf("the float val1 is: %f\r\n", val1);
  8. printf("the float val2 is: %f\r\n", val2);
  9. }
  10. method_returnFloat(args, val1 + val2);
  11. }
  12. void hello2(PikaObj* obj, Args* args) {
  13. char* name1 = args_getStr(args, "name1");
  14. char* name2 = args_getStr(args, "name2");
  15. char* name3 = args_getStr(args, "name3");
  16. int32_t isShow = args_getInt(args, "isShow");
  17. if (isShow) {
  18. printf("hello, %s, %s and %s!\r\n", name1, name2, name3);
  19. }
  20. }
  21. void hello(PikaObj* obj, Args* args) {
  22. char* name = args_getStr(args, "name");
  23. int32_t isShow = args_getInt(args, "isShow");
  24. if (isShow) {
  25. printf("hello, %s!\r\n", name);
  26. }
  27. }
  28. void add(PikaObj* obj, Args* args) {
  29. int32_t val1 = args_getInt(args, "val1");
  30. int32_t val2 = args_getInt(args, "val2");
  31. method_returnInt(args, val1 + val2);
  32. }
  33. PikaObj* New_PikaObj_test(Args* args) {
  34. PikaObj* self = New_PikaStdLib_SysObj(args);
  35. class_defineMethod(self, "hello(name:str, isShow:int)", hello);
  36. class_defineMethod(
  37. self, "hello2(name1:str, name2:str, name3:str, isShow:int)", hello2);
  38. class_defineMethod(self,
  39. "testFloat(val1:float, val2:float, isShow:int)->float",
  40. testFloat);
  41. class_defineMethod(self, "add(val1:int, val2:int)->int", add);
  42. return self;
  43. }
  44. void sendMethod(PikaObj* self, Args* args) {
  45. char* data = args_getStr(args, "data");
  46. /* send to com1 */
  47. printf("[com1]: %s\r\n", data);
  48. }
  49. PikaObj* New_USART(Args* args) {
  50. /* Derive from the tiny object class.
  51. Tiny object can not import sub object.
  52. Tiny object is the smallest object. */
  53. PikaObj* self = New_TinyObj(args);
  54. /* bind the method */
  55. class_defineMethod(self, "send(data:str)", sendMethod);
  56. /* return the object */
  57. return self;
  58. }
  59. PikaObj* New_MYROOT1(Args* args) {
  60. /* Derive from the base object class .
  61. BaseObj is the smallest object that can
  62. import sub object. */
  63. PikaObj* self = New_BaseObj(args);
  64. /* new led object bellow root object */
  65. obj_newObj(self, "usart", "USART", (NewFun)New_USART);
  66. /* return the object */
  67. return self;
  68. }
  69. TEST(object_test, test10) {
  70. PikaObj* root = newRootObj("root", New_MYROOT1);
  71. obj_run(root, "usart.send('hello world')");
  72. obj_deinit(root);
  73. EXPECT_EQ(pikaMemNow(), 0);
  74. }
  75. // TEST(object_test, test1) {
  76. // PikaObj* process = newRootObj("sys", New_PikaStdLib_SysObj);
  77. // float floatTest = 12.231;
  78. // obj_bindFloat(process, "testFloatBind", &floatTest);
  79. // EXPECT_TRUE(
  80. // strEqu("12.231000", obj_print(process, "testFloatBind")));
  81. // obj_deinit(process);
  82. // EXPECT_EQ(pikaMemNow(), 0);
  83. // }
  84. TEST(object_test, test2) {
  85. int isShow = 1;
  86. PikaObj* obj = newRootObj("test", New_PikaObj_test);
  87. obj_setInt(obj, "isShow", isShow);
  88. obj_run(obj, "hello(name = 'world', isShow = isShow)");
  89. obj_deinit(obj);
  90. EXPECT_EQ(pikaMemNow(), 0);
  91. }
  92. TEST(object_test, test3) {
  93. int isShow = 1;
  94. PikaObj* obj = newRootObj("test", New_PikaObj_test);
  95. obj_setInt(obj, "isShow", isShow);
  96. obj_run(obj,
  97. "hello2(name2='tom', name1='john', name3='cat', isShow=isShow) ");
  98. obj_deinit(obj);
  99. EXPECT_EQ(pikaMemNow(), 0);
  100. }
  101. TEST(object_test, test6) {
  102. PikaObj* obj = newRootObj("test", New_PikaObj_test);
  103. VMParameters* globals = obj_runDirect(obj, "res = add(1, 2)");
  104. int32_t res = obj_getInt(globals, "res");
  105. EXPECT_EQ(3, res);
  106. obj_deinit(obj);
  107. // obj_deinit(globals);
  108. EXPECT_EQ(pikaMemNow(), 0);
  109. }
  110. TEST(object_test, test8) {
  111. PikaObj* sys = newRootObj("sys", New_PikaStdLib_SysObj);
  112. obj_run(sys, "a=1");
  113. obj_run(sys, "remove('a')");
  114. obj_deinit(sys);
  115. EXPECT_EQ(pikaMemNow(), 0);
  116. }
  117. TEST(object_test, test9) {
  118. PikaObj* sys = newRootObj("sys", New_PikaStdLib_SysObj);
  119. obj_run(sys, "ls()");
  120. obj_setPtr(sys, "baseClass", (void*)New_TinyObj);
  121. obj_run(sys, "ls()");
  122. obj_deinit(sys);
  123. EXPECT_EQ(pikaMemNow(), 0);
  124. }
  125. TEST(object_test, noMethod) {
  126. PikaObj* root = newRootObj("root", New_MYROOT1);
  127. obj_runNoRes(root, "noDefindMethod()");
  128. obj_deinit(root);
  129. EXPECT_EQ(pikaMemNow(), 0);
  130. }
  131. TEST(object_test, a_b) {
  132. PikaObj* root = newRootObj("root", New_MYROOT1);
  133. obj_runNoRes(root, "b=1");
  134. obj_runNoRes(root, "a=b");
  135. obj_deinit(root);
  136. EXPECT_EQ(pikaMemNow(), 0);
  137. }
  138. TEST(object_test, voidRun) {
  139. PikaObj* root = newRootObj("root", New_MYROOT1);
  140. obj_run(root, "");
  141. obj_deinit(root);
  142. EXPECT_EQ(pikaMemNow(), 0);
  143. }
  144. /* the log_buff of printf */
  145. extern char log_buff[LOG_BUFF_MAX][LOG_SIZE];
  146. TEST(object_test, printa) {
  147. PikaObj* root = newRootObj("root", New_PikaStdLib_SysObj);
  148. obj_runDirect(root,
  149. "a = 2\n"
  150. "print(a)\n");
  151. // char* sysOut = obj_getSysOut(globals);
  152. EXPECT_STREQ(log_buff[0], "2\r\n");
  153. // ASSERT_STREQ(sysOut, "2");
  154. // obj_deinit(globals);
  155. obj_deinit(root);
  156. EXPECT_EQ(pikaMemNow(), 0);
  157. }
  158. TEST(object_test, copyArg) {
  159. PikaObj* root = newRootObj("root", New_BaseObj);
  160. Arg* arg = New_arg(NULL);
  161. arg = arg_setInt(arg, "a", 1);
  162. obj_setArg(root, "a", arg);
  163. arg_deinit(arg);
  164. Arg* argOut = obj_getArg(root, "a");
  165. int argOutInt = arg_getInt(argOut);
  166. ASSERT_EQ(argOutInt, 1);
  167. obj_deinit(root);
  168. EXPECT_EQ(pikaMemNow(), 0);
  169. }
  170. TEST(object_test, obj_run_while) {
  171. PikaObj* root = newRootObj("root", New_BaseObj);
  172. char lines[] =
  173. "a = 1\n"
  174. "b = 0\n"
  175. "while a:\n"
  176. " b = 1\n"
  177. " a = 0\n"
  178. "\n";
  179. VMParameters* globals = obj_runDirect(root, lines);
  180. EXPECT_EQ(obj_getInt(globals, "a"), 0);
  181. EXPECT_EQ(obj_getInt(globals, "b"), 1);
  182. obj_deinit(root);
  183. // obj_deinit(globals);
  184. EXPECT_EQ(pikaMemNow(), 0);
  185. }
  186. TEST(object_test, obj_mem) {
  187. uint8_t mem_test[] = {0x33, 0x55, 0x00, 0x15};
  188. uint8_t mem_out_buff[32] = {0};
  189. PikaObj* self = New_TinyObj(NULL);
  190. obj_setBytes(self, "mem", mem_test, sizeof(mem_test));
  191. size_t mem_size = obj_getBytesSize(self, "mem");
  192. char* mem_test_out = (char*)obj_getBytes(self, "mem");
  193. ArgType arg_type = arg_getType(obj_getArg(self, "mem"));
  194. obj_loadBytes(self, "mem", mem_out_buff);
  195. /* assert */
  196. EXPECT_EQ(mem_size, sizeof(mem_test));
  197. EXPECT_EQ(mem_test_out[0], 0x33);
  198. EXPECT_EQ(mem_test_out[1], 0x55);
  199. EXPECT_EQ(mem_test_out[2], 0x00);
  200. EXPECT_EQ(mem_test_out[3], 0x15);
  201. EXPECT_EQ(arg_type, ARG_TYPE_BYTES);
  202. /* deinit */
  203. obj_deinit(self);
  204. EXPECT_EQ(mem_out_buff[0], 0x33);
  205. EXPECT_EQ(mem_out_buff[1], 0x55);
  206. EXPECT_EQ(mem_out_buff[2], 0x00);
  207. EXPECT_EQ(mem_out_buff[3], 0x15);
  208. EXPECT_EQ(pikaMemNow(), 0);
  209. EXPECT_EQ(pikaMemNow(), 0);
  210. }
  211. TEST(object_test, mem) {
  212. EXPECT_EQ(pikaMemNow(), 0);
  213. EXPECT_EQ(pikaMemNow(), 0);
  214. }
  215. TEST(object_test, bytes) {
  216. PikaObj* root = newRootObj("root", New_BaseObj);
  217. uint8_t test_arg[] = {0x00, 0x02, 0x03, 0x05, 0x07};
  218. obj_setBytes(root, "test", test_arg, sizeof(test_arg));
  219. uint16_t mem_now_before = pikaMemNow();
  220. obj_setBytes(root, "test", test_arg, sizeof(test_arg));
  221. EXPECT_EQ(pikaMemNow(), mem_now_before);
  222. obj_deinit(root);
  223. EXPECT_EQ(pikaMemNow(), 0);
  224. }
  225. TEST(object_test, bytes_0_size) {
  226. PikaObj* root = newRootObj("root", New_BaseObj);
  227. uint8_t test[] = {0, 1, 2, 3, 4, 5};
  228. obj_setBytes(root, "test", test, 0);
  229. obj_deinit(root);
  230. EXPECT_EQ(pikaMemNow(), 0);
  231. }