diff --git a/ChangeLog b/ChangeLog index 01c7fe0d1..1d14a6561 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-03-28 Matthias Clasen + + * tests/date-test.c: + * tests/testgdate.c: Add tests for + g_date_get_iso8601_week_of_year(). + + * glib/gdate.c (g_date_get_iso8601_week_of_year): + Fix the calculation. (#169858, Jon-Kare Hellan) + 2005-03-27 Tor Lillqvist * configure.in: Apparently AC_LIBTOOL_WIN32_DLL isn't deprecated diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 01c7fe0d1..1d14a6561 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +2005-03-28 Matthias Clasen + + * tests/date-test.c: + * tests/testgdate.c: Add tests for + g_date_get_iso8601_week_of_year(). + + * glib/gdate.c (g_date_get_iso8601_week_of_year): + Fix the calculation. (#169858, Jon-Kare Hellan) + 2005-03-27 Tor Lillqvist * configure.in: Apparently AC_LIBTOOL_WIN32_DLL isn't deprecated diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 01c7fe0d1..1d14a6561 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,12 @@ +2005-03-28 Matthias Clasen + + * tests/date-test.c: + * tests/testgdate.c: Add tests for + g_date_get_iso8601_week_of_year(). + + * glib/gdate.c (g_date_get_iso8601_week_of_year): + Fix the calculation. (#169858, Jon-Kare Hellan) + 2005-03-27 Tor Lillqvist * configure.in: Apparently AC_LIBTOOL_WIN32_DLL isn't deprecated diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 01c7fe0d1..1d14a6561 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +2005-03-28 Matthias Clasen + + * tests/date-test.c: + * tests/testgdate.c: Add tests for + g_date_get_iso8601_week_of_year(). + + * glib/gdate.c (g_date_get_iso8601_week_of_year): + Fix the calculation. (#169858, Jon-Kare Hellan) + 2005-03-27 Tor Lillqvist * configure.in: Apparently AC_LIBTOOL_WIN32_DLL isn't deprecated diff --git a/glib/gdate.c b/glib/gdate.c index 4e204f177..85c6171b9 100644 --- a/glib/gdate.c +++ b/glib/gdate.c @@ -414,7 +414,7 @@ g_date_get_iso8601_week_of_year (const GDate *d) * Julian Period which starts on 1 January 4713 BC, so we add * 1,721,425 to the number of days before doing the formula. */ - j = d->julian + 1721425; + j = d->julian_days + 1721425; d4 = (j + 31741 - (j % 7)) % 146097 % 36524 % 1461; L = d4 / 1460; d1 = ((d4 - L) % 365) + L; diff --git a/tests/date-test.c b/tests/date-test.c index d6e1d7249..1a350301b 100644 --- a/tests/date-test.c +++ b/tests/date-test.c @@ -159,6 +159,7 @@ int main(int argc, char** argv) guint sunday_weeks_in_year = g_date_get_sunday_weeks_in_year(y); guint monday_week_of_year = 0; guint monday_weeks_in_year = g_date_get_monday_weeks_in_year(y); + guint iso8601_week_of_year = 0; if (discontinuity) g_print(" (Break in sequence of requested years to check)\n"); @@ -257,15 +258,28 @@ int main(int argc, char** argv) TEST("Monday week of year on Monday 1 more than previous day's week of year", (g_date_get_monday_week_of_year(d) - monday_week_of_year) == 1); + if ((m == G_DATE_JANUARY && day <= 4) || + (m == G_DATE_DECEMBER && day >= 29)) { + TEST("ISO 8601 week of year on Monday Dec 29 - Jan 4 is 1", + (g_date_get_iso8601_week_of_year(d) == 1)); + } else { + TEST("ISO 8601 week of year on Monday 1 more than previous day's week of year", + (g_date_get_iso8601_week_of_year(d) - iso8601_week_of_year) == 1); + } } else { TEST("Monday week of year on non-Monday 0 more than previous day's week of year", (g_date_get_monday_week_of_year(d) - monday_week_of_year) == 0); + if (!(day == 1 && m == G_DATE_JANUARY)) { + TEST("ISO 8601 week of year on non-Monday 0 more than previous day's week of year (", + (g_date_get_iso8601_week_of_year(d) - iso8601_week_of_year) == 0); + } } monday_week_of_year = g_date_get_monday_week_of_year(d); + iso8601_week_of_year = g_date_get_iso8601_week_of_year(d); TEST("Sunday week of year is not more than number of weeks in the year", diff --git a/tests/testgdate.c b/tests/testgdate.c index ef4019eab..85d22dce2 100644 --- a/tests/testgdate.c +++ b/tests/testgdate.c @@ -166,6 +166,7 @@ int main(int argc, char** argv) guint sunday_weeks_in_year = g_date_get_sunday_weeks_in_year(y); guint monday_week_of_year = 0; guint monday_weeks_in_year = g_date_get_monday_weeks_in_year(y); + guint iso8601_week_of_year = 0; if (discontinuity) g_print(" (Break in sequence of requested years to check)\n"); @@ -264,15 +265,28 @@ int main(int argc, char** argv) TEST("Monday week of year on Monday 1 more than previous day's week of year", (g_date_get_monday_week_of_year(d) - monday_week_of_year) == 1); + if ((m == G_DATE_JANUARY && day <= 4) || + (m == G_DATE_DECEMBER && day >= 29)) { + TEST("ISO 8601 week of year on Monday Dec 29 - Jan 4 is 1", + (g_date_get_iso8601_week_of_year(d) == 1)); + } else { + TEST("ISO 8601 week of year on Monday 1 more than previous day's week of year", + (g_date_get_iso8601_week_of_year(d) - iso8601_week_of_year) == 1); + } } else { TEST("Monday week of year on non-Monday 0 more than previous day's week of year", (g_date_get_monday_week_of_year(d) - monday_week_of_year) == 0); + if (!(day == 1 && m == G_DATE_JANUARY)) { + TEST("ISO 8601 week of year on non-Monday 0 more than previous day's week of year (", + (g_date_get_iso8601_week_of_year(d) - iso8601_week_of_year) == 0); + } } monday_week_of_year = g_date_get_monday_week_of_year(d); + iso8601_week_of_year = g_date_get_iso8601_week_of_year(d); TEST("Sunday week of year is not more than number of weeks in the year",