From b8da2a9508c655be838b8517150e5612f142870d Mon Sep 17 00:00:00 2001 From: Jan Frederik Engels <engels+git@dkrz.de> Date: Tue, 8 May 2018 17:55:03 +0200 Subject: [PATCH] Expand testing of mtime_timedelta routines As a first step, generate tests from the example code in ac66aeaef2dde828aa31b63f88076070a8282b49 . --- test/mtime_timedelta_test.c | 43 +++++++++++++++++++++++++++++++++++++ test/mtime_timedelta_test.h | 1 + 2 files changed, 44 insertions(+) diff --git a/test/mtime_timedelta_test.c b/test/mtime_timedelta_test.c index 96124821..c7cb12be 100644 --- a/test/mtime_timedelta_test.c +++ b/test/mtime_timedelta_test.c @@ -689,6 +689,17 @@ START_TEST(test_event_at_end_of_month) } while (compareDatetime(model_time, stop_date) <= 0); } END_TEST + +START_TEST(test_getTimeDeltaFromDateTime) +{ + // These test 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"); +} +END_TEST + static void setup_ProlepticGregorian(void) { initCalendar(PROLEPTIC_GREGORIAN); @@ -722,6 +733,7 @@ void add_mtime_timedelta_test_to_suite(Suite* suite) tcase_add_test(tcase_ProlepticGregorian, test_timeDeltaToJulianDelta_ProlepticGregorian_2); 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 *tcase_YearOf365Days = tcase_create("mtime_time_test_YearOf365Days"); suite_add_tcase(suite, tcase_YearOf365Days); @@ -856,3 +868,34 @@ void assertTimeDeltaToJulianDeltaWithoutExpectations(const char* timedelta_strin deallocateDateTime(datetime); 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) +{ + struct _datetime* dt1 = newDateTime(dt1_string); + ck_assert(dt1 != NULL); + + struct _datetime* dt2 = newDateTime(dt2_string); + ck_assert(dt2 != NULL); + + struct _timedelta td; + void* err = getTimeDeltaFromDateTime(dt1, dt2, &td); + ck_assert(err != NULL); + + struct _timedelta* expected_td = newTimeDelta(expected_td_string); + ck_assert(expected_td != NULL); + + ck_assert(compareTimeDelta(&td, expected_td) == equal_to); + + deallocateDateTime(dt1); + deallocateDateTime(dt2); + deallocateTimeDelta(expected_td); +} + diff --git a/test/mtime_timedelta_test.h b/test/mtime_timedelta_test.h index 0e63fca2..03b11bbc 100644 --- a/test/mtime_timedelta_test.h +++ b/test/mtime_timedelta_test.h @@ -13,4 +13,5 @@ void assertInvalidTimeDelta(const char* input_string); void assertTimeDeltaToJulianDelta(const char* timedelta_string, const char* base_datetime_string, char expected_jd_sign, int64_t expected_jd_day, int64_t expected_jd_ms); 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); #endif -- GitLab