/* 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 #include #include #include #include #include #include "../testfrmwk.hpp" #include using namespace boost; using namespace posix_time; using namespace gregorian; template void save_to(archive_type& ar, const temporal_type& tt) { ar << tt; } int main(){ // originals date d(2002, Feb, 14); #if defined(BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG) time_duration td(12,13,52,123456789); #else time_duration td(12,13,52,123456); #endif ptime pt(d, td); time_period tp(pt, ptime(date(2002, Oct, 31), hours(19))); ptime sv_pt1(not_a_date_time); ptime sv_pt2(pos_infin); time_duration sv_td(neg_infin); // for loading in from archive date d2(not_a_date_time); time_duration td2(1,0,0); ptime pt2(d2, td2); time_period tp2(pt2, hours(1)); ptime sv_pt3(min_date_time); ptime sv_pt4(min_date_time); time_duration sv_td2(0,0,0); 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_TIME_XML_SERIALIZE try{ #if defined(DATE_TIME_XML_SERIALIZE) save_to(oa, BOOST_SERIALIZATION_NVP(pt)); save_to(oa, BOOST_SERIALIZATION_NVP(sv_pt1)); save_to(oa, BOOST_SERIALIZATION_NVP(sv_pt2)); save_to(oa, BOOST_SERIALIZATION_NVP(tp)); save_to(oa, BOOST_SERIALIZATION_NVP(td)); save_to(oa, BOOST_SERIALIZATION_NVP(sv_td)); #else save_to(oa, pt); save_to(oa, sv_pt1); save_to(oa, sv_pt2); save_to(oa, tp); save_to(oa, td); save_to(oa, sv_td); #endif // DATE_TIME_XML_SERIALIZE }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 // DATE_TIME_XML_SERIALIZE try{ #if defined(DATE_TIME_XML_SERIALIZE) ia >> BOOST_SERIALIZATION_NVP(pt2); ia >> BOOST_SERIALIZATION_NVP(sv_pt3); ia >> BOOST_SERIALIZATION_NVP(sv_pt4); ia >> BOOST_SERIALIZATION_NVP(tp2); ia >> BOOST_SERIALIZATION_NVP(td2); ia >> BOOST_SERIALIZATION_NVP(sv_td2); #else ia >> pt2; ia >> sv_pt3; ia >> sv_pt4; ia >> tp2; ia >> td2; ia >> sv_td2; #endif // DATE_TIME_XML_SERIALIZE }catch(archive::archive_exception& ae){ std::string s(ae.what()); check("Error readng from archive: " + s + "\nWritten data: \"" + oss.str() + "\"", false); return printTestStats(); } } check("ptime", pt == pt2); check("special_values ptime (nadt)", sv_pt1 == sv_pt3); check("special_values ptime (pos_infin)", sv_pt2 == sv_pt4); check("time_period", tp == tp2); check("time_duration", td == td2); check("special_values time_duration (neg_infin)", sv_td == sv_td2); return printTestStats(); }