mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
7f5edaf090
ready to check where enable the mark_sweep auto gc with threshold failed, add some assert more assert about obj alive, dict mark not correct add pikaGC_try, but cannot run at any time markSweep crashed on keyword save gcRoot for obj to debug add debug point add kernal_debug config to keep more debug info use @res_<opt> to mark operation found self reference on __iter__() can not fix gc err around iter remove lock, only keep the self lock more obj info for debug only pikaui not pass only pikaui not pass
162 lines
4.3 KiB
C
162 lines
4.3 KiB
C
#include "test_common.h"
|
|
TEST_START
|
|
#include "time.h"
|
|
|
|
extern "C" {
|
|
typedef struct tm _tm;
|
|
extern int64_t time_mktime(const _tm* this_tm, int locale);
|
|
extern void time_gmtime(double unix_time, _tm* this_tm);
|
|
extern void time_asctime(const _tm* this_tm);
|
|
void time_struct_format(const _tm* this_tm, char* str);
|
|
}
|
|
|
|
extern PikaMemInfo g_PikaMemInfo;
|
|
/* the log_buff of printf */
|
|
extern char log_buff[LOG_BUFF_MAX][LOG_SIZE];
|
|
|
|
#if 0
|
|
TEST(unix_time, time) {
|
|
/* init */
|
|
g_PikaMemInfo.heapUsedMax = 0;
|
|
/* run */
|
|
PikaObj* self = newRootObj("pikaMain", New_PikaMain);
|
|
extern unsigned char pikaModules_py_a[];
|
|
obj_linkLibrary(self, pikaModules_py_a);
|
|
obj_run(self,
|
|
"import time\n"
|
|
"t1= time.time()\n"
|
|
"t2= time.time()\n");
|
|
/* 获取数据比对 */
|
|
float t1 = obj_getFloat(self, "t1");
|
|
float t2 = obj_getFloat(self, "t2");
|
|
/* assert */
|
|
EXPECT_FLOAT_EQ(0.05, t2 - t1);
|
|
/* deinit */
|
|
obj_deinit(self);
|
|
EXPECT_EQ(pikaMemNow(), 0);
|
|
}
|
|
#endif
|
|
|
|
#if PIKA_STD_DEVICE_UNIX_TIME_ENABLE
|
|
TEST(unix_time, unix_time) {
|
|
/* init */
|
|
g_PikaMemInfo.heapUsedMax = 0;
|
|
/* run */
|
|
PikaObj* self = newRootObj("pikaMain", New_PikaMain);
|
|
extern unsigned char pikaModules_py_a[];
|
|
obj_linkLibrary(self, pikaModules_py_a);
|
|
obj_run(self,
|
|
"import time\n"
|
|
"time.localtime(0.0)\n");
|
|
/* 获取数据比对 */
|
|
int tm_sec = obj_getInt(self, "time._time.tm_sec");
|
|
int tm_min = obj_getInt(self, "time._time.tm_min");
|
|
int tm_hour = obj_getInt(self, "time._time.tm_hour");
|
|
int tm_mday = obj_getInt(self, "time._time.tm_mday");
|
|
int tm_mon = obj_getInt(self, "time._time.tm_mon");
|
|
int tm_year = obj_getInt(self, "time._time.tm_year");
|
|
int tm_wday = obj_getInt(self, "time._time.tm_wday");
|
|
int tm_yday = obj_getInt(self, "time._time.tm_yday");
|
|
int tm_isdst = obj_getInt(self, "time._time.tm_isdst");
|
|
/* assert */
|
|
EXPECT_EQ(tm_sec, 0);
|
|
EXPECT_EQ(tm_min, 0);
|
|
EXPECT_EQ(tm_hour, 8);
|
|
EXPECT_EQ(tm_mday, 1);
|
|
EXPECT_EQ(tm_mon, 0); // 1月
|
|
EXPECT_EQ(tm_year, 1970);
|
|
EXPECT_EQ(tm_wday, 4); // 周四
|
|
EXPECT_EQ(tm_yday, 1);
|
|
EXPECT_EQ(tm_isdst, -1);
|
|
/* deinit */
|
|
obj_deinit(self);
|
|
EXPECT_EQ(pikaMemNow(), 0);
|
|
}
|
|
#endif
|
|
|
|
int compare(const _tm* t1, const _tm* t2) {
|
|
int size = 8; // 只比对前面8个数据
|
|
int* it1 = (int*)t1;
|
|
int* it2 = (int*)t2;
|
|
for (int i = 0; i < size; i++) {
|
|
// printf("t1=%d,t2=%d\n",it1[i],it2[i]);
|
|
if (it1[i] != it2[i]) {
|
|
printf("mytime: ");
|
|
time_asctime(t1);
|
|
printf("ctime: ");
|
|
time_asctime(t2);
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#if PIKA_FLOAT_TYPE_DOUBLE
|
|
TEST(unix_time, iteration_form_1970_to_2070) {
|
|
/* init */
|
|
_tm temp1, *temp2;
|
|
int64_t tint1;
|
|
int64_t r = 123456;
|
|
int flag = 1;
|
|
char str[200];
|
|
/* run */
|
|
|
|
/* 获取数据比对 */
|
|
int test_num = 365 * 100;
|
|
int record = test_num;
|
|
|
|
while (test_num--) {
|
|
// r=randL2();
|
|
r += 24 * 60 * 60;
|
|
time_gmtime(r, &temp1);
|
|
tint1 = time_mktime(&temp1, 0);
|
|
temp2 = gmtime(&r);
|
|
temp1.tm_yday -= 1;
|
|
temp1.tm_isdst = 0;
|
|
temp2->tm_year += 1900;
|
|
if (compare(&temp1, temp2)) {
|
|
printf("error!\n");
|
|
// 格式化字符
|
|
time_struct_format(&temp1, str);
|
|
printf("%s\n", str);
|
|
time_struct_format(temp2, str);
|
|
printf("%s\n", str);
|
|
flag = 0;
|
|
break;
|
|
}
|
|
if (tint1 != r) {
|
|
printf("\n error!tint1 = %ld ,r = %ld \n", tint1, r);
|
|
flag = 0;
|
|
break;
|
|
}
|
|
// printf("\n\n");
|
|
}
|
|
printf("Had passed %d times test !\r\n", record - test_num - 1);
|
|
/* assert */
|
|
EXPECT_EQ(flag, 1);
|
|
/* deinit */
|
|
}
|
|
#endif
|
|
|
|
TEST(timetest, sleep) {
|
|
char* lines =
|
|
"import time\n"
|
|
"t = PikaStdDevice.Time()\n"
|
|
"t.sleep(0.1)\n";
|
|
/* init */
|
|
g_PikaMemInfo.heapUsedMax = 0;
|
|
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
|
|
extern unsigned char pikaModules_py_a[];
|
|
obj_linkLibrary(pikaMain, pikaModules_py_a);
|
|
/* run */
|
|
__platform_printf("BEGIN\r\n");
|
|
|
|
obj_run(pikaMain, lines);
|
|
/* collect */
|
|
/* assert */
|
|
/* deinit */
|
|
obj_deinit(pikaMain);
|
|
EXPECT_EQ(pikaMemNow(), 0);
|
|
}
|
|
|
|
TEST_END |