1d81ac5339fcf9537a3731ebb5770238f4fa69d59Sebastian Wilhelmi#undef G_DISABLE_ASSERT 2d81ac5339fcf9537a3731ebb5770238f4fa69d59Sebastian Wilhelmi#undef G_LOG_DOMAIN 3d81ac5339fcf9537a3731ebb5770238f4fa69d59Sebastian Wilhelmi 4cd89e4cca6d203c3f3324d7368bbbd6634bc11d3Tor Lillqvist#ifdef GLIB_COMPILATION 5cd89e4cca6d203c3f3324d7368bbbd6634bc11d3Tor Lillqvist#undef GLIB_COMPILATION 6cd89e4cca6d203c3f3324d7368bbbd6634bc11d3Tor Lillqvist#endif 798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington#include "glib.h" 998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 1098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington#include <stdio.h> 1198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington#include <string.h> 1298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington#include <locale.h> 1398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington#include <time.h> 1498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 1598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Penningtongboolean failed = FALSE; 1698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Penningtonguint32 passed = 0; 1798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Penningtonguint32 notpassed = 0; 1898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 1998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington#define TEST(m,cond) G_STMT_START { failed = !(cond); \ 2098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Penningtonif (failed) \ 2198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { ++notpassed; \ 2298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (!m) \ 2398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print ("\n(%s:%d) failed for: %s\n", __FILE__, __LINE__, ( # cond )); \ 2498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington else \ 2598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print ("\n(%s:%d) failed for: %s: (%s)\n", __FILE__, __LINE__, ( # cond ), (gchar*)m); \ 2698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } \ 2798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Penningtonelse \ 2898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington ++passed; \ 2998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if ((passed+notpassed) % 10000 == 0) g_print ("."); fflush (stdout); \ 3098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington} G_STMT_END 3198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 3298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Penningtonvoid g_date_debug_print(GDate* d) 3398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington{ 3498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (!d) g_print("NULL!\n"); 3598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington else 3698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("julian: %u (%s) DMY: %u %u %u (%s)\n", 3798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington d->julian_days, 3898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington d->julian ? "valid" : "invalid", 3998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington d->day, 4098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington d->month, 4198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington d->year, 4298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington d->dmy ? "valid" : "invalid"); 4398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 4498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington fflush(stdout); 4598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington} 4698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 4798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Penningtonint main(int argc, char** argv) 4898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington{ 4998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington GDate* d; 5098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington guint32 j; 5198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington GDateMonth m; 5298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington GDateYear y, prev_y; 5398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington GDateDay day; 5498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington gchar buf[101]; 5598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington gchar* loc; 5698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington /* Try to get all the leap year cases. */ 5798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington GDateYear check_years[] = { 5898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 11, 12, 13, 14, 98, 99, 100, 101, 102, 103, 397, 6098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 398, 399, 400, 401, 402, 403, 404, 405, 406, 6198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 1598, 1599, 1600, 1601, 1602, 1650, 1651, 6298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 1897, 1898, 1899, 1900, 1901, 1902, 1903, 6398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 1961, 1962, 1963, 1964, 1965, 1967, 6498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 6598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 6698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 6798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 6898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 6998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 3000, 3001, 3002, 3998, 3999, 4000, 4001, 4002, 4003 7098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington }; 7198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington guint n_check_years = sizeof(check_years)/sizeof(GDateYear); 721e5d06d4ceb07ae8ddbd596cb69936fb3807a116Tim Janik guint i; 731e5d06d4ceb07ae8ddbd596cb69936fb3807a116Tim Janik gboolean discontinuity; 7498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 7598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("checking GDate..."); 7698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 7798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("sizeof(GDate) is not more than 8 bytes on this platform", sizeof(GDate) < 9); 7898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 7998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington d = g_date_new(); 8098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 8198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Empty constructor produces invalid date", !g_date_valid(d)); 8298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 8398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_free(d); 8498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 8598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington d = g_date_new_dmy(1,1,1); 8698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 8798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("January 1, Year 1 created and valid", g_date_valid(d)); 8898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 89855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin j = g_date_get_julian(d); 9098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 9198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("January 1, Year 1 is Julian date 1", j == 1); 9298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 93855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin TEST("Returned month is January", g_date_get_month(d) == G_DATE_JANUARY); 94855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin TEST("Returned day is 1", g_date_get_day(d) == 1); 95855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin TEST("Returned year is 1", g_date_get_year(d) == 1); 9698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 9798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Bad month is invalid", !g_date_valid_month(G_DATE_BAD_MONTH)); 9898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Month 13 is invalid", !g_date_valid_month(13)); 9998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Bad day is invalid", !g_date_valid_day(G_DATE_BAD_DAY)); 10098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Day 32 is invalid", !g_date_valid_day(32)); 10198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Bad year is invalid", !g_date_valid_year(G_DATE_BAD_YEAR)); 10298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Bad julian is invalid", !g_date_valid_julian(G_DATE_BAD_JULIAN)); 10398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Bad weekday is invalid", !g_date_valid_weekday(G_DATE_BAD_WEEKDAY)); 10498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Year 2000 is a leap year", g_date_is_leap_year(2000)); 10598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Year 1999 is not a leap year", !g_date_is_leap_year(1999)); 10698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Year 1996 is a leap year", g_date_is_leap_year(1996)); 10798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Year 1600 is a leap year", g_date_is_leap_year(1600)); 10898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Year 2100 is not a leap year", !g_date_is_leap_year(2100)); 10998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Year 1800 is not a leap year", !g_date_is_leap_year(1800)); 11098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 11198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_free(d); 11298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 11398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington loc = setlocale(LC_ALL,""); 11498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (loc) 11598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("\nLocale set to %s\n", loc); 11698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington else 11798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("\nLocale unchanged\n"); 11898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 11998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington d = g_date_new(); 12098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_set_time(d, time(NULL)); 12198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Today is valid", g_date_valid(d)); 12298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 12398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_strftime(buf,100,"Today is a %A, %x\n", d); 12498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("%s", buf); 12598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 12698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_set_time(d, 1); 12798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Beginning of Unix epoch is valid", g_date_valid(d)); 12898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 12998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_strftime(buf,100,"1 second into the Unix epoch it was a %A, in the month of %B, %x\n", d); 13098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("%s", buf); 13198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 13298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_set_julian(d, 1); 13398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("GDate's \"Julian\" epoch's first day is valid", g_date_valid(d)); 13498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 13598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_strftime(buf,100,"Our \"Julian\" epoch begins on a %A, in the month of %B, %x\n", 13698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington d); 13798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("%s", buf); 13898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 13998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_set_dmy(d, 10, 1, 2000); 14098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 14198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_strftime(buf,100,"%x", d); 14298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 14398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_set_parse(d, buf); 14498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington /* Note: this test will hopefully work, but no promises. */ 14598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Successfully parsed a %x-formatted string", 14698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_valid(d) && 147855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_month(d) == 1 && 148855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_day(d) == 10 && 149855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_year(d) == 2000); 15098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 15198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 15298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 15398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_free(d); 15498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 15598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington j = G_DATE_BAD_JULIAN; 15698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 15798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington i = 0; 15898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington discontinuity = TRUE; 15998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington y = check_years[0]; 16098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington prev_y = G_DATE_BAD_YEAR; 16198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington while (i < n_check_years) 16298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 16398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington guint32 first_day_of_year = G_DATE_BAD_JULIAN; 16498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington guint16 days_in_year = g_date_is_leap_year(y) ? 366 : 365; 16598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington guint sunday_week_of_year = 0; 166855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin guint sunday_weeks_in_year = g_date_get_sunday_weeks_in_year(y); 16798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington guint monday_week_of_year = 0; 168855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin guint monday_weeks_in_year = g_date_get_monday_weeks_in_year(y); 1698e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen guint iso8601_week_of_year = 0; 17098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 17198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (discontinuity) 17298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print(" (Break in sequence of requested years to check)\n"); 17398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 17498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("Checking year %u", y); 17598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 17698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Year is valid", g_date_valid_year(y)); 17798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 17898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Number of Sunday weeks in year is 52 or 53", 17998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington sunday_weeks_in_year == 52 || sunday_weeks_in_year == 53); 18098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 18198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Number of Monday weeks in year is 52 or 53", 18298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington monday_weeks_in_year == 52 || monday_weeks_in_year == 53); 18398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 18498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington m = 1; 18598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington while (m < 13) 18698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 187855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin guint8 dim = g_date_get_days_in_month(m,y); 18898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington GDate days[31]; /* This is the fast way, no allocation */ 18998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 19098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Sensible number of days in month", (dim > 0 && dim < 32)); 19198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 19298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Month between 1 and 12 is valid", g_date_valid_month(m)); 19398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 19498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington day = 1; 19598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 19698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_clear(days, 31); 19798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 19898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington while (day <= dim) 19998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 20098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington guint i; 20198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington GDate tmp; 20298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 20398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("DMY triplet is valid", g_date_valid_dmy(day,m,y)); 20498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 20598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington /* Create GDate with triplet */ 20698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 20798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington d = &days[day-1]; 20898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 20998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Cleared day is invalid", !g_date_valid(d)); 21098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 21198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_set_dmy(d,day,m,y); 21298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 21398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Set day is valid", g_date_valid(d)); 21498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 21598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (m == G_DATE_JANUARY && day == 1) 21698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 217855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin first_day_of_year = g_date_get_julian(d); 21898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 21998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 22098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_assert(first_day_of_year != G_DATE_BAD_JULIAN); 22198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 22298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Date with DMY triplet is valid", g_date_valid(d)); 223855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin TEST("Month accessor works", g_date_get_month(d) == m); 224855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin TEST("Year accessor works", g_date_get_year(d) == y); 225855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin TEST("Day of month accessor works", g_date_get_day(d) == day); 22698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 22798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Day of year is consistent with Julian dates", 228855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin ((g_date_get_julian(d) + 1 - first_day_of_year) == 229855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin (g_date_get_day_of_year(d)))); 23098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 23198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 23298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 23398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("first day: %u this day: %u day of year: %u\n", 23498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington first_day_of_year, 235855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_julian(d), 236855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_day_of_year(d)); 23798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 23898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 23998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (m == G_DATE_DECEMBER && day == 31) 24098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 24198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Last day of year equals number of days in year", 242855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_day_of_year(d) == days_in_year); 24398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 24498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 24598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("last day: %u days in year: %u\n", 246855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_day_of_year(d), days_in_year); 24798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 24898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 24998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 25098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Day of year is not more than number of days in the year", 251855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_day_of_year(d) <= days_in_year); 25298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 25398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Monday week of year is not more than number of weeks in the year", 254855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_monday_week_of_year(d) <= monday_weeks_in_year); 25598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 25698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 25798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("Weeks in year: %u\n", monday_weeks_in_year); 25898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 25998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 26098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Monday week of year is >= than last week of year", 261855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_monday_week_of_year(d) >= monday_week_of_year); 26298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 263855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin if (g_date_get_weekday(d) == G_DATE_MONDAY) 26498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 26598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 26698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Monday week of year on Monday 1 more than previous day's week of year", 267855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin (g_date_get_monday_week_of_year(d) - monday_week_of_year) == 1); 2688e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen if ((m == G_DATE_JANUARY && day <= 4) || 2698e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen (m == G_DATE_DECEMBER && day >= 29)) { 2708e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen TEST("ISO 8601 week of year on Monday Dec 29 - Jan 4 is 1", 2718e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen (g_date_get_iso8601_week_of_year(d) == 1)); 2728e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen } else { 2738e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen TEST("ISO 8601 week of year on Monday 1 more than previous day's week of year", 2748e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen (g_date_get_iso8601_week_of_year(d) - iso8601_week_of_year) == 1); 2758e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen } 27698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 27798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington else 27898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 27998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Monday week of year on non-Monday 0 more than previous day's week of year", 280855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin (g_date_get_monday_week_of_year(d) - monday_week_of_year) == 0); 2818e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen if (!(day == 1 && m == G_DATE_JANUARY)) { 2828e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen TEST("ISO 8601 week of year on non-Monday 0 more than previous day's week of year (", 2838e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen (g_date_get_iso8601_week_of_year(d) - iso8601_week_of_year) == 0); 2848e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen } 28598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 28698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 28798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 288855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin monday_week_of_year = g_date_get_monday_week_of_year(d); 2898e9a4d50df6e690b412f91fa98a9ddf1e88115f4Matthias Clasen iso8601_week_of_year = g_date_get_iso8601_week_of_year(d); 29098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 29198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 29298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Sunday week of year is not more than number of weeks in the year", 293855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_sunday_week_of_year(d) <= sunday_weeks_in_year); 29498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 29598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 29698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 29798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 29898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Sunday week of year is >= than last week of year", 299855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_sunday_week_of_year(d) >= sunday_week_of_year); 30098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 301855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin if (g_date_get_weekday(d) == G_DATE_SUNDAY) 30298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 30398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Sunday week of year on Sunday 1 more than previous day's week of year", 304855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin (g_date_get_sunday_week_of_year(d) - sunday_week_of_year) == 1); 30598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 30698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington else 30798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 30898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Sunday week of year on non-Sunday 0 more than previous day's week of year", 309855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin (g_date_get_sunday_week_of_year(d) - sunday_week_of_year) == 0); 31098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 31198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 312855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin sunday_week_of_year = g_date_get_sunday_week_of_year(d); 31398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 31498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Date is equal to itself", 31598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_compare(d,d) == 0); 31698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 31798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 31898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington /*************** Increments ***********/ 31998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 32098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington i = 1; 32198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington while (i < 402) /* Need to get 400 year increments in */ 32298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 32398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 32498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington /***** Days ******/ 32598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington tmp = *d; 32698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_add_days(d, i); 32798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 32898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Adding days gives a value greater than previous", 32998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_compare(d, &tmp) > 0); 33098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 33198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_subtract_days(d, i); 33298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Forward days then backward days returns us to current day", 333855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_day(d) == day); 33498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 33598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 33698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 33798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print(" (increment %u, dmy %u %u %u) ", i, day, m, y); 33898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 33998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 34098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 34198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Forward days then backward days returns us to current month", 342855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_month(d) == m); 34398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 34498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 34598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 34698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print(" (increment %u, dmy %u %u %u) ", i, day, m, y); 34798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 34898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 34998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 35098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Forward days then backward days returns us to current year", 351855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_year(d) == y); 35298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 35398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 35498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 35598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print(" (increment %u, dmy %u %u %u) ", i, day, m, y); 35698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 35798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 35898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 35998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington /******* Months ********/ 36098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 36198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington tmp = *d; 36298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_add_months(d, i); 36398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Adding months gives a larger value", 36498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_compare(d, &tmp) > 0); 36598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_subtract_months(d, i); 36698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 36798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Forward months then backward months returns us to current month", 368855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_month(d) == m); 36998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 37098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 37198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 37298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print(" (increment %u, dmy %u %u %u) ", i, day, m, y); 37398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 37498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 37598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 37698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Forward months then backward months returns us to current year", 377855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_year(d) == y); 37898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 37998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 38098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 38198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print(" (increment %u, dmy %u %u %u) ", i, day, m, y); 38298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 38398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 38498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 38598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 38698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (day < 29) 38798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 38898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington /* Day should be unchanged */ 38998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 39098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Forward months then backward months returns us to current day", 391855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_day(d) == day); 39298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 39398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 39498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 39598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print(" (increment %u, dmy %u %u %u) ", i, day, m, y); 39698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 39798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 39898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 39998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington else 40098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 40198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington /* reset the day for later tests */ 40298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_set_day(d, day); 40398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 40498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 40598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington /******* Years ********/ 40698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 40798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington tmp = *d; 40898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_add_years(d, i); 40998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 41098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Adding years gives a larger value", 41198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_compare(d,&tmp) > 0); 41298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 41398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_subtract_years(d, i); 41498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 41598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Forward years then backward years returns us to current month", 416855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_month(d) == m); 41798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 41898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 41998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 42098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print(" (increment %u, dmy %u %u %u) ", i, day, m, y); 42198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 42298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 42398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 42498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Forward years then backward years returns us to current year", 425855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_year(d) == y); 42698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 42798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 42898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 42998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print(" (increment %u, dmy %u %u %u) ", i, day, m, y); 43098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 43198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 43298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 43398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (m != 2 && day != 29) 43498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 43598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Forward years then backward years returns us to current day", 436855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_day(d) == day); 43798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 43898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 43998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 44098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print(" (increment %u, dmy %u %u %u) ", i, day, m, y); 44198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_debug_print(d); 44298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 44398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 44498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington else 44598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 44698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_set_day(d, day); /* reset */ 44798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 44898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 44998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington i += 10; 45098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 45198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 45298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington /***** increment test relative to our local Julian count */ 45398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 45498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (!discontinuity) { 45598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 45698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington /* We can only run sequence tests between sequential years */ 45798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 45898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Julians are sequential with increment 1", 459855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin j+1 == g_date_get_julian(d)); 46098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (failed) 46198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 46298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("Out of sequence, prev: %u expected: %u got: %u\n", 463855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin j, j+1, g_date_get_julian(d)); 46498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 46598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 46698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_add_days(d,1); 46798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Next day has julian 1 higher", 468855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_julian(d) == j + 2); 46998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_subtract_days(d, 1); 47098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 47198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (j != G_DATE_BAD_JULIAN) 47298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington { 47398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_subtract_days(d, 1); 47498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 47598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington TEST("Previous day has julian 1 lower", 476855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin g_date_get_julian(d) == j); 47798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 47898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_date_add_days(d, 1); /* back to original */ 47998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 48098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 48198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington discontinuity = FALSE; /* goes away now */ 48298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 48398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington fflush(stdout); 48498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington fflush(stderr); 48598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 486855e230f318c246537cc2dd606a2e7738a7ea9a8Ali Abdin j = g_date_get_julian(d); /* inc current julian */ 48798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 48898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington ++day; 48998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 49098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington ++m; 49198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 49298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print(" done\n"); 49398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington ++i; 49498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington prev_y = y; 49598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington y = check_years[i]; 49698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington if (prev_y == G_DATE_BAD_YEAR || 49798e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington (prev_y + 1) != y) discontinuity = TRUE; 49898e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington } 49998e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 50098e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 50198e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington g_print("\n%u tests passed, %u failed\n",passed, notpassed); 50298e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 50398e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington return 0; 50498e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington} 50598e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 50698e5d88bbe301af863675ef50ae9a6509231c4ccHavoc Pennington 507