pikapython/test/class-test.cpp

121 lines
3.2 KiB
C
Raw Normal View History

#include "test_common.h"
TEST_START
2022-09-10 23:16:59 +08:00
#if !PIKA_NANO_ENABLE
TEST(class, class_par) {
/* init */
pikaMemInfo.heapUsedMax = 0;
/* run */
PikaObj* self = newRootObj("pikaMain", New_PikaMain);
__platform_printf("BEGIN\r\n");
obj_run(self, "pi = PikaMath.Math.pi\n");
/* assert */
pika_float pi = obj_getFloat(self, "pi");
2022-09-28 12:31:05 +08:00
#if PIKA_FLOAT_TYPE_DOUBLE
EXPECT_DOUBLE_EQ(pi, 3.141592653589793115997963468544185161590576171875l);
#else
EXPECT_FLOAT_EQ(pi, 3.141592653589793115997963468544185161590576171875l);
#endif
/* deinit */
obj_deinit(self);
EXPECT_EQ(pikaMemNow(), 0);
}
2022-07-01 09:12:47 +08:00
TEST(class, classpar1) {
/* init */
pikaMemInfo.heapUsedMax = 0;
/* run */
PikaObj* self = newRootObj("pikaMain", New_PikaMain);
__platform_printf("BEGIN\r\n");
pikaVM_runSingleFile(self, "../../examples/Class/classpar1.py");
/* assert */
2022-07-01 09:37:09 +08:00
EXPECT_STREQ(log_buff[4], "BEGIN\r\n");
EXPECT_STREQ(log_buff[3], "1\r\n");
EXPECT_STREQ(log_buff[2], "test\r\n");
EXPECT_STREQ(log_buff[1], "2\r\n");
EXPECT_STREQ(log_buff[0], "pewq\r\n");
2022-07-01 09:12:47 +08:00
/* deinit */
obj_deinit(self);
EXPECT_EQ(pikaMemNow(), 0);
}
2022-07-08 18:00:46 +08:00
TEST(class, static_method) {
/* init */
pikaMemInfo.heapUsedMax = 0;
/* run */
PikaObj* self = newRootObj("pikaMain", New_PikaMain);
__platform_printf("BEGIN\r\n");
obj_run(self,
"import PikaMath\n"
"a = PikaMath.Operator.plusInt(10, 20)\n");
/* collect */
int a = obj_getInt(self, "a");
/* assert */
EXPECT_EQ(a, 30);
/* deinit */
obj_deinit(self);
EXPECT_EQ(pikaMemNow(), 0);
}
2022-09-10 23:16:59 +08:00
#endif
TEST(class, dir_) {
/* init */
pikaMemInfo.heapUsedMax = 0;
/* run */
PikaObj* self = newRootObj("pikaMain", New_PikaMain);
__platform_printf("BEGIN\r\n");
obj_run(self,
"class T:\n"
" def a(self):\n"
" return 1\n"
"t = T()\n"
"l = dir(t)\n"
"print(l)\n");
/* collect */
/* assert */
/* deinit */
obj_deinit(self);
EXPECT_EQ(pikaMemNow(), 0);
2022-10-14 23:58:29 +08:00
}
extern "C" {
2022-10-15 12:19:46 +08:00
void PikaStdLib_SysObj_intMethod(PikaObj* self, Args* args);
2022-10-15 17:32:44 +08:00
method_typedef(PikaStdLib_SysObj_int, "int", "arg");
2022-10-15 12:19:46 +08:00
2022-10-15 17:32:44 +08:00
void PikaStdLib_SysObj_floatMethod(PikaObj* self, Args* args);
method_typedef(PikaStdLib_SysObj_float, "float", "arg");
2022-10-15 17:32:44 +08:00
void PikaStdLib_SysObj_printMethod(PikaObj* self, Args* args);
method_typedef(PikaStdLib_SysObj_print, "print", "*val,**ops");
2022-10-15 17:32:44 +08:00
class_def(PikaStdLib_SysObj){
method_def(PikaStdLib_SysObj_int, hash_time33("int")),
2022-10-15 23:21:08 +08:00
method_def(PikaStdLib_SysObj_float, hash_time33("float")),
method_def(PikaStdLib_SysObj_print, hash_time33("print")),
2022-10-15 12:19:46 +08:00
};
class_inhert(PikaStdLib_SysObj, TinyObj);
2022-10-15 17:32:44 +08:00
2022-10-15 12:19:46 +08:00
PikaObj* New_NativeMethodBase(Args* args) {
PikaObj* self = New_TinyObj(NULL);
obj_setClass(self, PikaStdLib_SysObj);
2022-10-14 23:58:29 +08:00
return self;
}
2022-10-15 17:32:44 +08:00
2022-10-14 23:58:29 +08:00
}
TEST(class, native_class1) {
PikaObj* native_obj = newNormalObj(New_NativeMethodBase);
2022-10-15 12:19:46 +08:00
obj_run(native_obj,
"print('hello', 123)\n"
2022-10-15 12:19:46 +08:00
"int(123.0000)\n"
"float(123)\n");
obj_deinit(native_obj);
2022-10-15 12:19:46 +08:00
EXPECT_STREQ(log_buff[1], "123\r\n");
EXPECT_STREQ(log_buff[0], "123.000000\r\n");
EXPECT_EQ(pikaMemNow(), 0);
}
TEST_END