#include "boost/date_time/wrapping_int.hpp" #include "boost/date_time/testfrmwk.hpp" #include "boost/cstdint.hpp" #include int main() { using namespace boost::date_time; wrapping_int wi(3599); check("construction/conversion", wi == 3599); check("add with wrap", wi.add(1) == 1); check("added value ok", wi == 0); check("add with 2 wraps", wi.add(7201) == 2); check("added value ok", wi == 1); check("add with 3 wraps", wi.add(10800) == 3); check("added value ok", wi == 1); check("subtract no wrap", wi.subtract(1) == 0); check("subtract val ok", wi == 0); check("subtract no wrap", wi.subtract(3601) == 2); check("subtract val ok", wi == 3599); check("add again", (wi.add(2) == 1) && (wi == 1)); check("subtract again", (wi.subtract(2) == 1) && (wi == 3599)); check("add again", (wi.add(2) == 1) && (wi == 1)); check("subtract again", (wi.subtract(3600) == 1) && (wi == 1)); check("subtract again", (wi.subtract(3599) == 1) && (wi == 2)); check("subtract again", (wi.subtract(1) == 0) && (wi == 1)); std::cout << wi << std::endl; wrapping_int wi2(0); check("add with wrap - return", wi2.add(121) == 2); check("add with wrap - value", wi2 == 1); wrapping_int wi3(-5); check("signed int - add return", wi3.add(5) == 0); check("signed int - value", wi3 == 0); wrapping_int2 wi4(1); check("construct", wi4 == 1); check("add up to wrap value", (wi4.add(4) == 0 && wi4 == 5)); check("add over the wrap value", (wi4.add(1) == 1 && wi4 == 1)); check("add over the wrap value X 2", (wi4.add(10) == 2 && wi4 == 1)); check("add over the wrap value X 3", (wi4.add(15) == 3 && wi4 == 1)); wrapping_int2 wi5(12); check("construct", wi5 == 12); check("add over the wrap value", (wi5.add(1) == 1 && wi5 == 1)); //template is broken for min_values other than 1 // wrapping_int2 wi5(2); // check("construct", wi5 == 2); // check("add up to wrap value", (wi5.add(4) == 0 && wi5 == 6)); // check("add over the wrap value", (wi5.add(1) == 1 && wi5 == 2)); // check("add over the wrap value X 2", wi5.add(10) == 2); // check("add over the wrap value X 2", wi5 == 2); // std::cout << wi5 << std::endl; // #ifdef BOOST_HAS_LONG_LONG // wrapping_int wi4(0); // check("construction/conversion", wi4 == 0); // boost::int64_t off2 = 372300000; // boost::int64_t wrap = 86400LL*100000LL; // boost::int64_t wrap2 = 86400000000; // wrapping_int wi5((3600*1 + 60*2 + 3)*100000); // std::cout << wi5 << std::endl; // boost::int64_t over = wi4.add(off2); // std::cout << over << std::endl; // std::cout << wrap << std::endl; // std::cout << wrap2 << std::endl; // // check("construction/conversion", wi4 == 0); // #endif // wrapping_int wi(121); // check("construction/conversion", wi == 121); // check("add with wrap", wi.add(1) == 1); printTestStats(); return 0; };