unix-time-test.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #include "test_common.h"
  2. TEST_START
  3. #include "time.h"
  4. extern "C" {
  5. typedef struct tm _tm;
  6. extern int64_t time_mktime(const _tm* this_tm, int locale);
  7. extern void time_gmtime(double unix_time, _tm* this_tm);
  8. extern void time_asctime(const _tm* this_tm);
  9. void time_struct_format(const _tm* this_tm, char* str);
  10. }
  11. extern PikaMemInfo g_PikaMemInfo;
  12. /* the log_buff of printf */
  13. extern char log_buff[LOG_BUFF_MAX][LOG_SIZE];
  14. #if 0
  15. TEST(unix_time, time) {
  16. /* init */
  17. g_PikaMemInfo.heapUsedMax = 0;
  18. /* run */
  19. PikaObj* self = newRootObj("pikaMain", New_PikaMain);
  20. extern unsigned char pikaModules_py_a[];
  21. obj_linkLibrary(self, pikaModules_py_a);
  22. obj_run(self,
  23. "import time\n"
  24. "t1= time.time()\n"
  25. "t2= time.time()\n");
  26. /* 获取数据比对 */
  27. float t1 = obj_getFloat(self, "t1");
  28. float t2 = obj_getFloat(self, "t2");
  29. /* assert */
  30. EXPECT_FLOAT_EQ(0.05, t2 - t1);
  31. /* deinit */
  32. obj_deinit(self);
  33. EXPECT_EQ(pikaMemNow(), 0);
  34. }
  35. #endif
  36. #if PIKA_STD_DEVICE_UNIX_TIME_ENABLE
  37. TEST(unix_time, unix_time) {
  38. /* init */
  39. g_PikaMemInfo.heapUsedMax = 0;
  40. /* run */
  41. PikaObj* self = newRootObj("pikaMain", New_PikaMain);
  42. extern unsigned char pikaModules_py_a[];
  43. obj_linkLibrary(self, pikaModules_py_a);
  44. obj_run(self,
  45. "import time\n"
  46. "time.localtime(0.0)\n");
  47. /* 获取数据比对 */
  48. int tm_sec = obj_getInt(self, "time._time.tm_sec");
  49. int tm_min = obj_getInt(self, "time._time.tm_min");
  50. int tm_hour = obj_getInt(self, "time._time.tm_hour");
  51. int tm_mday = obj_getInt(self, "time._time.tm_mday");
  52. int tm_mon = obj_getInt(self, "time._time.tm_mon");
  53. int tm_year = obj_getInt(self, "time._time.tm_year");
  54. int tm_wday = obj_getInt(self, "time._time.tm_wday");
  55. int tm_yday = obj_getInt(self, "time._time.tm_yday");
  56. int tm_isdst = obj_getInt(self, "time._time.tm_isdst");
  57. /* assert */
  58. EXPECT_EQ(tm_sec, 0);
  59. EXPECT_EQ(tm_min, 0);
  60. EXPECT_EQ(tm_hour, 8);
  61. EXPECT_EQ(tm_mday, 1);
  62. EXPECT_EQ(tm_mon, 0); // 1月
  63. EXPECT_EQ(tm_year, 1970);
  64. EXPECT_EQ(tm_wday, 4); // 周四
  65. EXPECT_EQ(tm_yday, 1);
  66. EXPECT_EQ(tm_isdst, -1);
  67. /* deinit */
  68. obj_deinit(self);
  69. EXPECT_EQ(pikaMemNow(), 0);
  70. }
  71. #endif
  72. int compare(const _tm* t1, const _tm* t2) {
  73. int size = 8; // 只比对前面8个数据
  74. int* it1 = (int*)t1;
  75. int* it2 = (int*)t2;
  76. for (int i = 0; i < size; i++) {
  77. // printf("t1=%d,t2=%d\n",it1[i],it2[i]);
  78. if (it1[i] != it2[i]) {
  79. printf("mytime: ");
  80. time_asctime(t1);
  81. printf("ctime: ");
  82. time_asctime(t2);
  83. return 1;
  84. }
  85. }
  86. return 0;
  87. }
  88. #if PIKA_FLOAT_TYPE_DOUBLE
  89. TEST(unix_time, iteration_form_1970_to_2070) {
  90. /* init */
  91. _tm temp1, *temp2;
  92. int64_t tint1;
  93. int64_t r = 123456;
  94. int flag = 1;
  95. char str[200];
  96. /* run */
  97. /* 获取数据比对 */
  98. int test_num = 365 * 100;
  99. int record = test_num;
  100. while (test_num--) {
  101. // r=randL2();
  102. r += 24 * 60 * 60;
  103. time_gmtime(r, &temp1);
  104. tint1 = time_mktime(&temp1, 0);
  105. temp2 = gmtime(&r);
  106. temp1.tm_yday -= 1;
  107. temp1.tm_isdst = 0;
  108. temp2->tm_year += 1900;
  109. if (compare(&temp1, temp2)) {
  110. printf("error!\n");
  111. // 格式化字符
  112. time_struct_format(&temp1, str);
  113. printf("%s\n", str);
  114. time_struct_format(temp2, str);
  115. printf("%s\n", str);
  116. flag = 0;
  117. break;
  118. }
  119. if (tint1 != r) {
  120. printf("\n error!tint1 = %ld ,r = %ld \n", tint1, r);
  121. flag = 0;
  122. break;
  123. }
  124. // printf("\n\n");
  125. }
  126. printf("Had passed %d times test !\r\n", record - test_num - 1);
  127. /* assert */
  128. EXPECT_EQ(flag, 1);
  129. /* deinit */
  130. }
  131. #endif
  132. TEST(timetest, sleep) {
  133. char* lines =
  134. "import time\n"
  135. "t = PikaStdDevice.Time()\n"
  136. "t.sleep(0.1)\n";
  137. /* init */
  138. g_PikaMemInfo.heapUsedMax = 0;
  139. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  140. extern unsigned char pikaModules_py_a[];
  141. obj_linkLibrary(pikaMain, pikaModules_py_a);
  142. /* run */
  143. __platform_printf("BEGIN\r\n");
  144. obj_run(pikaMain, lines);
  145. /* collect */
  146. /* assert */
  147. /* deinit */
  148. obj_deinit(pikaMain);
  149. EXPECT_EQ(pikaMemNow(), 0);
  150. }
  151. TEST_END