From eae0863a1cf09d5f2f6f6af5df405dc9b727fac5 Mon Sep 17 00:00:00 2001 From: Chris Johns Date: Sun, 27 Apr 2014 18:11:09 +1000 Subject: rtems: Fix sp2038 test. Avoid using newlib's gmtime_r call which fails with a max signed int. Add an RTEMS specific version for 1/1/1988 to 31/12/2100. Update sp2038 to test every day from 1/1/1988 to 31/12/2100. Only days need be tested as the code splits the seconds based on days. --- testsuites/sptests/sp2038/init.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'testsuites/sptests/sp2038') diff --git a/testsuites/sptests/sp2038/init.c b/testsuites/sptests/sp2038/init.c index 9fac38a23c..e5a3906ee6 100644 --- a/testsuites/sptests/sp2038/init.c +++ b/testsuites/sptests/sp2038/init.c @@ -283,12 +283,49 @@ static void test_leap_year(void) rtems_test_assert(test_status == false); } +static bool test_year_is_leap_year(uint32_t year) +{ + return (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0); +} + +static void test_every_day(void) +{ + rtems_time_of_day every_day = { + .year = 1970, + .month = 1, + .day = 1, + .hour = 0, + .minute = 1, + .second = 2 + }; + const int days_per_month[2][12] = { + { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, + { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } + }; + rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_time_of_day now; + + for (every_day.year = 1988; every_day.year <= 2100; ++every_day.year) { + int leap_year = test_year_is_leap_year(every_day.year) ? 1 : 0; + for (every_day.month = 1; every_day.month <= 12; ++every_day.month) { + int days = days_per_month[leap_year][every_day.month - 1]; + for (every_day.day = 1; every_day.day <= days; ++every_day.day) { + sc = rtems_clock_set(&every_day); + ASSERT_SC(sc); + sc = rtems_clock_get_tod(&now); + ASSERT_SC(sc); + rtems_test_assert(memcmp(&now, &every_day, sizeof(now)) == 0); + } + } + } +} rtems_task Init(rtems_task_argument argument) { TEST_BEGIN(); test_tod_to_seconds(); + test_every_day(); test_problem_year(); test_leap_year(); -- cgit v1.2.3