object-test.cpp 6.7 KB

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