/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc. * Use, modification and distribution is subject to the * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst */ #include "boost/date_time/gregorian/gregorian.hpp" #include "../testfrmwk.hpp" #include #include #include int main() { using namespace boost::gregorian; partial_date pd1(1,Jan); date d = pd1.get_date(2000); check("Partial date to_string()", pd1.to_string() == std::string("0")); check("Partial date getdate", date(2000,1,1) == d); d = pd1.get_date(2001); check("Partial date getdate", date(2001,1,1) == d); partial_date pd2(1,Feb); check("Partial date to_string()", pd2.to_string() == std::string("31")); check("Partial date operator==", pd1 == pd1); check("Partial date operator==", !(pd1 == pd2)); check("Partial date operator==", !(pd2 == pd1)); check("Partial date operator<", !(pd1 < pd1)); check("Partial date operator<", pd1 < pd2); check("Partial date operator<", !(pd2 < pd1)); typedef last_day_of_the_week_in_month lastkday; //Find last Sunday in Feb lastkday lsif(Sunday, Feb); std::cout << to_simple_string(lsif.get_date(2002)) << std::endl; //24th check("Last kday", date(2002,Feb,24) == lsif.get_date(2002)); check("Last kday to_string()", lsif.to_string() == std::string("M2.5.0")); lastkday ltif(Thursday, Feb); check("Last kday", date(2002,Feb,28) == ltif.get_date(2002)); check("Last kday to_string()", ltif.to_string() == std::string("M2.5.4")); lastkday lfif(Friday, Feb); check("Last kday", date(2002,Feb,22) == lfif.get_date(2002)); check("Last kday to_string()", lfif.to_string() == std::string("M2.5.5")); typedef first_day_of_the_week_in_month firstkday; firstkday fsif(Sunday, Feb); std::cout << to_simple_string(fsif.get_date(2002)) << std::endl; //24th check("First kday", date(2002,Feb,3) == fsif.get_date(2002)); check("First kday to_string()", fsif.to_string() == std::string("M2.1.0")); firstkday ftif(Thursday, Feb); check("First kday", date(2002,Feb,7) == ftif.get_date(2002)); check("First kday to_string()", ftif.to_string() == std::string("M2.1.4")); firstkday ffif(Friday, Feb); check("First kday", date(2002,Feb,1) == ffif.get_date(2002)); check("First kday to_string()", ffif.to_string() == std::string("M2.1.5")); typedef first_day_of_the_week_after firstkdayafter; firstkdayafter fkaf(Monday); std::cout << to_simple_string(fkaf.get_date(date(2002,Feb,1))) << std::endl; //feb 4 check("kday after",date(2002,Feb,4) == fkaf.get_date(date(2002,Feb,1))); firstkdayafter fkaf2(Thursday); check("kday after",date(2002,Feb,7) == fkaf2.get_date(date(2002,Feb,1))); check("kday after",date(2002,Feb,28)== fkaf2.get_date(date(2002,Feb,21))); typedef first_day_of_the_week_before firstkdaybefore; firstkdaybefore fkbf(Monday); std::cout << to_simple_string(fkaf.get_date(date(2002,Feb,10))) << std::endl; //feb 4 check("kday before",date(2002,Feb,4) == fkbf.get_date(date(2002,Feb,10))); firstkdaybefore fkbf2(Thursday); check("kday before",date(2002,Jan,31) == fkbf2.get_date(date(2002,Feb,1))); check("kday before",date(2002,Feb,7)== fkbf2.get_date(date(2002,Feb,14))); typedef nth_day_of_the_week_in_month nthkdayofmonth; nthkdayofmonth nkd1(nthkdayofmonth::third, Sunday, Jul); check("nth_kday 1", date(1969, Jul, 20) == nkd1.get_date(1969)); check("Nth kday to_string()", nkd1.to_string() == std::string("M7.3.0")); nthkdayofmonth nkd2(nthkdayofmonth::second, Monday, Dec); check("nth_kday 2", date(1980, Dec, 8) == nkd2.get_date(1980)); check("Nth kday to_string()", nkd2.to_string() == std::string("M12.2.1")); nthkdayofmonth nkd3(nthkdayofmonth::fifth, Wednesday, Jan); check("nth_kday fifth wed jan 2003 2003-Jan-29", date(2003, Jan, 29) == nkd3.get_date(2003)); check("Nth kday to_string()", nkd3.to_string() == std::string("M1.5.3")); nthkdayofmonth nkd4(nthkdayofmonth::fifth, Monday, Jan); check("nth_kday fifth mon jan 2003 (actaully 4th) 2003-Jan-27", date(2003, Jan, 27) == nkd4.get_date(2003)); check("Nth kday to_string()", nkd4.to_string() == std::string("M1.5.1")); // greg date_generator functions tests { date sunday(2003,Feb,2),tuesday(2003,Feb,4); date friday(2003,Feb,7),saturday(2003,Feb,8); greg_weekday sat(Saturday), tue(Tuesday), fri(Friday), sund(Sunday); check("Days until weekday" , days_until_weekday(saturday, sund) == days(1)); check("Days until weekday" , days_until_weekday(friday, tue) == days(4)); check("Days until weekday" , days_until_weekday(tuesday, fri) == days(3)); check("Days until weekday" , days_until_weekday(sunday, sat) == days(6)); check("Days until weekday" , days_until_weekday(sunday, sund) == days(0)); check("Days until weekday" , days_until_weekday(tuesday, tue) == days(0)); check("Days before weekday" , days_before_weekday(saturday, sund) == days(6)); check("Days before weekday" , days_before_weekday(friday, tue) == days(3)); check("Days before weekday" , days_before_weekday(tuesday, fri) == days(4)); check("Days before weekday" , days_before_weekday(sunday, sat) == days(1)); check("Days before weekday" , days_before_weekday(sunday, sund) == days(0)); check("Days before weekday" , days_before_weekday(tuesday, tue) == days(0)); check("Date of next weekday", next_weekday(saturday, sund)== date(2003,Feb,9)); check("Date of next weekday", next_weekday(friday, tue) == date(2003,Feb,11)); check("Date of next weekday", next_weekday(tuesday, fri) == date(2003,Feb,7)); check("Date of next weekday", next_weekday(sunday, sat) == date(2003,Feb,8)); check("Date of next weekday", next_weekday(sunday, sund) == sunday); check("Date of next weekday", next_weekday(tuesday, tue) == tuesday); check("Date of previous weekday", previous_weekday(saturday, sund)== date(2003,Feb,2)); check("Date of previous weekday", previous_weekday(friday, tue) == date(2003,Feb,4)); check("Date of previous weekday", previous_weekday(tuesday, fri) == date(2003,Jan,31)); check("Date of previous weekday", previous_weekday(sunday, sat) == date(2003,Feb,1)); check("Date of previous weekday", previous_weekday(sunday, sund) == sunday); check("Date of previous weekday", previous_weekday(tuesday, tue) == tuesday); } #ifndef BOOST_DATE_TIME_NO_LOCALE #if !defined(USE_DATE_TIME_PRE_1_33_FACET_IO) //TODO: this is temporary condition -- don't force a failure... // check("no streaming implemented for new facet", false); #else // streaming tests... std::stringstream ss(""); std::string s(""); ss.str(""); ss << pd1; s = "01 Jan"; check("streaming partial_date", ss.str() == s); std::cout << ss.str() << std::endl; ss.str(""); ss << lsif; s = "last Sun of Feb"; check("streaming last_kday_of_month", ss.str() == s); ss.str(""); ss << fsif; s = "first Sun of Feb"; check("streaming first_kday_of_month", ss.str() == s); ss.str(""); ss << fkaf; s = "Mon after"; check("streaming first_kday_after", ss.str() == s); ss.str(""); ss << fkbf; s = "Mon before"; check("streaming first_kday_before", ss.str() == s); ss.str(""); ss << nkd1; s = "third Sun of Jul"; check("streaming nth_kday", ss.str() == s); #endif // USE_DATE_TIME_PRE_1_33_FACET_IO #endif // NO_LOCAL return printTestStats(); }