From 2ba5e0fea804afc24bafd2a9065989bc31ae1572 Mon Sep 17 00:00:00 2001 From: Christian Hovy <hovy@informatik.uni-hamburg.de> Date: Wed, 25 Jun 2014 18:07:07 +0200 Subject: [PATCH] [check] Added test for timeDeltaToJulianDelta to mtime_timedelta_test. --- check/mtime_timedelta_test.c | 338 +++++++++++++++++++++++++++++++++-- check/mtime_timedelta_test.h | 2 + 2 files changed, 326 insertions(+), 14 deletions(-) diff --git a/check/mtime_timedelta_test.c b/check/mtime_timedelta_test.c index 9e0fd64b..da8b5465 100644 --- a/check/mtime_timedelta_test.c +++ b/check/mtime_timedelta_test.c @@ -3,8 +3,12 @@ #include <stdio.h> #include <stdlib.h> #include "mtime_calendar.h" +#include "mtime_datetime.h" +#include "mtime_julianDay.h" typedef struct _timedelta* TimeDelta; +typedef struct _datetime* DateTime; +typedef struct _juliandelta* JulianDelta; START_TEST(test_create_timedelta_from_valid_strings) { @@ -80,7 +84,7 @@ START_TEST(test_invalid_strings) } END_TEST -START_TEST(test_constructAndCopyDateTime) +START_TEST(test_constructAndCopyTimeDelta) { int64_t year = 504; int month = 4; @@ -138,7 +142,7 @@ START_TEST(test_constructAndCopyDateTime) } END_TEST -START_TEST(test_replaceDatetime) +START_TEST(test_replaceTimeDelta) { int64_t year = 504; int month = 4; @@ -188,20 +192,263 @@ START_TEST(test_replaceDatetime) ck_assert_int_eq(0, timedelta_dest_nonstd->second); ck_assert_int_eq(0, timedelta_dest_nonstd->ms); - deallocateDateTime(timedelta_src); - deallocateDateTime(timedelta_dest); - deallocateDateTime(timedelta_src_neg); - deallocateDateTime(timedelta_dest_neg); + deallocateTimeDelta(timedelta_src); + deallocateTimeDelta(timedelta_dest); + deallocateTimeDelta(timedelta_src_neg); + deallocateTimeDelta(timedelta_dest_neg); deallocateTimeDelta(timedelta_src_nonstd); deallocateTimeDelta(timedelta_dest_nonstd); } END_TEST -static void setup(void) +START_TEST(test_timeDeltaToJulianDelta_ProlepticGregorian_1) +{ + assertTimeDeltaToJulianDelta("P0Y", "0-01-01T00:00:00.000", '+', 0, 0); + + assertTimeDeltaToJulianDelta("P1Y", "-1-01-01T00:00:00.000", '+', 365, 0); + assertTimeDeltaToJulianDelta("P1Y", "-1-01-01T00:00:00.000", '+', 365, 0); + assertTimeDeltaToJulianDelta("P1Y", "-1-02-28T00:00:00.000", '+', 365, 0); + assertTimeDeltaToJulianDelta("P1Y", "-1-03-01T00:00:00.000", '+', 366, 0); + assertTimeDeltaToJulianDelta("P1Y", "-1-12-31T00:00:00.000", '+', 366, 0); + assertTimeDeltaToJulianDelta("P1Y", "0-01-01T00:00:00.000", '+', 366, 0); + assertTimeDeltaToJulianDelta("P1Y", "0-02-28T00:00:00.000", '+', 366, 0); + assertTimeDeltaToJulianDelta("P1Y", "0-02-29T00:00:00.000", '+', 366, 0); + assertTimeDeltaToJulianDelta("P1Y", "0-03-01T00:00:00.000", '+', 365, 0); + assertTimeDeltaToJulianDelta("P1Y", "0-12-31T00:00:00.000", '+', 365, 0); + assertTimeDeltaToJulianDelta("P1Y", "1-01-01T00:00:00.000", '+', 365, 0); + assertTimeDeltaToJulianDelta("P1Y", "1-01-01T00:00:00.000", '+', 365, 0); + assertTimeDeltaToJulianDelta("P1Y", "1-02-28T00:00:00.000", '+', 365, 0); + assertTimeDeltaToJulianDelta("P1Y", "1-03-01T00:00:00.000", '+', 365, 0); + assertTimeDeltaToJulianDelta("P1Y", "1-12-31T00:00:00.000", '+', 365, 0); + + assertTimeDeltaToJulianDelta("-P1Y", "-1-01-01T00:00:00.000", '-', -365, 0); + assertTimeDeltaToJulianDelta("-P1Y", "-1-01-01T00:00:00.000", '-', -365, 0); + assertTimeDeltaToJulianDelta("-P1Y", "-1-02-28T00:00:00.000", '-', -365, 0); + assertTimeDeltaToJulianDelta("-P1Y", "-1-03-01T00:00:00.000", '-', -365, 0); + assertTimeDeltaToJulianDelta("-P1Y", "-1-12-31T00:00:00.000", '-', -365, 0); + assertTimeDeltaToJulianDelta("-P1Y", "0-01-01T00:00:00.000", '-', -365, 0); + assertTimeDeltaToJulianDelta("-P1Y", "0-02-28T00:00:00.000", '-', -365, 0); + assertTimeDeltaToJulianDelta("-P1Y", "0-02-29T00:00:00.000", '-', -365, 0); + assertTimeDeltaToJulianDelta("-P1Y", "0-03-01T00:00:00.000", '-', -366, 0); + assertTimeDeltaToJulianDelta("-P1Y", "0-12-31T00:00:00.000", '-', -366, 0); + assertTimeDeltaToJulianDelta("-P1Y", "1-01-01T00:00:00.000", '-', -366, 0); + assertTimeDeltaToJulianDelta("-P1Y", "1-01-01T00:00:00.000", '-', -366, 0); + assertTimeDeltaToJulianDelta("-P1Y", "1-02-28T00:00:00.000", '-', -366, 0); + assertTimeDeltaToJulianDelta("-P1Y", "1-03-01T00:00:00.000", '-', -365, 0); + assertTimeDeltaToJulianDelta("-P1Y", "1-12-31T00:00:00.000", '-', -365, 0); + + assertTimeDeltaToJulianDelta("P2Y", "0-01-01T00:00:00.000", '+', 731, 0); + assertTimeDeltaToJulianDelta("P6Y", "0-01-01T00:00:00.000", '+', 2192, 0); + assertTimeDeltaToJulianDelta("P26Y", "0-01-01T00:00:00.000", '+', 9497, 0); + assertTimeDeltaToJulianDelta("P126Y", "0-01-01T00:00:00.000", '+', 46021, 0); + assertTimeDeltaToJulianDelta("P406Y", "0-01-01T00:00:00.000", '+', 148289, 0); + assertTimeDeltaToJulianDelta("P10406Y", "0-01-01T00:00:00.000", '+', 3800714, 0); + assertTimeDeltaToJulianDelta("P10407Y", "0-01-01T00:00:00.000", '+', 3801079, 0); + assertTimeDeltaToJulianDelta("P10408Y", "0-01-01T00:00:00.000", '+', 3801444, 0); + assertTimeDeltaToJulianDelta("P10409Y", "0-01-01T00:00:00.000", '+', 3801810, 0); + assertTimeDeltaToJulianDelta("P10409Y", "0-03-01T00:00:00.000", '+', 3801809, 0); + assertTimeDeltaToJulianDelta("P10409Y", "1-01-01T00:00:00.000", '+', 3801809, 0); + assertTimeDeltaToJulianDelta("-P10409Y", "1-01-01T00:00:00.000", '-', -3801810, 0); + assertTimeDeltaToJulianDelta("-P10409Y", "0-01-01T00:00:00.000", '-', -3801809, 0); + //Runs to long, see test_timeDeltaToJulianDelta_highDeltas +// assertTimeDeltaToJulianDeltaWithoutExpactations("-P2147483648Y", "0-01-01T00:00:00.000", '-'); +// assertTimeDeltaToJulianDeltaWithoutExpactations("P2147483647Y", "0-01-01T00:00:00.000", '+'); +// assertTimeDeltaToJulianDeltaWithoutExpactations("-P2147483648Y", "2147483647-01-01T00:00:00.000", '-'); +// assertTimeDeltaToJulianDeltaWithoutExpactations("P2147483647Y", "-2147483648-01-01T00:00:00.000", '+'); + + assertTimeDeltaToJulianDelta("-P1Y", "2147483647-01-01T00:00:00.000", '-', -365, 0); + assertTimeDeltaToJulianDelta("P1Y", "-2147483648-01-01T00:00:00.000", '+', 366, 0); +} +END_TEST + +START_TEST(test_timeDeltaToJulianDelta_ProlepticGregorian_2) +{ + assertTimeDeltaToJulianDelta("P01M", "1-01-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-02-01T00:00:00.000", '+', 28, 0); + assertTimeDeltaToJulianDelta("P01M", "0-02-01T00:00:00.000", '+', 29, 0); + assertTimeDeltaToJulianDelta("P01M", "0-03-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-04-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-05-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-06-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-07-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-08-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-09-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-10-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-11-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-12-01T00:00:00.000", '+', 31, 0); + + assertTimeDeltaToJulianDelta("-P01M", "1-01-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-02-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-03-01T00:00:00.000", '-', -28, 0); + assertTimeDeltaToJulianDelta("-P01M", "0-03-01T00:00:00.000", '-', -29, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-04-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-05-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-06-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-07-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-08-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-09-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-10-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-11-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-12-01T00:00:00.000", '-', -30, 0); +} +END_TEST + +START_TEST(test_timeDeltaToJulianDelta_ProlepticGregorian_3) +{ + assertTimeDeltaToJulianDelta("P01D", "1-01-01T00:00:00.000", '+', 1, 0); + assertTimeDeltaToJulianDelta("PT01H", "1-01-01T00:00:00.000", '+', 0, 3600000); + assertTimeDeltaToJulianDelta("PT01M", "1-01-01T00:00:00.000", '+', 0, 60000); + assertTimeDeltaToJulianDelta("PT01S", "1-01-01T00:00:00.000", '+', 0, 1000); + assertTimeDeltaToJulianDelta("PT00.001S", "1-01-01T00:00:00.000", '+', 0, 1); + + assertTimeDeltaToJulianDelta("-P01D", "1-01-01T00:00:00.000", '-', -1, 0); + assertTimeDeltaToJulianDelta("-PT01H", "1-01-01T00:00:00.000", '-', 0, -3600000); + assertTimeDeltaToJulianDelta("-PT01M", "1-01-01T00:00:00.000", '-', 0, -60000); + assertTimeDeltaToJulianDelta("-PT01S", "1-01-01T00:00:00.000", '-', 0, -1000); + assertTimeDeltaToJulianDelta("-PT00.001S", "1-01-01T00:00:00.000", '-', 0, -1); + + assertTimeDeltaToJulianDelta("P25Y", "1-01-01T00:00:00.000", '+', 9131, 0); + assertTimeDeltaToJulianDelta("P25Y4M", "1-01-01T00:00:00.000", '+', 9251, 0); + assertTimeDeltaToJulianDelta("P25Y4M12D", "1-01-01T00:00:00.000", '+', 9263, 0); + assertTimeDeltaToJulianDelta("P25Y4M12DT06H23M", "1-01-01T00:00:00.000", '+', 9263, 22980000); + assertTimeDeltaToJulianDelta("P25Y4M12DT06H23M56S", "1-01-01T00:00:00.000", '+', 9263, 23036000); + assertTimeDeltaToJulianDelta("P25Y4M12DT06H23M56.132S", "0-01-01T00:00:00.000", '+', 9264, 23036132); + assertTimeDeltaToJulianDelta("P25Y4M12DT06H23M56.132S", "0-03-01T00:00:00.000", '+', 9265, 23036132); + assertTimeDeltaToJulianDelta("-P25Y4M12DT06H23M56.132S", "0-03-01T00:00:00.000", '-', -9264, -23036132); + + assertTimeDeltaToJulianDelta("P366D", "0-01-01T00:00:00.000", '+', 366, 0); + assertTimeDeltaToJulianDelta("P366D", "0-03-01T00:00:00.000", '+', 366, 0); + assertTimeDeltaToJulianDelta("P366D", "1-01-01T00:00:00.000", '+', 366, 0); + + assertTimeDeltaToJulianDelta("-P366D", "0-01-01T00:00:00.000", '-', -366, 0); + assertTimeDeltaToJulianDelta("-P366D", "0-03-01T00:00:00.000", '-', -366, 0); + assertTimeDeltaToJulianDelta("-P366D", "1-01-01T00:00:00.000", '-', -366, 0); + + assertTimeDeltaToJulianDelta("PT24H", "1-01-01T00:00:00.000", '+', 1, 0); + assertTimeDeltaToJulianDelta("PT30H", "1-01-01T00:00:00.000", '+', 1, 21600000); + assertTimeDeltaToJulianDelta("PT1440M", "1-01-01T00:00:00.000", '+', 1, 0); + assertTimeDeltaToJulianDelta("PT4335M", "1-01-01T00:00:00.000", '+', 3, 900000); + assertTimeDeltaToJulianDelta("PT86400S", "1-01-01T00:00:00.000", '+', 1, 0); + assertTimeDeltaToJulianDelta("PT3653389.498S", "1-01-01T00:00:00.000", '+', 42, 24589498); + + assertTimeDeltaToJulianDelta("-PT24H", "1-01-01T00:00:00.000", '-', -1, 0); + assertTimeDeltaToJulianDelta("-PT30H", "1-01-01T00:00:00.000", '-', -1, -21600000); + assertTimeDeltaToJulianDelta("-PT1440M", "1-01-01T00:00:00.000", '-', -1, 0); + assertTimeDeltaToJulianDelta("-PT4335M", "1-01-01T00:00:00.000", '-', -3, -900000); + assertTimeDeltaToJulianDelta("-PT86400S", "1-01-01T00:00:00.000", '-', -1, 0); + assertTimeDeltaToJulianDelta("-PT3653389.498S", "1-01-01T00:00:00.000", '-', -42, -24589498); +} +END_TEST + +START_TEST(test_timeDeltaToJulianDelta_YearOf365Days) +{ + assertTimeDeltaToJulianDelta("P0Y", "0-01-01T00:00:00.000", '+', 0, 0); + assertTimeDeltaToJulianDelta("P1Y", "0-01-01T00:00:00.000", '+', 365, 0); + assertTimeDeltaToJulianDelta("P1Y", "1-01-01T00:00:00.000", '+', 365, 0); + assertTimeDeltaToJulianDelta("-P1Y", "0-01-01T00:00:00.000", '-', -365, 0); + assertTimeDeltaToJulianDelta("-P1Y", "1-01-01T00:00:00.000", '-', -365, 0); + + assertTimeDeltaToJulianDelta("P01M", "1-01-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-02-01T00:00:00.000", '+', 28, 0); + assertTimeDeltaToJulianDelta("P01M", "0-02-01T00:00:00.000", '+', 28, 0); + assertTimeDeltaToJulianDelta("P01M", "0-03-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-04-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-05-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-06-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-07-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-08-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-09-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-10-01T00:00:00.000", '+', 31, 0); + assertTimeDeltaToJulianDelta("P01M", "1-11-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-12-01T00:00:00.000", '+', 31, 0); + + assertTimeDeltaToJulianDelta("-P01M", "1-01-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-02-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-03-01T00:00:00.000", '-', -28, 0); + assertTimeDeltaToJulianDelta("-P01M", "0-03-01T00:00:00.000", '-', -28, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-04-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-05-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-06-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-07-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-08-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-09-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-10-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-11-01T00:00:00.000", '-', -31, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-12-01T00:00:00.000", '-', -30, 0); + +} +END_TEST + +START_TEST(test_timeDeltaToJulianDelta_YearOf360Days) +{ + assertTimeDeltaToJulianDelta("P0Y", "0-01-01T00:00:00.000", '+', 0, 0); + assertTimeDeltaToJulianDelta("P1Y", "0-01-01T00:00:00.000", '+', 360, 0); + assertTimeDeltaToJulianDelta("P1Y", "1-01-01T00:00:00.000", '+', 360, 0); + assertTimeDeltaToJulianDelta("-P1Y", "0-01-01T00:00:00.000", '-', -360, 0); + assertTimeDeltaToJulianDelta("-P1Y", "1-01-01T00:00:00.000", '-', -360, 0); + + assertTimeDeltaToJulianDelta("P01M", "1-01-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-02-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "0-02-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "0-03-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-04-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-05-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-06-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-07-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-08-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-09-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-10-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-11-01T00:00:00.000", '+', 30, 0); + assertTimeDeltaToJulianDelta("P01M", "1-12-01T00:00:00.000", '+', 30, 0); + + assertTimeDeltaToJulianDelta("-P01M", "1-01-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-02-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-03-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "0-03-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-04-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-05-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-06-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-07-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-08-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-09-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-10-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-11-01T00:00:00.000", '-', -30, 0); + assertTimeDeltaToJulianDelta("-P01M", "1-12-01T00:00:00.000", '-', -30, 0); +} +END_TEST + +START_TEST(test_timeDeltaToJulianDelta_highDeltas) +{ + assertTimeDeltaToJulianDeltaWithoutExpactations("P0Y", "0-01-01T00:00:00.000", '+'); + assertTimeDeltaToJulianDeltaWithoutExpactations("P1Y", "0-01-01T00:00:00.000", '+'); + assertTimeDeltaToJulianDeltaWithoutExpactations("P9Y", "0-01-01T00:00:00.000", '+'); + assertTimeDeltaToJulianDeltaWithoutExpactations("P99Y", "0-01-01T00:00:00.000", '+'); + assertTimeDeltaToJulianDeltaWithoutExpactations("P999Y", "0-01-01T00:00:00.000", '+'); + assertTimeDeltaToJulianDeltaWithoutExpactations("P9999Y", "0-01-01T00:00:00.000", '+'); + assertTimeDeltaToJulianDeltaWithoutExpactations("P99999Y", "0-01-01T00:00:00.000", '+'); + assertTimeDeltaToJulianDeltaWithoutExpactations("P999999Y", "0-01-01T00:00:00.000", '+'); + assertTimeDeltaToJulianDeltaWithoutExpactations("P9999999Y", "0-01-01T00:00:00.000", '+'); + assertTimeDeltaToJulianDeltaWithoutExpactations("P99999999Y", "0-01-01T00:00:00.000", '+'); + assertTimeDeltaToJulianDeltaWithoutExpactations("P999999999Y", "0-01-01T00:00:00.000", '+'); + assertTimeDeltaToJulianDeltaWithoutExpactations("P2147483647Y", "0-01-01T00:00:00.000", '+'); +} +END_TEST + +static void setup_ProlepticGregorian(void) { initCalendar(PROLEPTIC_GREGORIAN); } +static void setup_YearOf365Days(void) +{ + initCalendar(YEAR_OF_365_DAYS); +} + +static void setup_YearOf360Days(void) +{ + initCalendar(YEAR_OF_360_DAYS); +} + static void teardown(void) { freeCalendar(); @@ -209,13 +456,29 @@ static void teardown(void) void add_mtime_timedelta_test_to_suite(Suite* suite) { - TCase *tcase = tcase_create("mtime_time_test"); - suite_add_tcase(suite, tcase); - tcase_add_checked_fixture(tcase, setup, teardown); - tcase_add_test(tcase, test_create_timedelta_from_valid_strings); - tcase_add_test(tcase, test_invalid_strings); - tcase_add_test(tcase, test_constructAndCopyDateTime); - tcase_add_test(tcase, test_replaceDatetime); + TCase *tcase_ProlepticGregorian = tcase_create("mtime_time_test_ProlepticGregorian"); + suite_add_tcase(suite, tcase_ProlepticGregorian); + tcase_add_checked_fixture(tcase_ProlepticGregorian, setup_ProlepticGregorian, teardown); + tcase_add_test(tcase_ProlepticGregorian, test_create_timedelta_from_valid_strings); + tcase_add_test(tcase_ProlepticGregorian, test_invalid_strings); + tcase_add_test(tcase_ProlepticGregorian, test_constructAndCopyTimeDelta); + tcase_add_test(tcase_ProlepticGregorian, test_replaceTimeDelta); + tcase_add_test(tcase_ProlepticGregorian, test_timeDeltaToJulianDelta_ProlepticGregorian_1); + 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); + // Uncomment and adapt to your needs, if you want test_timeDeltaToJulianDelta_highDeltas to terminate + //tcase_set_timeout(tcase_ProlepticGregorian, 30); // Testcase Timeout = 30 sec. + + TCase *tcase_YearOf365Days = tcase_create("mtime_time_test_YearOf365Days"); + suite_add_tcase(suite, tcase_YearOf365Days); + tcase_add_checked_fixture(tcase_YearOf365Days, setup_YearOf365Days, teardown); + tcase_add_test(tcase_YearOf365Days, test_timeDeltaToJulianDelta_YearOf365Days); + + TCase *tcase_YearOf360Days = tcase_create("mtime_time_test_YearOf360Days"); + suite_add_tcase(suite, tcase_YearOf360Days); + tcase_add_checked_fixture(tcase_YearOf360Days, setup_YearOf360Days, teardown); + tcase_add_test(tcase_YearOf360Days, test_timeDeltaToJulianDelta_YearOf360Days); } /*** SPECIAL ASSERT FUNCTIONS ***/ @@ -283,3 +546,50 @@ void assertInvalidTimeDelta(const char* input_string) free(msg); //Never executed? } } + +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) +{ + TimeDelta timedelta = newTimeDelta(timedelta_string); + ck_assert(timedelta != NULL); + + DateTime datetime = newDateTime(base_datetime_string); + ck_assert(datetime != NULL); + + JulianDelta juliandeltaTemp = newJulianDelta('+', 0, 0); + JulianDelta juliandelta = timeDeltaToJulianDelta(timedelta, datetime, juliandeltaTemp); + ck_assert(datetime != NULL); + ck_assert(juliandeltaTemp == juliandelta); + + const char* format = "timeDeltaToJulianDelta failed for \"%s\" + \"%s\": expected:(%c, %lld, %lld) actual:(%c, %lld, %lld)."; + size_t length = snprintf(NULL, 0, format, base_datetime_string, timedelta_string, expected_jd_sign, expected_jd_day, expected_jd_ms, juliandelta->sign, juliandelta->day, juliandelta->ms) + 1; + char* msg = malloc(length); + snprintf(msg, length, format, base_datetime_string, timedelta_string, expected_jd_sign, expected_jd_day, expected_jd_ms, juliandelta->sign, juliandelta->day, juliandelta->ms); + + ck_assert_msg(expected_jd_sign == juliandelta->sign, msg); + ck_assert_msg(expected_jd_day == juliandelta->day, msg); + ck_assert_msg(expected_jd_ms == juliandelta->ms, msg); + + deallocateTimeDelta(timedelta); + deallocateDateTime(datetime); + deallocateJulianDelta(juliandelta); +} + +void assertTimeDeltaToJulianDeltaWithoutExpactations(const char* timedelta_string, const char* base_datetime_string, char expected_jd_sign) +{ + TimeDelta timedelta = newTimeDelta(timedelta_string); + ck_assert(timedelta != NULL); + + DateTime datetime = newDateTime(base_datetime_string); + ck_assert(datetime != NULL); + + JulianDelta juliandeltaTemp = newJulianDelta('+', 0, 0); + JulianDelta juliandelta = timeDeltaToJulianDelta(timedelta, datetime, juliandeltaTemp); + ck_assert(datetime != NULL); + ck_assert(juliandeltaTemp == juliandelta); + + ck_assert(expected_jd_sign == juliandelta->sign); + + deallocateTimeDelta(timedelta); + deallocateDateTime(datetime); + deallocateJulianDelta(juliandelta); +} diff --git a/check/mtime_timedelta_test.h b/check/mtime_timedelta_test.h index adcec4bf..e0721f85 100644 --- a/check/mtime_timedelta_test.h +++ b/check/mtime_timedelta_test.h @@ -10,5 +10,7 @@ void add_mtime_timedelta_test_to_suite(Suite* suite); /*** SPECIAL ASSERT FUNCTIONS ***/ void assertTimeDelta(const char* input_string, bool std_form, char sign, int64_t year, int month, int day, int hour, int minute, int second, int ms, const char* expected_output_string); 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 assertTimeDeltaToJulianDeltaWithoutExpactations(const char* timedelta_string, const char* base_datetime_string, char expected_jd_sign); #endif -- GitLab