summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/optional/test/optional_test_ref_converting_ctor.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/optional/test/optional_test_ref_converting_ctor.cpp
parentInitial commit. (diff)
downloadceph-upstream.tar.xz
ceph-upstream.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/optional/test/optional_test_ref_converting_ctor.cpp')
-rw-r--r--src/boost/libs/optional/test/optional_test_ref_converting_ctor.cpp110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/boost/libs/optional/test/optional_test_ref_converting_ctor.cpp b/src/boost/libs/optional/test/optional_test_ref_converting_ctor.cpp
new file mode 100644
index 000000000..e31904b9e
--- /dev/null
+++ b/src/boost/libs/optional/test/optional_test_ref_converting_ctor.cpp
@@ -0,0 +1,110 @@
+// Copyright (C) 2014 Andrzej Krzemienski.
+//
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/lib/optional for documentation.
+//
+// You are welcome to contact the author at: akrzemi1@gmail.com
+
+
+#include "boost/optional/optional.hpp"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+#include "boost/core/addressof.hpp"
+#include "boost/core/enable_if.hpp"
+#include "boost/core/lightweight_test.hpp"
+#include "testable_classes.hpp"
+
+using boost::optional;
+using boost::none;
+
+template <typename T>
+void test_converting_ctor()
+{
+ typename concrete_type_of<T>::type v1(1), v2(2);
+
+ {
+ optional<T&> o1 = v1, o1_ = v1, o2 = v2;
+
+ BOOST_TEST(o1);
+ BOOST_TEST(boost::addressof(*o1) == boost::addressof(v1));
+ BOOST_TEST(o1_);
+ BOOST_TEST(boost::addressof(*o1_) == boost::addressof(v1));
+ BOOST_TEST(boost::addressof(*o1_) == boost::addressof(*o1));
+
+ BOOST_TEST(o2);
+ BOOST_TEST(boost::addressof(*o2) == boost::addressof(v2));
+ BOOST_TEST(boost::addressof(*o2) != boost::addressof(*o1));
+ }
+ {
+ const optional<T&> o1 = v1, o1_ = v1, o2 = v2;
+
+ BOOST_TEST(o1);
+ BOOST_TEST(boost::addressof(*o1) == boost::addressof(v1));
+ BOOST_TEST(o1_);
+ BOOST_TEST(boost::addressof(*o1_) == boost::addressof(v1));
+ BOOST_TEST(boost::addressof(*o1_) == boost::addressof(*o1));
+
+ BOOST_TEST(o2);
+ BOOST_TEST(boost::addressof(*o2) == boost::addressof(v2));
+ BOOST_TEST(boost::addressof(*o2) != boost::addressof(*o1));
+ }
+}
+
+template <typename T>
+void test_converting_ctor_for_noconst_const()
+{
+ typename concrete_type_of<T>::type v1(1), v2(2);
+
+ {
+ optional<const T&> o1 = v1, o1_ = v1, o2 = v2;
+
+ BOOST_TEST(o1);
+ BOOST_TEST(boost::addressof(*o1) == boost::addressof(v1));
+ BOOST_TEST(o1_);
+ BOOST_TEST(boost::addressof(*o1_) == boost::addressof(v1));
+ BOOST_TEST(boost::addressof(*o1_) == boost::addressof(*o1));
+
+ BOOST_TEST(o2);
+ BOOST_TEST(boost::addressof(*o2) == boost::addressof(v2));
+ BOOST_TEST(boost::addressof(*o2) != boost::addressof(*o1));
+ }
+ {
+ const optional<const T&> o1 = v1, o1_ = v1, o2 = v2;
+
+ BOOST_TEST(o1);
+ BOOST_TEST(boost::addressof(*o1) == boost::addressof(v1));
+ BOOST_TEST(o1_);
+ BOOST_TEST(boost::addressof(*o1_) == boost::addressof(v1));
+ BOOST_TEST(boost::addressof(*o1_) == boost::addressof(*o1));
+
+ BOOST_TEST(o2);
+ BOOST_TEST(boost::addressof(*o2) == boost::addressof(v2));
+ BOOST_TEST(boost::addressof(*o2) != boost::addressof(*o1));
+ }
+}
+
+template <typename T>
+void test_all_const_cases()
+{
+ test_converting_ctor<T>();
+#ifndef BOOST_OPTIONAL_CONFIG_NO_PROPER_CONVERT_FROM_CONST_INT
+ test_converting_ctor<const T>();
+#endif
+ test_converting_ctor_for_noconst_const<T>();
+}
+
+int main()
+{
+ test_all_const_cases<int>();
+ test_all_const_cases<ScopeGuard>();
+ test_all_const_cases<Abstract>();
+ test_all_const_cases< optional<int> >();
+
+ return boost::report_errors();
+}