| /* Copyright (c) 2002-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/archive/text_oarchive.hpp> |
| #include <boost/archive/text_iarchive.hpp> |
| #include <boost/archive/xml_oarchive.hpp> |
| #include <boost/archive/xml_iarchive.hpp> |
| |
| #include <boost/date_time/gregorian/gregorian.hpp> |
| #include <boost/date_time/gregorian/greg_serialize.hpp> |
| #include "../testfrmwk.hpp" |
| #include <sstream> |
| |
| using namespace boost; |
| using namespace gregorian; |
| |
| template<class archive_type, class temporal_type> |
| void save_to(archive_type& ar, const temporal_type& tt) |
| { |
| ar << tt; |
| } |
| |
| int main(){ |
| std::ostringstream oss; |
| |
| // NOTE: DATE_TIME_XML_SERIALIZE is only used in testing and is |
| // defined in the testing Jamfile |
| #if defined(DATE_TIME_XML_SERIALIZE) |
| std::cout << "Running xml archive tests" << std::endl; |
| archive::xml_oarchive oa(oss); |
| #else |
| std::cout << "Running text archive tests" << std::endl; |
| archive::text_oarchive oa(oss); |
| #endif |
| |
| date d(2002,Feb,12); |
| date sv_d1(not_a_date_time); |
| date sv_d2(pos_infin); |
| date_duration dd(11); |
| date_duration sv_dd(neg_infin); |
| date_period dp(d,dd); |
| greg_month gm(Feb); |
| greg_day gd(14); |
| greg_weekday gwd(Friday); |
| partial_date pd(26,Jul); |
| nth_kday_of_month nkd(nth_kday_of_month::second,Tuesday,Mar); |
| first_kday_of_month fkd(Saturday,Apr); |
| last_kday_of_month lkd(Saturday,Apr); |
| first_kday_before fkdb(Thursday); |
| first_kday_after fkda(Thursday); |
| |
| // load up the archive |
| try{ |
| #if defined(DATE_TIME_XML_SERIALIZE) |
| save_to(oa, BOOST_SERIALIZATION_NVP(d)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(sv_d1)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(sv_d2)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(dd)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(sv_dd)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(dp)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(gm)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(gd)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(gwd)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(pd)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(nkd)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(fkd)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(lkd)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(fkdb)); |
| save_to(oa, BOOST_SERIALIZATION_NVP(fkda)); |
| #else |
| save_to(oa, d); |
| save_to(oa, sv_d1); |
| save_to(oa, sv_d2); |
| save_to(oa, dd); |
| save_to(oa, sv_dd); |
| save_to(oa, dp); |
| save_to(oa, gm); |
| save_to(oa, gd); |
| save_to(oa, gwd); |
| save_to(oa, pd); |
| save_to(oa, nkd); |
| save_to(oa, fkd); |
| save_to(oa, lkd); |
| save_to(oa, fkdb); |
| save_to(oa, fkda); |
| #endif |
| }catch(archive::archive_exception& ae){ |
| std::string s(ae.what()); |
| check("Error writing to archive: " + s + "\nWritten data: \"" + oss.str() + "\"", false); |
| return printTestStats(); |
| } |
| |
| std::istringstream iss(oss.str()); |
| #if defined(DATE_TIME_XML_SERIALIZE) |
| archive::xml_iarchive ia(iss); |
| #else |
| archive::text_iarchive ia(iss); |
| #endif |
| |
| // read from the archive |
| date d2(not_a_date_time); |
| date sv_d3(min_date_time); |
| date sv_d4(min_date_time); |
| date_duration dd2(not_a_date_time); |
| date_duration sv_dd2(0); |
| date_period dp2(date(2000,Jan,1),date_duration(1)); |
| greg_month gm2(Jan); |
| greg_day gd2(1); |
| greg_weekday gwd2(Monday); |
| partial_date pd2(1); |
| nth_kday_of_month nkd2(nth_kday_of_month::first,Monday,Jan); |
| first_kday_of_month fkd2(Monday,Jan); |
| last_kday_of_month lkd2(Monday,Jan); |
| first_kday_before fkdb2(Monday); |
| first_kday_after fkda2(Monday); |
| |
| try{ |
| #if defined(DATE_TIME_XML_SERIALIZE) |
| ia >> BOOST_SERIALIZATION_NVP(d2); |
| ia >> BOOST_SERIALIZATION_NVP(sv_d3); |
| ia >> BOOST_SERIALIZATION_NVP(sv_d4); |
| ia >> BOOST_SERIALIZATION_NVP(dd2); |
| ia >> BOOST_SERIALIZATION_NVP(sv_dd2); |
| ia >> BOOST_SERIALIZATION_NVP(dp2); |
| ia >> BOOST_SERIALIZATION_NVP(gm2); |
| ia >> BOOST_SERIALIZATION_NVP(gd2); |
| ia >> BOOST_SERIALIZATION_NVP(gwd2); |
| ia >> BOOST_SERIALIZATION_NVP(pd2); |
| ia >> BOOST_SERIALIZATION_NVP(nkd2); |
| ia >> BOOST_SERIALIZATION_NVP(fkd2); |
| ia >> BOOST_SERIALIZATION_NVP(lkd2); |
| ia >> BOOST_SERIALIZATION_NVP(fkdb2); |
| ia >> BOOST_SERIALIZATION_NVP(fkda2); |
| #else |
| ia >> d2; |
| ia >> sv_d3; |
| ia >> sv_d4; |
| ia >> dd2; |
| ia >> sv_dd2; |
| ia >> dp2; |
| ia >> gm2; |
| ia >> gd2; |
| ia >> gwd2; |
| ia >> pd2; |
| ia >> nkd2; |
| ia >> fkd2; |
| ia >> lkd2; |
| ia >> fkdb2; |
| ia >> fkda2; |
| #endif |
| }catch(archive::archive_exception& ae){ |
| std::string s(ae.what()); |
| check("Error reading from archive: " + s + "\nWritten data: \"" + oss.str() + "\"", false); |
| return printTestStats(); |
| } |
| |
| check("date", d == d2); |
| check("special_value date (nadt)", sv_d1 == sv_d3); |
| check("special_value date (pos_infin)", sv_d2 == sv_d4); |
| check("date_duration", dd == dd2); |
| check("special_value date_duration (neg_infin)", sv_dd == sv_dd2); |
| check("date_period", dp == dp2); |
| check("greg_month", gm == gm2); |
| check("greg_day", gd == gd2); |
| check("greg_weekday", gwd == gwd2); |
| check("date_generator: partial_date", pd == pd2); |
| check("date_generator: nth_kday_of_month", nkd.get_date(2002) == nkd2.get_date(2002)); // no operator== for nth_kday_of_week - yet |
| check("date_generator: first_kday_of_month", fkd.get_date(2002) == fkd2.get_date(2002)); // no operator== for first_kday_of_week - yet |
| check("date_generator: last_kday_of_month", lkd.get_date(2002) == lkd2.get_date(2002)); // no operator== for last_kday_of_week - yet |
| check("date_generator: first_kday_before", fkdb.get_date(d) == fkdb2.get_date(d)); // no operator== for first_kday_before - yet |
| check("date_generator: first_kday_after", fkda.get_date(d) == fkda2.get_date(d)); // no operator== for first_kday_after - yet |
| |
| return printTestStats(); |
| } |