From 064d39b970d3dbab282eec3591cfd9ce882a35e6 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Tue, 18 Nov 2014 00:43:29 +0100 Subject: [PATCH] Begin refactoring GsweTimestamp tests --- tests/gswe-timestamp-test.c | 303 ++++++++++++++++++++++++++++++------ 1 file changed, 256 insertions(+), 47 deletions(-) diff --git a/tests/gswe-timestamp-test.c b/tests/gswe-timestamp-test.c index a78317a..35bfac1 100644 --- a/tests/gswe-timestamp-test.c +++ b/tests/gswe-timestamp-test.c @@ -6,72 +6,281 @@ #include "test-asserts.h" +struct testdata_t { + gint year; + guint month; + guint day; + guint hour; + guint minute; + guint second; + guint ms; + gdouble tz; + gdouble jdet; + gdouble jdut; + gdouble jdsr; +}; + +static struct testdata_t td[] = { + { 1983, 3, 7, 11, 54, 45, 948, 1.0, 2445400.954699264, 3, 4 }, + { 2013, 9, 1, 13, 52, 18, 419, 2.0, 2456536.994646754, 3, 4 }, + { 0 } +}; + static void -test_timestamp_jd(void) +test_timestamp_gregorian(void) { GsweTimestamp *timestamp; - gdouble jd, - seconds; + GError *err = NULL; + gint year; + guint month, day, hour, minute, second, ms; + gdouble tz; + /* Create timestamp from testdata */ timestamp = gswe_timestamp_new_from_gregorian_full( - 1983, 3, 7, - 11, 54, 45, 0, - 1.0 + td[0].year, td[0].month, td[0].day, + td[0].hour, td[0].minute, td[0].second, td[0].ms, + td[0].tz ); - g_assert(timestamp); + g_assert_nonnull(timestamp); - jd = gswe_timestamp_get_julian_day_et(timestamp, NULL); + /* Check for Gregorian validity */ - g_object_unref(timestamp); + /* Set year, get year */ + gswe_timestamp_set_gregorian_year(timestamp, td[1].year, &err); + g_assert_null(err); - timestamp = gswe_timestamp_new_from_julian_day(jd); - g_assert(timestamp); - gswe_timestamp_set_gregorian_timezone(timestamp, 1.0, NULL); - g_assert_cmpfloat( - gswe_timestamp_get_gregorian_timezone(timestamp), - ==, - 1.0 - ); - g_assert_cmpint( - gswe_timestamp_get_gregorian_year(timestamp, NULL), - ==, - 1983 - ); - g_assert_cmpuint( - gswe_timestamp_get_gregorian_month(timestamp, NULL), - ==, - 3 - ); - g_assert_cmpuint(gswe_timestamp_get_gregorian_day(timestamp, NULL), ==, 7); - g_assert_cmpuint( - gswe_timestamp_get_gregorian_hour(timestamp, NULL), - ==, - 11 - ); - g_assert_cmpuint( - gswe_timestamp_get_gregorian_minute(timestamp, NULL), - ==, - 54 - ); + year = gswe_timestamp_get_gregorian_year(timestamp, &err); + g_assert_null(err); + g_assert_cmpint(year, ==, td[1].year); - seconds = - gswe_timestamp_get_gregorian_second(timestamp, NULL) - + gswe_timestamp_get_gregorian_microsecond(timestamp, NULL) / 1000.0; + /* Set month, get month */ + gswe_timestamp_set_gregorian_month(timestamp, td[1].month, &err); + g_assert_null(err); - /* Due to floating point errors, we allow 5 microseconds fuzzyness here */ - gswe_assert_fuzzy_equals( - seconds, - 45.0, - 0.005 + month = gswe_timestamp_get_gregorian_month(timestamp, &err); + g_assert_null(err); + g_assert_cmpuint(month, ==, td[1].month); + + /* Set day, get day */ + gswe_timestamp_set_gregorian_day(timestamp, td[1].day, &err); + g_assert_null(err); + + day = gswe_timestamp_get_gregorian_day(timestamp, &err); + g_assert_null(err); + g_assert_cmpuint(day, ==, td[1].day); + + /* Set hour, get hour */ + gswe_timestamp_set_gregorian_hour(timestamp, td[1].hour, &err); + g_assert_null(err); + + hour = gswe_timestamp_get_gregorian_hour(timestamp, &err); + g_assert_null(err); + g_assert_cmpuint(hour, ==, td[1].hour); + + /* Set minute, get minute */ + gswe_timestamp_set_gregorian_minute(timestamp, td[1].minute, &err); + g_assert_null(err); + + minute = gswe_timestamp_get_gregorian_minute(timestamp, &err); + g_assert_null(err); + g_assert_cmpuint(minute, ==, td[1].minute); + + /* Set second, get second */ + gswe_timestamp_set_gregorian_second(timestamp, td[1].second, &err); + g_assert_null(err); + + second = gswe_timestamp_get_gregorian_second(timestamp, &err); + g_assert_null(err); + g_assert_cmpuint(second, ==, td[1].second); + + /* Set ms, get ms */ + gswe_timestamp_set_gregorian_microsecond(timestamp, td[1].ms, &err); + g_assert_null(err); + + ms = gswe_timestamp_get_gregorian_microsecond(timestamp, &err); + g_assert_null(err); + g_assert_cmpuint(ms, ==, td[1].ms); + + /* Set tz, get tz */ + gswe_timestamp_set_gregorian_timezone(timestamp, td[1].tz, &err); + g_assert_null(err); + + tz = gswe_timestamp_get_gregorian_timezone(timestamp); + g_assert_cmpfloat(tz, ==, td[1].tz); + + /* Set full, check all */ + gswe_timestamp_set_gregorian_full( + timestamp, + td[0].year, td[0].month, td[0].day, + td[0].hour, td[0].minute, td[0].second, td[0].ms, + td[0].tz, + &err ); + g_assert_null(err); + g_object_get( + timestamp, + "gregorian-year", &year, + "gregorian-month", &month, + "gregorian-day", &day, + "gregorian-hour", &hour, + "gregorian-minute", &minute, + "gregorian-second", &second, + "gregorian-microsecond", &ms, + "gregorian-timezone-offset", &tz, + NULL + ); + g_assert_cmpint(year, ==, td[0].year); + g_assert_cmpuint(month, ==, td[0].month); + g_assert_cmpuint(day, ==, td[0].day); + g_assert_cmpuint(hour, ==, td[0].hour); + g_assert_cmpuint(minute, ==, td[0].minute); + g_assert_cmpuint(second, ==, td[0].second); + g_assert_cmpuint(ms, ==, td[0].ms); + g_assert_cmpfloat(tz, ==, td[0].tz); + + g_clear_object(×tamp); } +static void +test_timestamp_timezone(void) +{ + GsweTimestamp *timestamp; + gdouble tz, val_old, val_new; + guint hour, minute, second, ms; + GError *err = NULL; + + /* Create timestamp */ + timestamp = gswe_timestamp_new_from_gregorian_full( + td[0].year, td[0].month, td[0].day, + td[0].hour, td[0].minute, td[0].second, td[0].ms, + td[0].tz + ); + g_assert_nonnull(timestamp); + + /* Change timezone */ + if (td[0].tz >= 23.0) { + tz = td[0].tz - 1; + } else { + tz = td[0].tz + 1; + } + + /* Check hour, minute, second and microsecond */ + val_old = (td[0].hour * 3600) + + (td[0].minute * 60) + + td[0].second + + (td[0].ms / 1000.0); + + gswe_timestamp_set_gregorian_timezone(timestamp, tz, &err); + g_assert_null(err); + + g_object_get( + timestamp, + "gregorian-hour", &hour, + "gregorian-minute", &minute, + "gregorian-second", &second, + "gregorian-microsecond", &ms, + NULL + ); + val_new = (hour * 3600) + + (minute * 60) + + second + + (ms / 1000.0); + + g_assert_cmpfloat(val_new, !=, val_old); + + g_clear_object(×tamp); +} + +static void +test_timestamp_jdet(void) +{ + GsweTimestamp *timestamp; + gdouble jdet; + GError *err = NULL; + + /* Create timestamp */ + timestamp = gswe_timestamp_new_from_julian_day(td[0].jdet); + g_assert_nonnull(timestamp); + + /* Check value */ + jdet = gswe_timestamp_get_julian_day_et(timestamp, &err); + g_assert_null(err); + gswe_assert_fuzzy_equals(jdet, td[0].jdet, 0.000001); + + /* Set new value */ + gswe_timestamp_set_julian_day_et(timestamp, td[1].jdet, &err); + g_assert_null(err); + + /* Check value */ + jdet = gswe_timestamp_get_julian_day_et(timestamp, &err); + g_assert_null(err); + gswe_assert_fuzzy_equals(jdet, td[1].jdet, 0.000001); + + g_clear_object(×tamp); +} + +static void +test_timestamp_jdut(void) +{} + +static void +test_timestamp_instant(void) +{} + +static void +test_timestamp_conv_gregjd(void) +{ + GsweTimestamp *timestamp; + gdouble jdet; + GError *err = NULL; + + /* Create timestamp from testdata */ + timestamp = gswe_timestamp_new_from_gregorian_full( + td[1].year, td[1].month, td[1].day, + td[1].hour, td[1].minute, td[1].second, td[1].ms, + td[1].tz + ); + g_assert_nonnull(timestamp); + + jdet = gswe_timestamp_get_julian_day_ut(timestamp, &err); + g_assert_null(err); + + /* Allow 5ms of fuzzyness here */ + gswe_assert_fuzzy_equals( + jdet, + td[1].jdet, + 0.000001 + ); + + g_clear_object(×tamp); +} + +static void +test_timestamp_conv_jdgreg(void) +{} + +static void +test_timestamp_sidereal(void) +{} + +static void +test_timestamp_now(void) +{} + int main(int argc, char **argv) { g_test_init(&argc, &argv, NULL); - g_test_add_func("/gswe-timestamp/jd", test_timestamp_jd); + g_test_add_func("/gswe/timestamp/gregorian", test_timestamp_gregorian); + g_test_add_func("/gswe/timestamp/timezone", test_timestamp_timezone); + g_test_add_func("/gswe/timestamp/jdet", test_timestamp_jdet); + g_test_add_func("/gswe/timestamp/jdut", test_timestamp_jdut); + g_test_add_func("/gswe/timestamp/instant", test_timestamp_instant); + g_test_add_func("/gswe/timestamp/conv/greg_jd", test_timestamp_conv_gregjd); + g_test_add_func("/gswe/timestamp/conv/jd_greg", test_timestamp_conv_jdgreg); + g_test_add_func("/gswe/timestamp/sidereal", test_timestamp_sidereal); + g_test_add_func("/gswe/timestamp/now", test_timestamp_now); return g_test_run(); }