| /* Copyright (c) 2003-2004 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: Bart Garst |
| * $Date: 2008-11-26 16:07:14 -0500 (Wed, 26 Nov 2008) $ |
| */ |
| #include <iostream> |
| #include <sstream> |
| #include <boost/date_time/gregorian/gregorian.hpp> |
| #include "../testfrmwk.hpp" |
| |
| using namespace boost::gregorian; |
| |
| int main(){ |
| #if defined(BOOST_NO_STD_WSTRING) || \ |
| defined(BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS) |
| check("No wstring/wstream support for this compiler", false); |
| #else |
| std::wstring res, ws; |
| std::wstringstream wss; |
| /* date_period is used because almost all the date-type objects |
| * that have the operator<< can be easily accessed from it. |
| * Those are: date, greg_month, greg_day_of_week, |
| * date_period, date_duration (also date_generators) */ |
| date_period dp(date(2003,Aug,21), date(2004,May,27)); |
| |
| |
| // date |
| wss << dp.begin(); |
| res = L"2003-Aug-21"; |
| check("date operator<<", wss.str() == res); |
| wss.str(L""); |
| ws = to_simple_wstring(dp.begin()); |
| check("date to_simple_string", ws == res); |
| ws = to_iso_wstring(dp.begin()); |
| res = L"20030821"; |
| check("date to_iso_string", ws == res); |
| ws = to_iso_extended_wstring(dp.begin()); |
| res = L"2003-08-21"; |
| check("date to_iso_extended_string", ws == res); |
| ws = to_sql_wstring(dp.begin()); |
| check("date to_sql_string", ws == res); |
| wss.str(L""); |
| #ifndef BOOST_NO_STD_ITERATOR_TRAITS |
| { |
| res = L"2003-Aug-21"; |
| std::wstringstream wss(L"2003-Aug-21"); |
| date testdate(not_a_date_time); |
| wss >> testdate; |
| check("date operator>>", to_simple_wstring(testdate) == res); |
| } |
| #else |
| check("no date operator>> for this compiler", false); |
| #endif |
| |
| // greg_month |
| wss << dp.begin().month(); |
| res = L"08"; |
| check("greg_month", wss.str() == res); |
| wss.str(L""); |
| ws = dp.begin().month().as_short_wstring(); |
| res = L"Aug"; |
| check("greg_month as_short_wstring", ws == res); |
| ws = dp.begin().month().as_long_wstring(); |
| res = L"August"; |
| check("greg_month as_long_wstring", ws == res); |
| /*{ |
| std::wstringstream wss(L"August"); |
| greg_month testmonth(not_a_date_time); |
| wss >> testmonth; |
| check("greg_month operator>>", to_simple_wstring(testmonth) == res); |
| }*/ |
| |
| // greg_day_of_week |
| wss << dp.begin().day_of_week(); |
| res = L"Thu"; |
| check("greg_day_of_week", wss.str() == res); |
| wss.str(L""); |
| ws = dp.begin().day_of_week().as_short_wstring(); |
| check("greg_day_of_week as_short_wstring", ws == res); |
| ws = dp.begin().day_of_week().as_long_wstring(); |
| res = L"Thursday"; |
| check("greg_day_of_week as_long_wstring", ws == res); |
| /*{ |
| std::wstringstream wss(L"Thu"); |
| greg_day_of_week testday(not_a_date_time); |
| wss >> testday; |
| check("greg_day_of_week operator>>", to_simple_wstring(testday) == res); |
| }*/ |
| |
| // date_period |
| wss << dp; |
| res = L"[2003-Aug-21/2004-May-26]"; |
| check("date_period", wss.str() == res); |
| wss.str(L""); |
| ws = to_simple_wstring(dp); |
| check("date_period to_simple_string", ws == res); |
| res = L"20030821/20040526"; |
| ws = to_iso_wstring(dp); |
| check("date_period to_iso_string", ws == res); |
| { |
| std::wstringstream wss(L"[2003-Aug-21/2004-May-27]"); |
| res = L"[2003-Aug-21/2004-May-26]"; |
| // following line gives an ambiguous overload of op>> |
| //date_period testperiod(date(not_a_date_time),date_duration(not_a_date_time)); |
| date_period testperiod(date(2003,Aug,21), date(2004,May,27)); |
| wss >> testperiod; |
| check("date_period operator>>", to_simple_wstring(testperiod) == res); |
| } |
| |
| // date_duration |
| wss << dp.length(); |
| res = L"280"; |
| check("date_duration", wss.str() == res); |
| wss.str(L""); |
| { |
| std::wstringstream wss(L"280"); |
| date_duration testduration(not_a_date_time); |
| wss >> testduration; |
| check("date_duration operator>>", testduration.days() == 280); |
| } |
| |
| // special values |
| date sv_d(neg_infin); |
| date_duration sv_dd(pos_infin); |
| //date_period sv_dp(sv_d,sv_dd); |
| // sv-date |
| wss << sv_d; |
| res = L"-infinity"; |
| check("date operator<< special value", wss.str() == res); |
| wss.str(L""); |
| ws = to_simple_wstring(sv_d); |
| check("date to_simple_string special value", ws == res); |
| // sv-date_duration |
| wss << sv_dd; |
| res = L"+infinity"; |
| check("date_duration operator<< special value", wss.str() == res); |
| wss.str(L""); |
| // sv-date_period |
| /* |
| * works - just gives unexpected results: |
| *[-infinity/not-a-date-time] |
| wss << sv_dp; |
| res = L"[2003-Aug-21/2004-May-26]"; |
| check("date_period", wss.str() == res); |
| std::wcout << wss.str() << std::endl; |
| wss.str(L""); |
| */ |
| |
| // date_generators |
| first_day_of_the_week_after fka(Monday); |
| wss << fka; |
| res = L"Mon after"; |
| check("first_kday_after", wss.str() == res); |
| wss.str(L""); |
| |
| first_day_of_the_week_before fkb(Monday); |
| wss << fkb; |
| res = L"Mon before"; |
| check("first_kday_before", wss.str() == res); |
| wss.str(L""); |
| |
| first_day_of_the_week_in_month fkom(Monday,Jan); |
| wss << fkom; |
| res = L"first Mon of Jan"; |
| check("first_kday_of_month", wss.str() == res); |
| wss.str(L""); |
| |
| last_day_of_the_week_in_month lkom(Monday,Jan); |
| wss << lkom; |
| res = L"last Mon of Jan"; |
| check("last_kday_of_month", wss.str() == res); |
| wss.str(L""); |
| |
| #endif |
| return printTestStats(); |
| } |