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