summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/bimap/test/test_mutant.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
commit483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch)
treee5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/boost/libs/bimap/test/test_mutant.cpp
parentInitial commit. (diff)
downloadceph-upstream.tar.xz
ceph-upstream.zip
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/bimap/test/test_mutant.cpp')
-rw-r--r--src/boost/libs/bimap/test/test_mutant.cpp103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/boost/libs/bimap/test/test_mutant.cpp b/src/boost/libs/bimap/test/test_mutant.cpp
new file mode 100644
index 00000000..23ae3dca
--- /dev/null
+++ b/src/boost/libs/bimap/test/test_mutant.cpp
@@ -0,0 +1,103 @@
+// Boost.Bimap
+//
+// Copyright (c) 2006-2007 Matias Capeletto
+//
+// Distributed under 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)
+
+// VC++ 8.0 warns on usage of certain Standard Library and API functions that
+// can be cause buffer overruns or other possible security issues if misused.
+// See https://web.archive.org/web/20071014014301/http://msdn.microsoft.com/msdnmag/issues/05/05/SafeCandC/default.aspx
+// But the wording of the warning is misleading and unsettling, there are no
+// portable alternative functions, and VC++ 8.0's own libraries use the
+// functions in question. So turn off the warnings.
+#define _CRT_SECURE_NO_DEPRECATE
+#define _SCL_SECURE_NO_DEPRECATE
+
+#include <boost/config.hpp>
+
+// Boost.Test
+#include <boost/test/minimal.hpp>
+
+// Boost.MPL
+#include <boost/mpl/list.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+// Boost.Bimap
+#include <boost/bimap/relation/detail/mutant.hpp>
+
+using namespace boost::bimaps::relation::detail;
+
+// The mutant idiom is standard if only POD types are used.
+
+typedef double type_a;
+typedef int type_b;
+
+const type_a value_a = 1.4;
+const type_b value_b = 3;
+
+struct Data
+{
+ type_a a;
+ type_b b;
+};
+
+struct StdPairView
+{
+ typedef type_a first_type;
+ typedef type_b second_type;
+ type_a first;
+ type_b second;
+};
+
+struct ReverseStdPairView
+{
+ typedef type_a second_type;
+ typedef type_b first_type;
+ type_a second;
+ type_b first;
+};
+
+
+struct MutantData
+{
+ typedef boost::mpl::list< StdPairView, ReverseStdPairView > mutant_views;
+
+ MutantData(type_a ap, type_b bp) : a(ap), b(bp) {}
+ type_a a;
+ type_b b;
+};
+
+
+void test_mutant_basic()
+{
+
+ // mutant test
+ {
+ MutantData m(value_a,value_b);
+
+ BOOST_CHECK( sizeof( MutantData ) == sizeof( StdPairView ) );
+
+ BOOST_CHECK( mutate<StdPairView>(m).first == value_a );
+ BOOST_CHECK( mutate<StdPairView>(m).second == value_b );
+ BOOST_CHECK( mutate<ReverseStdPairView>(m).first == value_b );
+ BOOST_CHECK( mutate<ReverseStdPairView>(m).second == value_a );
+
+ ReverseStdPairView & rpair = mutate<ReverseStdPairView>(m);
+ rpair.first = value_b;
+ rpair.second = value_a;
+
+ BOOST_CHECK( mutate<StdPairView>(m).first == value_a );
+ BOOST_CHECK( mutate<StdPairView>(m).second == value_b );
+
+ BOOST_CHECK( &mutate<StdPairView>(m).first == &m.a );
+ BOOST_CHECK( &mutate<StdPairView>(m).second == &m.b );
+ }
+}
+
+int test_main( int, char* [] )
+{
+ test_mutant_basic();
+ return 0;
+}