object-test.cpp 7.1 KB

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