diff --git a/test/mtime_timedelta_test.c b/test/mtime_timedelta_test.c index 96124821cb422ee760568cb8f09d5a277aa5cbbd..c7cb12be73ec47bceac67fb99e4803d6029713a7 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 0e63fca2e881e577ae12bd3325eb48f351c17e6e..03b11bbc69b128456122ccec80bdc269e5949a7b 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