summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/date_time/test/posix_time/testc_local_adjustor.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
commit19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch)
tree42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/boost/libs/date_time/test/posix_time/testc_local_adjustor.cpp
parentInitial commit. (diff)
downloadceph-6d07fdb6bb33b1af39833b850bb6cf8af79fe293.tar.xz
ceph-6d07fdb6bb33b1af39833b850bb6cf8af79fe293.zip
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/date_time/test/posix_time/testc_local_adjustor.cpp')
-rw-r--r--src/boost/libs/date_time/test/posix_time/testc_local_adjustor.cpp131
1 files changed, 131 insertions, 0 deletions
diff --git a/src/boost/libs/date_time/test/posix_time/testc_local_adjustor.cpp b/src/boost/libs/date_time/test/posix_time/testc_local_adjustor.cpp
new file mode 100644
index 000000000..d9947a6eb
--- /dev/null
+++ b/src/boost/libs/date_time/test/posix_time/testc_local_adjustor.cpp
@@ -0,0 +1,131 @@
+/* Copyright (c) 2002,2003 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
+ */
+
+#include <stdexcept>
+#include "boost/date_time/posix_time/posix_time.hpp"
+#include "boost/date_time/c_local_time_adjustor.hpp"
+#include "../testfrmwk.hpp"
+
+int
+main()
+{
+ using namespace boost::posix_time;
+ using namespace boost::gregorian;
+
+ //These are a compile check / test. They have to be hand inspected
+ //b/c they depend on the TZ settings of the machine and hence it is
+ //unclear what the results will be
+ typedef boost::date_time::c_local_adjustor<ptime> local_adj;
+
+ bool btd1e = false;
+ bool btd2e = false;
+ bool btd3e = false;
+ time_duration td1;
+ time_duration td2;
+ time_duration td3;
+
+ try
+ {
+ ptime t1(date(2002,Jan,1), hours(7)+millisec(5));
+ std::cout << "UTC <--> TZ Setting of Machine -- No DST" << std::endl;
+ ptime t2 = local_adj::utc_to_local(t1);
+ std::cout << t2 << " LOCAL is "
+ << t1 << " UTC time "
+ << std::endl;
+ td1 = t2 - t1;
+ std::cout << "A difference of: " << td1
+ << std::endl;
+ }
+ catch (std::runtime_error & re)
+ {
+ btd1e = true;
+ check(re.what(), false);
+ }
+
+ try
+ {
+ ptime t3(date(2002,May,1), hours(5)+millisec(5));
+ std::cout << "UTC <--> TZ Setting of Machine -- In DST" << std::endl;
+ ptime t4 = local_adj::utc_to_local(t3);
+ std::cout << t4 << " LOCAL is "
+ << t3 << " UTC time "
+ << std::endl;
+ td2 = t4 - t3;
+ std::cout << "A difference of: " << td2
+ << std::endl;
+ }
+ catch (std::runtime_error & re)
+ {
+ btd2e = true;
+ check(re.what(), false);
+ }
+
+ try
+ {
+ ptime t5(date(2040,May,1), hours(5)+millisec(5));
+ std::cout << "UTC <--> TZ Setting of Machine -- In DST" << std::endl;
+ ptime t6 = local_adj::utc_to_local(t5);
+ std::cout << t6 << " LOCAL is "
+ << t5 << " UTC time "
+ << std::endl;
+ td3 = t6 - t5;
+ std::cout << "a difference of: " << td3
+ << std::endl;
+ }
+ catch (std::runtime_error & re)
+ {
+ btd3e = true;
+ check(re.what(), false);
+ }
+ catch (std::bad_cast&)
+ {
+ btd3e = true;
+ check("32-bit time_t overflow detected", sizeof(std::time_t) < 8);
+ }
+
+ // The following tests are unaware of the local time zone, but they
+ // should help spot some errors. Manual inspection could still be
+ // required.
+
+ // Based on http://stackoverflow.com/questions/8131023
+ // All time zones are between -12 and +14
+ if (!btd1e)
+ {
+ check("td1 isn't too low", td1 >= hours(-12));
+ check("td1 isn't too high", td1 <= hours(14));
+ }
+ if (!btd2e)
+ {
+ check("td2 isn't too low", td2 >= hours(-12));
+ check("td2 isn't too high", td2 <= hours(14));
+ }
+ if (!btd3e)
+ {
+ check("td3 isn't too low", td3 >= hours(-12));
+ check("td3 isn't too high", td3 <= hours(14));
+ }
+
+ // Assuming that no one uses DST of more than an hour.
+ if (!btd1e && !btd2e)
+ {
+ check("td1 and td2 are close",
+ td1 - td2 <= hours(1) && td2 - td1 <= hours(1));
+ }
+ if (!btd2e && !btd3e)
+ {
+ check("td2 and td3 are close",
+ td2 - td3 <= hours(2) && td3 - td2 <= hours(2));
+ }
+ if (!btd1e && !btd3e)
+ {
+ check("td1 and td3 are close",
+ td1 - td3 <= hours(1) && td3 - td1 <= hours(1));
+ }
+
+ return printTestStats();
+}
+