testgreg_cal.cpp 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /* Copyright (c) 2002,2003 CrystalClear Software, Inc.
  2. * Use, modification and distribution is subject to the
  3. * Boost Software License, Version 1.0. (See accompanying
  4. * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
  5. * Author: Jeff Garland
  6. */
  7. #include "boost/date_time/gregorian/greg_calendar.hpp"
  8. #include "../testfrmwk.hpp"
  9. #include <iostream>
  10. void
  11. test_greg_calendar()
  12. {
  13. using namespace boost::gregorian;
  14. check("Day of week 2000-09-24 == 0 (Sun)",
  15. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(2000,9,24))==0);
  16. check("Day of week 2000-09-25 == 1 (Mon)",
  17. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(2000,9,25))==1);
  18. check("Day of week 2000-09-26 == 2 (Tue)",
  19. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(2000,9,26))==2);
  20. check("Day of week 2000-09-27 == 3 (Wed)",
  21. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(2000,9,27))==3);
  22. check("Day of week 2000-09-28 == 4 (Thu)",
  23. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(2000,9,28))==4);
  24. check("Day of week 2000-09-29 == 5 (Fri)",
  25. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(2000,9,29))==5);
  26. check("Day of week 2000-09-30 == 6 (Sat)", gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(2000,9,30))==6);
  27. //see calendar FAQ 2.2 for reference
  28. check("Day of week 1953-08-02 == 0 (Sun)", gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1953,8,2))==0);
  29. check("Day of week 1953-08-03 == 1 (Mon)", gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1953,8,3))==1);
  30. check("Day of week 1953-08-04 == 2 (Tue)", gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1953,8,4))==2);
  31. check("Day of week 1953-08-05 == 3 (Wed)", gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1953,8,5))==3);
  32. check("Day of week 1953-08-06 == 4 (Thu)", gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1953,8,6))==4);
  33. check("Day of week 1953-08-07 == 5 (Fri)", gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1953,8,7))==5);
  34. check("Day of week 1953-08-08 == 6 (Sat)", gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1953,8,8))==6);
  35. check("Day of week 2001-08-31 == 5 (Fri)", gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(2001,8,31))==5);
  36. //Checked against Caledrical Calc M. Edition p 396 and www site
  37. check("Day of week 1400-01-01 == 3 (Wed)",
  38. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1400,1,1))==3);
  39. check("Day of week 1436-02-03 == 3 (Wed)",
  40. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1436,2,3))==3);
  41. check("Day of week 1492-04-9 == 6 (Sat)",
  42. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1492,4,9))==6);
  43. check("Day of week 1560-03-5 == 6 (Sat)",
  44. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1560,3,5))==6);
  45. check("Day of week 1716-07-24 == 5 (Fri)",
  46. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1716,7,24))==5);
  47. check("Day of week 1768-06-19 == 0 (Sun)",
  48. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1768,6,19))==0);
  49. check("Day of week 1839-03-27 == 3 (Wed)",
  50. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1839,3,27))==3);
  51. check("Day of week 1819-08-02 == 1 (Mon)",
  52. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1819,8,2))==1);
  53. check("Day of week 1903-04-19 == 0 (Sun)",
  54. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1903,4,19))==0);
  55. check("Day of week 1929-08-25 == 0 (Sun)",
  56. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(1929,8,25))==0);
  57. check("Day of week 2038-11-10 == 3 (Wed)",
  58. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(2038,11,10))==3);
  59. check("Day of week 2094-07-18 == 0 (Sun)",
  60. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(2094,7,18))==0);
  61. //verified against website applet
  62. check("Day of week 3002-07-10 == 6 (Sat)",
  63. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(3002,7,10))==6);
  64. //verified against website applet
  65. check("Day of week 4002-07-10 == 3 (Wed)",
  66. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(4002,7,10))==3);
  67. //verified against website applet
  68. check("Day of week 5002-07-10 == 6 (Sat)",
  69. gregorian_calendar::day_of_week(gregorian_calendar::ymd_type(5002,7,10))==6);
  70. check("1404 is a leap year", gregorian_calendar::is_leap_year(1404));
  71. check("2000 is a leap year", gregorian_calendar::is_leap_year(2000));
  72. check("2004 is a leap year", gregorian_calendar::is_leap_year(2004));
  73. check("2400 is a leap year", gregorian_calendar::is_leap_year(2400));
  74. check("4000 is a leap year", gregorian_calendar::is_leap_year(4000));
  75. check("1400 is NOT a leap year", !gregorian_calendar::is_leap_year(1400));
  76. check("1900 is NOT a leap year", !gregorian_calendar::is_leap_year(1900));
  77. check("2100 is NOT a leap year", !gregorian_calendar::is_leap_year(2100));
  78. check("1999 is NOT a leap year", !gregorian_calendar::is_leap_year(1999));
  79. check("5000 is NOT a leap year", !gregorian_calendar::is_leap_year(5000));
  80. unsigned long jday1 = gregorian_calendar::day_number(gregorian_calendar::ymd_type(2000,1,1));
  81. unsigned long jday2 = gregorian_calendar::day_number(gregorian_calendar::ymd_type(2001,1,1));
  82. // unsigned short year, month, day;
  83. // //2451545 is 2000-1-1
  84. check("ToDayNumber 2000-1-1 is day 2451545", jday1 == 2451545);
  85. check("ToDayNumber 2001-1-1 is day 2451911", jday2 == 2451911);
  86. gregorian_calendar::ymd_type ymd = gregorian_calendar::from_day_number(jday1);
  87. check("from_day_number test 2000-1-1", (ymd.year==2000)&&
  88. (ymd.month==1) &&
  89. (ymd.day==1) );
  90. unsigned long jday3 = gregorian_calendar::day_number(gregorian_calendar::ymd_type(1999,1,1));
  91. check("366 days between 2000-1-1 and 2001-1-1", (jday2-jday1) == 366);
  92. check("731 days between 1999-1-1 and 2001-1-1 ",(jday2-jday3) == 731);
  93. unsigned long jday4 = gregorian_calendar::day_number(gregorian_calendar::ymd_type(2000,2,28));
  94. unsigned long jday5 = gregorian_calendar::day_number(gregorian_calendar::ymd_type(2000,3,1));
  95. check("2 days between 2000-2-28 and 2000-3-1 ",(jday5-jday4) == 2);
  96. check("31 days in month Jan 2000", gregorian_calendar::end_of_month_day(2000,1) == 31);
  97. check("29 days in month Feb 2000", gregorian_calendar::end_of_month_day(2000,2) == 29);
  98. check("28 days in month Feb 1999", gregorian_calendar::end_of_month_day(1999,2) == 28);
  99. check("28 days in month Feb 2001", gregorian_calendar::end_of_month_day(2001,2) == 28);
  100. check("31 days in month Mar 2000", gregorian_calendar::end_of_month_day(2000,3) == 31);
  101. check("30 days in month Apr 2000", gregorian_calendar::end_of_month_day(2000,4) == 30);
  102. check("31 days in month May 2000", gregorian_calendar::end_of_month_day(2000,5) == 31);
  103. check("30 days in month Jun 2000", gregorian_calendar::end_of_month_day(2000,6) == 30);
  104. check("31 days in month Jul 2000", gregorian_calendar::end_of_month_day(2000,7) == 31);
  105. check("31 days in month Aug 2000", gregorian_calendar::end_of_month_day(2000,8) == 31);
  106. check("30 days in month Sep 2000", gregorian_calendar::end_of_month_day(2000,9) == 30);
  107. check("31 days in month Oct 2000", gregorian_calendar::end_of_month_day(2000,10) == 31);
  108. check("30 days in month Nov 2000", gregorian_calendar::end_of_month_day(2000,11) == 30);
  109. check("31 days in month Dec 2000", gregorian_calendar::end_of_month_day(2000,12) == 31);
  110. // unsigned long jday0 = date_limits<>::dayNumber(gregorian_calendar::ymd_type(1900,1,1));
  111. // std::cout << "Day 0: " << jday0 << std::endl;
  112. std::cout << gregorian_calendar::epoch().year << std::endl;
  113. }
  114. int
  115. main()
  116. {
  117. test_greg_calendar();
  118. return printTestStats();
  119. }