class-test.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #include "test_common.h"
  2. TEST_START
  3. #if !PIKA_NANO_ENABLE
  4. TEST(class, class_par) {
  5. /* init */
  6. g_PikaMemInfo.heapUsedMax = 0;
  7. /* run */
  8. PikaObj* self = newRootObj("pikaMain", New_PikaMain);
  9. __platform_printf("BEGIN\r\n");
  10. obj_run(self, "pi = PikaMath.Math.pi\n");
  11. /* assert */
  12. pika_float pi = obj_getFloat(self, "pi");
  13. #if PIKA_FLOAT_TYPE_DOUBLE
  14. EXPECT_DOUBLE_EQ(pi, 3.141592653589793115997963468544185161590576171875l);
  15. #else
  16. EXPECT_FLOAT_EQ(pi, 3.141592653589793115997963468544185161590576171875l);
  17. #endif
  18. /* deinit */
  19. obj_deinit(self);
  20. EXPECT_EQ(pikaMemNow(), 0);
  21. }
  22. TEST(class, classpar1) {
  23. /* init */
  24. g_PikaMemInfo.heapUsedMax = 0;
  25. /* run */
  26. PikaObj* self = newRootObj("pikaMain", New_PikaMain);
  27. __platform_printf("BEGIN\r\n");
  28. pikaVM_runSingleFile(self, "../../examples/Class/classpar1.py");
  29. /* assert */
  30. EXPECT_STREQ(log_buff[4], "BEGIN\r\n");
  31. EXPECT_STREQ(log_buff[3], "1\r\n");
  32. EXPECT_STREQ(log_buff[2], "test\r\n");
  33. EXPECT_STREQ(log_buff[1], "2\r\n");
  34. EXPECT_STREQ(log_buff[0], "pewq\r\n");
  35. /* deinit */
  36. obj_deinit(self);
  37. EXPECT_EQ(pikaMemNow(), 0);
  38. }
  39. TEST(class, static_method) {
  40. /* init */
  41. g_PikaMemInfo.heapUsedMax = 0;
  42. /* run */
  43. PikaObj* self = newRootObj("pikaMain", New_PikaMain);
  44. __platform_printf("BEGIN\r\n");
  45. obj_run(self,
  46. "import PikaMath\n"
  47. "a = PikaMath.Operator.plusInt(10, 20)\n");
  48. /* collect */
  49. int a = obj_getInt(self, "a");
  50. /* assert */
  51. EXPECT_EQ(a, 30);
  52. /* deinit */
  53. obj_deinit(self);
  54. EXPECT_EQ(pikaMemNow(), 0);
  55. }
  56. #endif
  57. TEST(class, dir_) {
  58. /* init */
  59. g_PikaMemInfo.heapUsedMax = 0;
  60. /* run */
  61. PikaObj* self = newRootObj("pikaMain", New_PikaMain);
  62. __platform_printf("BEGIN\r\n");
  63. obj_run(self,
  64. "class T:\n"
  65. " def a(self):\n"
  66. " return 1\n"
  67. "t = T()\n"
  68. "l = dir(t)\n"
  69. "print(l)\n");
  70. /* collect */
  71. /* assert */
  72. /* deinit */
  73. obj_deinit(self);
  74. EXPECT_EQ(pikaMemNow(), 0);
  75. }
  76. extern "C" {
  77. void PikaStdLib_SysObj_intMethod(PikaObj* self, Args* args);
  78. method_typedef(PikaStdLib_SysObj_int, "int", "arg");
  79. void PikaStdLib_SysObj_floatMethod(PikaObj* self, Args* args);
  80. method_typedef(PikaStdLib_SysObj_float, "float", "arg");
  81. void PikaStdLib_SysObj_printMethod(PikaObj* self, Args* args);
  82. method_typedef(PikaStdLib_SysObj_print, "print", "*val,**ops");
  83. class_def(PikaStdLib_SysObj){
  84. method_def(PikaStdLib_SysObj_int, hash_time33("int")),
  85. method_def(PikaStdLib_SysObj_float, hash_time33("float")),
  86. method_def(PikaStdLib_SysObj_print, hash_time33("print")),
  87. };
  88. class_inhert(PikaStdLib_SysObj, TinyObj);
  89. PikaObj* New_NativeMethodBase(Args* args) {
  90. PikaObj* self = New_TinyObj(NULL);
  91. obj_setClass(self, PikaStdLib_SysObj);
  92. return self;
  93. }
  94. }
  95. TEST(class, native_class1) {
  96. PikaObj* native_obj = newRootObj("root", New_NativeMethodBase);
  97. obj_run(native_obj,
  98. "print('hello', 123)\n"
  99. "int(123.0000)\n"
  100. "float(123)\n");
  101. obj_deinit(native_obj);
  102. EXPECT_STREQ(log_buff[1], "123\r\n");
  103. EXPECT_STREQ(log_buff[0], "123.000000\r\n");
  104. EXPECT_EQ(pikaMemNow(), 0);
  105. }
  106. TEST_END