From ce3d5c59f90151f0db5cca17568816c6f6866efe Mon Sep 17 00:00:00 2001 From: Jan Frederik Engels <engels+git@dkrz.de> Date: Wed, 9 May 2018 14:14:03 +0200 Subject: [PATCH] Added more testing for timedelta functionality * Some tests do fail (reflecting problems with events for restarts in ICON, affecting the atm_amip experiment). --- test/mtime_timedelta_test.c | 63 ++++++++++++++++++++++++++++++++----- test/mtime_timedelta_test.h | 1 + 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/test/mtime_timedelta_test.c b/test/mtime_timedelta_test.c index c7cb12be..5532c6a6 100644 --- a/test/mtime_timedelta_test.c +++ b/test/mtime_timedelta_test.c @@ -692,14 +692,32 @@ END_TEST START_TEST(test_getTimeDeltaFromDateTime) { - // These test are taken from ac66aeaef2dde828aa31b63f88076070a8282b49 + // These tests are taken from ac66aeaef2dde828aa31b63f88076070a8282b49 assertGetTimeDeltaFromDateTime("1979-03-01T00:00:00.000", "1979-01-01T01:00:00.000", "P01M27DT23H"); assertGetTimeDeltaFromDateTime("1979-07-01T00:00:00.000", "1979-01-01T01:00:00.000", "P05M29DT23H"); assertGetTimeDeltaFromDateTime("1979-12-01T00:00:00.000", "1979-01-01T01:00:00.000", "P10M29DT23H"); assertGetTimeDeltaFromDateTime("1980-01-01T00:00:00.000", "1979-01-01T01:00:00.000", "P11M30DT23H"); + + // These tests are taken from 5bcba6591c38fbb9f7a3a5f63c86963d8a066595 + assertGetTimeDeltaFromDateTime("2017-07-31T00:00:00.000", "2017-07-01T00:00:00.000", "P30D"); + assertGetTimeDeltaFromDateTime("2017-08-01T00:00:00.000", "2017-07-01T00:00:00.000", "P1M"); + + // FIXME: This needs to be fulfilled for amip restart to work fine. + assertGetTimeDeltaFromDateTime("1981-01-01T00:00:00.000", "1980-01-01T00:10:00.000", "P11M30DT23H50M"); +} +END_TEST + +START_TEST(test_timeDeltaToJulianDeltaToTimeDelta) +{ + assertTimeDeltaToJulianDeltaToTimeDelta("1979-01-01T01:00:00.000", "P01M27DT23H"); + + + assertTimeDeltaToJulianDeltaToTimeDelta("1980-01-01T00:10:00.000", "P11M30DT23H50M"); + assertTimeDeltaToJulianDeltaToTimeDelta("1981-01-01T00:00:00.000", "P11M30DT23H50M"); } END_TEST + static void setup_ProlepticGregorian(void) { initCalendar(PROLEPTIC_GREGORIAN); @@ -734,6 +752,7 @@ void add_mtime_timedelta_test_to_suite(Suite* suite) tcase_add_test(tcase_ProlepticGregorian, test_timeDeltaToJulianDelta_ProlepticGregorian_3); tcase_add_test(tcase_ProlepticGregorian, test_timeDeltaToJulianDelta_highDeltas); tcase_add_test(tcase_ProlepticGregorian, test_getTimeDeltaFromDateTime); + tcase_add_test(tcase_ProlepticGregorian, test_timeDeltaToJulianDeltaToTimeDelta); TCase *tcase_YearOf365Days = tcase_create("mtime_time_test_YearOf365Days"); suite_add_tcase(suite, tcase_YearOf365Days); @@ -869,12 +888,6 @@ void assertTimeDeltaToJulianDeltaWithoutExpectations(const char* timedelta_strin deallocateJulianDelta(juliandelta); } -// FIXME: Fill with content -void assertJulianDeltaToTimeDelta () -{ - -} - // It seems we need this tested too. void assertGetTimeDeltaFromDateTime (const char* dt1_string, const char* dt2_string, const char* expected_td_string) @@ -892,10 +905,44 @@ void assertGetTimeDeltaFromDateTime (const char* dt1_string, const char* dt2_str struct _timedelta* expected_td = newTimeDelta(expected_td_string); ck_assert(expected_td != NULL); - ck_assert(compareTimeDelta(&td, expected_td) == equal_to); + char str[MAX_TIMEDELTA_STR_LEN]; + timedeltaToString(&td, str); + ck_assert_msg(compareTimeDelta(&td, expected_td) == equal_to, "expected %s != %s returned", expected_td_string, str); deallocateDateTime(dt1); deallocateDateTime(dt2); deallocateTimeDelta(expected_td); } +void assertTimeDeltaToJulianDeltaToTimeDelta (const char* base_dt_string, const char* td_string) +{ + void* err; + + struct _datetime* base_dt = newDateTime(base_dt_string); + ck_assert(base_dt != NULL); + + struct _timedelta* td = newTimeDelta(td_string); + ck_assert(td != NULL); + + struct _juliandelta jd; + err = timeDeltaToJulianDelta(td, base_dt, &jd); + ck_assert(err != NULL); + + struct _timedelta res_td; + err = julianDeltaToTimeDelta(&jd, base_dt, &res_td); + ck_assert(err != NULL); + + char str[MAX_TIMEDELTA_STR_LEN]; + timedeltaToString(&res_td, str); + ck_assert_msg(compareTimeDelta(td, &res_td) == equal_to, "base datetime %s\n original %s != %s returned", + base_dt_string, td_string, str); + + //FIXME: Deallocate. +} + +// FIXME: Fill with content +void assertJulianDeltaToTimeDelta () +{ + +} + diff --git a/test/mtime_timedelta_test.h b/test/mtime_timedelta_test.h index 03b11bbc..999e9da3 100644 --- a/test/mtime_timedelta_test.h +++ b/test/mtime_timedelta_test.h @@ -14,4 +14,5 @@ void assertTimeDeltaToJulianDelta(const char* timedelta_string, const char* base void assertTimeDeltaToJulianDeltaWithoutExpectations(const char* timedelta_string, const char* base_datetime_string, char expected_jd_sign); void assertGetTimeDeltaFromDateTime (const char* dt1_string, const char* dt2_string, const char* expected_td_string); +void assertTimeDeltaToJulianDeltaToTimeDelta (const char* base_dt_string, const char* td_string); #endif -- GitLab