4a238482e8
[SVN r49932]
177 lines
7.4 KiB
C++
177 lines
7.4 KiB
C++
/* 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 <iostream>
|
|
#include <string>
|
|
#include <sstream>
|
|
|
|
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();
|
|
|
|
}
|
|
|