diff --git a/tests/device/test_time/test_time.ino b/tests/device/test_time/test_time.ino index 52967fbba..5568faa50 100644 --- a/tests/device/test_time/test_time.ino +++ b/tests/device/test_time/test_time.ino @@ -35,12 +35,41 @@ TEST_CASE("Can sync time", "[time]") delay(100); } { - time_t now = time(nullptr); - Serial.println(ctime(&now)); + time_t now = time(nullptr); + Serial.println(ctime(&now)); } CHECK(false); } +TEST_CASE("#1745 mktime and localtime", "[time]") +{ + struct tm tm_in; + struct tm tm_out; + + const int years[] = {2012, 2013, 2014}; + const time_t timestamps[] = {1332640800, 1364176800, 1395712800}; + + for (int i = 0; i < sizeof(years)/sizeof(years[0]); ++i) { + tm_in.tm_year = years[i] - 1900; + tm_in.tm_mon = 2; + tm_in.tm_mday = 25; + tm_in.tm_hour = 2; + tm_in.tm_min = 0; + tm_in.tm_sec = 0; + tm_in.tm_wday = 0; + time_t ts = mktime(&tm_in); + CHECK(ts == timestamps[i]); + localtime_r(&ts, &tm_out); + CHECK(tm_in.tm_year == tm_out.tm_year); + CHECK(tm_in.tm_mon == tm_out.tm_mon ); + CHECK(tm_in.tm_mday == tm_out.tm_mday); + CHECK(tm_in.tm_hour == tm_out.tm_hour); + CHECK(tm_in.tm_min == tm_out.tm_min ); + CHECK(tm_in.tm_sec == tm_out.tm_sec ); + CHECK(tm_in.tm_wday == tm_out.tm_wday); + } +} + void loop() { }