unix-time-test.cpp 4.1 KB

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