testgreg_serialize.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. /* Copyright (c) 2002-2005 CrystalClear Software, Inc.
  2. * Use, modification and distribution is subject to the
  3. * Boost Software License, Version 1.0. (See accompanying
  4. * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
  5. * Author: Jeff Garland, Bart Garst
  6. */
  7. #include <boost/archive/text_oarchive.hpp>
  8. #include <boost/archive/text_iarchive.hpp>
  9. #include <boost/archive/xml_oarchive.hpp>
  10. #include <boost/archive/xml_iarchive.hpp>
  11. #include <boost/date_time/gregorian/gregorian.hpp>
  12. #include <boost/date_time/gregorian/greg_serialize.hpp>
  13. #include "../testfrmwk.hpp"
  14. #include <sstream>
  15. using namespace boost;
  16. using namespace gregorian;
  17. template<class archive_type, class temporal_type>
  18. void save_to(archive_type& ar, const temporal_type& tt)
  19. {
  20. ar << tt;
  21. }
  22. int main(){
  23. date d(2002,Feb,12);
  24. date sv_d1(not_a_date_time);
  25. date sv_d2(pos_infin);
  26. date_duration dd(11);
  27. date_duration sv_dd(neg_infin);
  28. date_period dp(d,dd);
  29. greg_year gy(1959);
  30. greg_month gm(Feb);
  31. greg_day gd(14);
  32. greg_weekday gwd(Friday);
  33. partial_date pd(26,Jul);
  34. nth_kday_of_month nkd(nth_kday_of_month::second,Tuesday,Mar);
  35. first_kday_of_month fkd(Saturday,Apr);
  36. last_kday_of_month lkd(Saturday,Apr);
  37. first_kday_before fkdb(Thursday);
  38. first_kday_after fkda(Thursday);
  39. std::ostringstream oss;
  40. {
  41. // NOTE: DATE_TIME_XML_SERIALIZE is only used in testing and is
  42. // defined in the testing Jamfile
  43. #if defined(DATE_TIME_XML_SERIALIZE)
  44. std::cout << "Running xml archive tests" << std::endl;
  45. archive::xml_oarchive oa(oss);
  46. #else
  47. std::cout << "Running text archive tests" << std::endl;
  48. archive::text_oarchive oa(oss);
  49. #endif
  50. // load up the archive
  51. try{
  52. #if defined(DATE_TIME_XML_SERIALIZE)
  53. save_to(oa, BOOST_SERIALIZATION_NVP(d));
  54. save_to(oa, BOOST_SERIALIZATION_NVP(sv_d1));
  55. save_to(oa, BOOST_SERIALIZATION_NVP(sv_d2));
  56. save_to(oa, BOOST_SERIALIZATION_NVP(dd));
  57. save_to(oa, BOOST_SERIALIZATION_NVP(sv_dd));
  58. save_to(oa, BOOST_SERIALIZATION_NVP(dp));
  59. save_to(oa, BOOST_SERIALIZATION_NVP(gy));
  60. save_to(oa, BOOST_SERIALIZATION_NVP(gm));
  61. save_to(oa, BOOST_SERIALIZATION_NVP(gd));
  62. save_to(oa, BOOST_SERIALIZATION_NVP(gwd));
  63. save_to(oa, BOOST_SERIALIZATION_NVP(pd));
  64. save_to(oa, BOOST_SERIALIZATION_NVP(nkd));
  65. save_to(oa, BOOST_SERIALIZATION_NVP(fkd));
  66. save_to(oa, BOOST_SERIALIZATION_NVP(lkd));
  67. save_to(oa, BOOST_SERIALIZATION_NVP(fkdb));
  68. save_to(oa, BOOST_SERIALIZATION_NVP(fkda));
  69. #else
  70. save_to(oa, d);
  71. save_to(oa, sv_d1);
  72. save_to(oa, sv_d2);
  73. save_to(oa, dd);
  74. save_to(oa, sv_dd);
  75. save_to(oa, dp);
  76. save_to(oa, gy);
  77. save_to(oa, gm);
  78. save_to(oa, gd);
  79. save_to(oa, gwd);
  80. save_to(oa, pd);
  81. save_to(oa, nkd);
  82. save_to(oa, fkd);
  83. save_to(oa, lkd);
  84. save_to(oa, fkdb);
  85. save_to(oa, fkda);
  86. #endif
  87. }catch(archive::archive_exception& ae){
  88. std::string s(ae.what());
  89. check("Error writing to archive: " + s + "\nWritten data: \"" + oss.str() + "\"", false);
  90. return printTestStats();
  91. }
  92. }
  93. // read from the archive
  94. date d2(not_a_date_time);
  95. date sv_d3(min_date_time);
  96. date sv_d4(min_date_time);
  97. date_duration dd2(not_a_date_time);
  98. date_duration sv_dd2(0);
  99. date_period dp2(date(2000,Jan,1),date_duration(1));
  100. greg_year gy2(1960);
  101. greg_month gm2(Jan);
  102. greg_day gd2(1);
  103. greg_weekday gwd2(Monday);
  104. partial_date pd2(1);
  105. nth_kday_of_month nkd2(nth_kday_of_month::first,Monday,Jan);
  106. first_kday_of_month fkd2(Monday,Jan);
  107. last_kday_of_month lkd2(Monday,Jan);
  108. first_kday_before fkdb2(Monday);
  109. first_kday_after fkda2(Monday);
  110. {
  111. std::istringstream iss(oss.str());
  112. #if defined(DATE_TIME_XML_SERIALIZE)
  113. archive::xml_iarchive ia(iss);
  114. #else
  115. archive::text_iarchive ia(iss);
  116. #endif
  117. try{
  118. #if defined(DATE_TIME_XML_SERIALIZE)
  119. ia >> BOOST_SERIALIZATION_NVP(d2);
  120. ia >> BOOST_SERIALIZATION_NVP(sv_d3);
  121. ia >> BOOST_SERIALIZATION_NVP(sv_d4);
  122. ia >> BOOST_SERIALIZATION_NVP(dd2);
  123. ia >> BOOST_SERIALIZATION_NVP(sv_dd2);
  124. ia >> BOOST_SERIALIZATION_NVP(dp2);
  125. ia >> BOOST_SERIALIZATION_NVP(gy2);
  126. ia >> BOOST_SERIALIZATION_NVP(gm2);
  127. ia >> BOOST_SERIALIZATION_NVP(gd2);
  128. ia >> BOOST_SERIALIZATION_NVP(gwd2);
  129. ia >> BOOST_SERIALIZATION_NVP(pd2);
  130. ia >> BOOST_SERIALIZATION_NVP(nkd2);
  131. ia >> BOOST_SERIALIZATION_NVP(fkd2);
  132. ia >> BOOST_SERIALIZATION_NVP(lkd2);
  133. ia >> BOOST_SERIALIZATION_NVP(fkdb2);
  134. ia >> BOOST_SERIALIZATION_NVP(fkda2);
  135. #else
  136. ia >> d2;
  137. ia >> sv_d3;
  138. ia >> sv_d4;
  139. ia >> dd2;
  140. ia >> sv_dd2;
  141. ia >> dp2;
  142. ia >> gy2;
  143. ia >> gm2;
  144. ia >> gd2;
  145. ia >> gwd2;
  146. ia >> pd2;
  147. ia >> nkd2;
  148. ia >> fkd2;
  149. ia >> lkd2;
  150. ia >> fkdb2;
  151. ia >> fkda2;
  152. #endif
  153. }catch(archive::archive_exception& ae){
  154. std::string s(ae.what());
  155. check("Error reading from archive: " + s + "\nWritten data: \"" + oss.str() + "\"", false);
  156. return printTestStats();
  157. }
  158. }
  159. check("date", d == d2);
  160. check("special_value date (nadt)", sv_d1 == sv_d3);
  161. check("special_value date (pos_infin)", sv_d2 == sv_d4);
  162. check("date_duration", dd == dd2);
  163. check("special_value date_duration (neg_infin)", sv_dd == sv_dd2);
  164. check("date_period", dp == dp2);
  165. check("greg_year", gy == gy2);
  166. check("greg_month", gm == gm2);
  167. check("greg_day", gd == gd2);
  168. check("greg_weekday", gwd == gwd2);
  169. check("date_generator: partial_date", pd == pd2);
  170. check("date_generator: nth_kday_of_month", nkd.get_date(2002) == nkd2.get_date(2002)); // no operator== for nth_kday_of_week - yet
  171. check("date_generator: first_kday_of_month", fkd.get_date(2002) == fkd2.get_date(2002)); // no operator== for first_kday_of_week - yet
  172. check("date_generator: last_kday_of_month", lkd.get_date(2002) == lkd2.get_date(2002)); // no operator== for last_kday_of_week - yet
  173. check("date_generator: first_kday_before", fkdb.get_date(d) == fkdb2.get_date(d)); // no operator== for first_kday_before - yet
  174. check("date_generator: first_kday_after", fkda.get_date(d) == fkda2.get_date(d)); // no operator== for first_kday_after - yet
  175. return printTestStats();
  176. }