diff options
Diffstat (limited to 'src/boost/libs/chrono/test/test_7868.cpp')
-rw-r--r-- | src/boost/libs/chrono/test/test_7868.cpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/boost/libs/chrono/test/test_7868.cpp b/src/boost/libs/chrono/test/test_7868.cpp new file mode 100644 index 000000000..38f658b8c --- /dev/null +++ b/src/boost/libs/chrono/test/test_7868.cpp @@ -0,0 +1,81 @@ +// Copyright 2013 Vicente J. Botet Escriba +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt +// See http://www.boost.org/libs/chrono for documentation. + +#define BOOST_CHRONO_VERSION 2 +//#define BOOST_CHRONO_PROVIDES_DATE_IO_FOR_SYSTEM_CLOCK_TIME_POINT 1 + +#include <sstream> +#include <iostream> +#include <boost/chrono/chrono_io.hpp> +#include <boost/chrono/floor.hpp> +#include <boost/chrono/round.hpp> +#include <boost/chrono/ceil.hpp> +#include <boost/detail/lightweight_test.hpp> +#include <cstdio> + +int main() +{ + using namespace boost; + using namespace boost::chrono; + boost::chrono::system_clock::time_point atnow= boost::chrono::system_clock::now(); + { + std::stringstream strm; + std::stringstream strm2; + // does not change anything: strm<<time_fmt(boost::chrono::timezone::utc); + // does not change anything: strm2<<time_fmt(boost::chrono::timezone::utc); + boost::chrono::system_clock::time_point atnow2; + strm<<atnow<<std::endl; + time_t t = boost::chrono::system_clock::to_time_t(atnow); + std::cout << "A:" << std::endl; + std::puts(ctime(&t)); + std::cout << "A:" << std::endl; + std::cout << "A:" << strm.str()<< std::endl; + std::cout << "A:" << atnow.time_since_epoch().count() << std::endl; + strm>>atnow2; + strm2<<atnow2<<std::endl; + std::cout << "B:" << strm2.str()<< std::endl; + std::cout << "B:" << atnow2.time_since_epoch().count()<< std::endl; + BOOST_TEST_EQ(atnow.time_since_epoch().count(), atnow2.time_since_epoch().count()); + + // 1 sec wrong: + std::cout << "diff:" << boost::chrono::duration_cast<microseconds>(atnow2 - atnow).count() <<std::endl; + BOOST_TEST_EQ(boost::chrono::duration_cast<microseconds>(atnow2 - atnow).count(), 0); + std::stringstream formatted; + formatted << time_fmt(boost::chrono::timezone::utc, "%Y-%m-%d %H:%M:%S"); + formatted << "actual:"<< atnow <<std::endl; + formatted << "parsed:"<< atnow2 <<std::endl; + std::cout << formatted.str(); + std::stringstream formatted1; + formatted1 << time_fmt(boost::chrono::timezone::utc, "%Y-%m-%d %H:%M:%S"); + formatted1 << atnow ; + std::stringstream formatted2; + formatted2 << time_fmt(boost::chrono::timezone::utc, "%Y-%m-%d %H:%M:%S"); + formatted2 << atnow2 ; + BOOST_TEST_EQ(formatted1.str(), formatted2.str()); + + + } + + { + std::cout << "FORMATTED" << std::endl; + std::stringstream strm; + std::stringstream strm2; + boost::chrono::system_clock::time_point atnow2; + // the final second mark is always parsed as 01 + strm<<time_fmt(boost::chrono::timezone::utc, "%Y-%m-%d %H:%M:%S"); + strm2<<time_fmt(boost::chrono::timezone::utc, "%Y-%m-%d %H:%M:%S"); + strm<<atnow<<std::endl; + std::cout << "actual:" << strm.str()<< std::endl; + strm>>atnow2; + strm2<<atnow2<<std::endl; + // the final second mark is always parsed as 01 + std::cout << "parsed:" << strm2.str()<< std::endl; + //BOOST_TEST_EQ(atnow, atnow2); // fails because the pattern doesn't contains nanoseconds + //BOOST_TEST_EQ(atnow.time_since_epoch().count(), atnow2.time_since_epoch().count()); // fails because the pattern doesn't contains nanoseconds + BOOST_TEST_EQ(boost::chrono::duration_cast<seconds>(atnow2 - atnow).count(), 0); + + } + return boost::report_errors(); +} |