]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/variant/test/variant_comparison_test.cpp
156f3f56e677909b7efb1e7bad02d54a5c6eddfb
1 //-----------------------------------------------------------------------------
2 // boost-libs variant/test/variant_comparison_test.cpp source file
3 // See http://www.boost.org for updates, documentation, and revision history.
4 //-----------------------------------------------------------------------------
6 // Copyright (c) 2003 Eric Friedman, Itay Maman
7 // Copyright (c) 2014-2020 Antony Polukhin
9 // Distributed under the Boost Software License, Version 1.0. (See
10 // accompanying file LICENSE_1_0.txt or copy at
11 // http://www.boost.org/LICENSE_1_0.txt)
13 #include "boost/variant/variant.hpp"
14 #include "boost/core/lightweight_test.hpp"
23 #include "boost/detail/workaround.hpp"
24 #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551))
25 # pragma warn -lvc // temporary used for parameter warning
29 void assert_equality_comparable(
30 const T
& x
, const T
& y
, const T
& z
34 BOOST_TEST( !(&x
== &y
) || (x
== y
) );
35 BOOST_TEST( !(&x
== &z
) || (x
== z
) );
36 BOOST_TEST( !(&y
== &z
) || (y
== z
) );
37 BOOST_TEST( !(&x
== &y
) || !(x
!= y
) );
38 BOOST_TEST( !(&x
== &z
) || !(x
!= z
) );
39 BOOST_TEST( !(&y
== &z
) || !(y
!= z
) );
42 BOOST_TEST( (x
== x
) );
43 BOOST_TEST( (y
== y
) );
44 BOOST_TEST( (z
== z
) );
47 BOOST_TEST( !(x
== y
) || (y
== x
) );
48 BOOST_TEST( !(y
== x
) || (x
== y
) );
49 BOOST_TEST( (x
!= y
) || (y
== x
) );
50 BOOST_TEST( (y
!= x
) || (x
== y
) );
52 BOOST_TEST( !(x
== z
) || (z
== x
) );
53 BOOST_TEST( !(z
== x
) || (x
== z
) );
54 BOOST_TEST( (x
!= z
) || (z
== x
) );
55 BOOST_TEST( (z
!= x
) || (x
== z
) );
57 BOOST_TEST( !(y
== z
) || (z
== y
) );
58 BOOST_TEST( !(z
== y
) || (y
== z
) );
59 BOOST_TEST( (y
!= z
) || (z
== y
) );
60 BOOST_TEST( (z
!= y
) || (y
== z
) );
63 BOOST_TEST( !(x
== y
&& y
== z
) || (x
== z
) );
64 BOOST_TEST( !(x
== z
&& z
== y
) || (x
== y
) );
65 BOOST_TEST( !(y
== z
&& z
== x
) || (y
== x
) );
69 void assert_less_than_comparable(
70 const T
& x
, const T
& y
, const T
& z
73 // irreflexivity check
74 BOOST_TEST( !(x
< x
) );
75 BOOST_TEST( !(y
< y
) );
76 BOOST_TEST( !(z
< z
) );
77 BOOST_TEST( !(x
> x
) );
78 BOOST_TEST( !(y
> y
) );
79 BOOST_TEST( !(z
> z
) );
81 BOOST_TEST( (x
<= x
) );
82 BOOST_TEST( (y
<= y
) );
83 BOOST_TEST( (z
<= z
) );
84 BOOST_TEST( (x
>= x
) );
85 BOOST_TEST( (y
>= y
) );
86 BOOST_TEST( (z
>= z
) );
89 BOOST_TEST( (x
< y
) );
90 BOOST_TEST( (y
< z
) );
91 BOOST_TEST( (x
< z
) );
93 BOOST_TEST( (x
<= y
) );
94 BOOST_TEST( (y
<= z
) );
95 BOOST_TEST( (x
<= z
) );
97 BOOST_TEST( (z
> y
) );
98 BOOST_TEST( (y
> x
) );
99 BOOST_TEST( (z
> x
) );
101 BOOST_TEST( (z
>= y
) );
102 BOOST_TEST( (y
>= x
) );
103 BOOST_TEST( (z
>= x
) );
105 // antisymmetry check
106 BOOST_TEST( !(y
< x
) );
107 BOOST_TEST( !(z
< y
) );
108 BOOST_TEST( !(z
< x
) );
111 template <typename It
>
112 std::string
print_range(It first
, It last
)
114 std::ostringstream result
;
116 while (first
!= last
)
118 result
<< *first
<< ' ';
127 typedef boost::variant
<int, std::string
> var_t
;
131 var_t
var3("goodbye");
134 assert_equality_comparable(var1
, var1
, var1
);
135 assert_equality_comparable(var_t(var1
), var_t(var1
), var_t(var1
));
136 assert_equality_comparable(var1
, var2
, var3
);
138 assert_less_than_comparable(var1
, var2
, var3
);
139 assert_less_than_comparable(var2
, var3
, var4
);
141 std::vector
<var_t
> vec
;
142 vec
.push_back( var3
);
143 vec
.push_back( var2
);
144 vec
.push_back( var4
);
145 vec
.push_back( var1
);
146 std::sort(vec
.begin(), vec
.end());
148 std::string
sort_result( print_range(vec
.begin(), vec
.end()) );
149 BOOST_TEST( sort_result
== "3 5 goodbye hello " );
151 // https://svn.boost.org/trac/boost/ticket/11751
154 boost::variant
< int& > v (a
), u (b
);
157 return boost::report_errors();