object-test.cpp 6.5 KB

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