summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/chrono/test/test_7868.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/chrono/test/test_7868.cpp')
-rw-r--r--src/boost/libs/chrono/test/test_7868.cpp81
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();
+}