(*i $Id: test_date.ml,v 1.21 2008/02/08 13:06:45 signoles Exp $ i*) Printf.printf "Tests of Date:\n";; open CalendarLib;; open Date;; include Gen_test;; reset ();; test_exn (lazy (make (-4713) 1 1)) "make (-4713) 1 1";; test_exn (lazy (make 3268 1 23)) "make 3268 1 23";; test_exn (lazy (make 1582 10 5)) "make 1582 10 10";; test (compare (make 2003 2 29) (make 2003 3 1) = 0) "2003-2-29 = 2003-3-1";; let d = make 2003 12 31;; test (next d `Month = make 2004 1 31) "2003-12-31 + 1 mois";; test (add d (Period.month 2) = make 2004 3 2) "2003-12-31 + 2 mois";; let d2 = make (-3000) 1 1;; test (rem d (sub d d2) = d2) "rem x (sub x y) = y";; test (from_jd 0 = make (-4712) 1 1) "from_jd 0 = 4713 BC-1-1";; test (to_jd (from_jd 12345) = 12345) "to_jd (from_jd x) = x";; test (from_mjd 0 = make 1858 11 17) "from_mjd 0 = 1858-11-17";; test (to_mjd (from_mjd 12345) = 12345) "to_mjd (from_mjd x) = x";; test (is_leap_day (make 2000 2 24)) "2000-2-24 leap day";; test (not (is_leap_day (make 2000 2 25))) "2000-2-25 not leap day";; test (is_gregorian (make 1600 1 1)) "1600-1-1 gregorian";; test (not (is_gregorian (make 1400 1 1))) "1400-1-1 not gregorian";; test (is_julian (make 1582 1 1)) "1582-1-1 julian";; test (not (is_julian (make 1583 1 1))) "1583-1-1 not julian";; test (int_of_day Mon = 1) "Monday = 1";; test (int_of_day Sun = 7) "Sunday = 7";; test (day_of_int 1 = Mon) "1 = Monday";; test (day_of_int 7 = Sun) "1 = Monday";; test (int_of_month Jan = 1) "January = 1";; test (month_of_int 12 = Dec) "12 = December";; test (not (is_leap_year 1999)) "1999 not leap year";; test (not (is_leap_year 1800)) "1800 not leap year";; test (is_leap_year 1996) "1996 leap year";; test (is_leap_year 1600) "1600 leap year";; test (same_calendar 1956 1900) "same calendar 1956 1900";; test (same_calendar 2001 2013) "same calendar 2001 2013";; test (same_calendar 1998 2009) "same calendar 1998 2009";; test (same_calendar 2003 2025) "same calendar 2003 2025";; test (days_in_year 2000 = 366) "days_in_year 2000";; test (days_in_year 1900 = 365) "days_in_year 1900";; test (days_in_year ~month:Jan 2000 = 31) "days_in_year Jan 2000";; test (days_in_year ~month:Feb 2000 = 60) "days_in_year Feb 2000";; test (days_in_year ~month:Jan 2000 = 31) "days_in_year Jan 2000";; test (days_in_year ~month:Mar 1900 = 90) "days_in_year Mar 1900";; test (weeks_in_year 2000 = 52) "weeks_in_year 2000";; test (weeks_in_year 2020 = 53) "weeks_in_year 2020";; test (weeks_in_year 1991 = 52) "weeks_in_year 1991";; test (weeks_in_year 1999 = 52) "weeks_in_year 1999";; test (century 2000 = 20) "century 2000";; test (century 2001 = 21) "century 2001";; test (millenium 2000 = 2) "millenium 2000";; test (millenium 2001 = 3) "millenium 2001";; test (easter 2003 = make 2003 4 20) "Paques 2003";; test (Period.nb_days (Period.make 0 0 6) = 6) "Period.nb_days ok";; test_exn (lazy (Period.nb_days (Period.make 1 0 0))) "Period.nb_days ko";; test (week_first_last 21 2004 = (make 2004 5 17, make 2004 5 23)) "week_beggining_end";; test (Period.ymd (Period.make 1 2 3) = (1, 2, 3)) "Period.ymd";; test (nth_weekday_of_month 2004 Oct Thu 4 = make 2004 10 28) "nth_weekday_of_month";; test (nth_weekday_of_month 2006 Mar Fri 3 = make 2006 3 17) "nth_weekday_of_month";; test (equal (from_day_of_year 2008 39) (make 2008 2 8)) "from_day_of_year";; test (is_valid_date 2008 2 8) "is_valid_date";; test (not (is_valid_date 2008 2 30)) "not is_valid_date";; (* Unix *) Time_Zone.change Time_Zone.UTC;; test (to_unixfloat (make 1970 1 1) = 0.) "to_unixfloat 1 Jan 1970";; test (from_unixfloat 0. = make 1970 1 1) "from_unixfloat 0.";; test (to_unixfloat (make 2004 11 13) = 1100304000.) "to_unixfloat";; test (from_unixfloat 1100304000. = make 2004 11 13) "from_unixfloat";; test (from_unixtm (to_unixtm (make 2003 7 16)) = make 2003 7 16) "from_unixtm to_unixtm = id";; Time_Zone.change (Time_Zone.UTC_Plus (-1));; test (from_unixfloat 0. = make 1969 12 31) "from_unixfloat 0. (dec-)";; test (from_unixtm { Unix.tm_sec = 0; tm_min = 0; tm_hour = 0; tm_mday = 1; tm_mon = 0; tm_year = 70; tm_wday = 4; tm_yday = 0; tm_isdst = false } = make 1969 12 31) "from_unixtm (dec-)";; Time_Zone.change (Time_Zone.UTC_Plus 1);; test (from_unixfloat 1100390390. = make 2004 11 14) "from_unixfloat (dec+)";; test (from_unixtm { Unix.tm_sec = 0; tm_min = 0; tm_hour = 0; tm_mday = 14; tm_mon = 10; tm_year = 104; tm_wday = 0; tm_yday = 318; tm_isdst = false } = make 2004 11 14) "from_unixtm (dec+)";; test (from_unixtm (to_unixtm (make 2003 7 16)) = make 2003 7 16) "from_unixtm to_unixtm = id";; (* to_business *) test (to_business (make 2003 1 1) = (2003, 1, Wed)) "to_business 1";; test (to_business (make 2003 12 31) = (2004, 1, Wed)) "to_business 2";; test (to_business (make 2002 12 31) = (2003, 1, Tue)) "to_business 3";; test (to_business (make 2005 1 1) = (2004, 53, Sat)) "to_business 4";; test (to_business (make 2004 12 31) = (2004, 53, Fri)) "to_business 5";; test (to_business (make 2006 1 1) = (2005, 52, Sun)) "to_business 6";; test (to_business (make 2005 1 17) = (2005, 3, Mon)) "to_business 7";; test (to_business (make 2006 1 31) = (2006, 5, Tue)) "to_business 8";; test (to_business (make 2005 1 31) = (2005, 5, Mon)) "to_business 9";; (* from_business *) test (from_business 2003 1 Wed = make 2003 1 1) "from_business 1";; test (from_business 2004 1 Wed = make 2003 12 31) "from_business 2";; test (from_business 2003 1 Tue = make 2002 12 31) "from_business 3";; test (from_business 2004 53 Sat = make 2005 1 1) "from_business 4";; test (from_business 2004 53 Fri = make 2004 12 31) "from_business 5";; test (from_business 2005 52 Sun = make 2006 1 1) "from_business 6";; test (from_business 2005 3 Mon = make 2005 1 17) "from_business 7";; test (from_business 2006 5 Tue = make 2006 1 31) "from_business 8";; test (from_business 2005 5 Mon = make 2005 1 31) "from_business 9";; test_exn (lazy (from_business 2005 0 Sun)) "from_business_bad 1";; test_exn (lazy (from_business 2005 53 Sun)) "from_business_bad 2";; let ok = nb_ok ();; let bug = nb_bug ();; Printf.printf "tests ok : %d; tests ko : %d\n" ok bug;; flush stdout;;