]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/algorithm/test/equal_test.cpp
2 Copyright (c) Marshall Clow 2013.
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 For more information, see http://www.boost.org
10 #include <boost/config.hpp>
11 #include <boost/algorithm/cxx14/equal.hpp>
13 #include "iterator_test.hpp"
15 #define BOOST_TEST_MAIN
16 #include <boost/test/unit_test.hpp>
19 bool eq ( const T
& a
, const T
& b
) { return a
== b
; }
22 bool never_eq ( const T
&, const T
& ) { return false; }
24 int comparison_count
= 0;
26 bool counting_equals ( const T
&a
, const T
&b
) {
31 namespace ba
= boost::algorithm
;
35 // Note: The literal values here are tested against directly, careful if you change them:
36 int num
[] = { 1, 1, 2, 3, 5 };
37 const int sz
= sizeof (num
)/sizeof(num
[0]);
40 // Empty sequences are equal to each other, but not to non-empty sequences
41 BOOST_CHECK ( ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
),
42 input_iterator
<int *>(num
), input_iterator
<int *>(num
)));
43 BOOST_CHECK ( ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
),
44 input_iterator
<int *>(num
), input_iterator
<int *>(num
),
46 BOOST_CHECK ( ba::equal ( random_access_iterator
<int *>(num
), random_access_iterator
<int *>(num
),
47 random_access_iterator
<int *>(num
), random_access_iterator
<int *>(num
),
50 BOOST_CHECK (!ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
),
51 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ 1)));
52 BOOST_CHECK (!ba::equal ( input_iterator
<int *>(num
+ 1), input_iterator
<int *>(num
+ 2),
53 input_iterator
<int *>(num
), input_iterator
<int *>(num
)));
54 BOOST_CHECK (!ba::equal ( random_access_iterator
<int *>(num
+ 1), random_access_iterator
<int *>(num
+ 2),
55 random_access_iterator
<int *>(num
), random_access_iterator
<int *>(num
)));
57 // Single element sequences are equal if they contain the same value
58 BOOST_CHECK ( ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ 1),
59 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ 1)));
60 BOOST_CHECK ( ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ 1),
61 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ 1),
63 BOOST_CHECK ( ba::equal ( random_access_iterator
<int *>(num
), random_access_iterator
<int *>(num
+ 1),
64 random_access_iterator
<int *>(num
), random_access_iterator
<int *>(num
+ 1),
66 BOOST_CHECK (!ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ 1),
67 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ 1),
69 BOOST_CHECK (!ba::equal ( random_access_iterator
<int *>(num
), random_access_iterator
<int *>(num
+ 1),
70 random_access_iterator
<int *>(num
), random_access_iterator
<int *>(num
+ 1),
73 BOOST_CHECK ( ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ 1),
74 input_iterator
<int *>(num
+ 1), input_iterator
<int *>(num
+ 2)));
75 BOOST_CHECK ( ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ 1),
76 input_iterator
<int *>(num
+ 1), input_iterator
<int *>(num
+ 2),
79 BOOST_CHECK (!ba::equal ( input_iterator
<int *>(num
+ 2), input_iterator
<int *>(num
+ 3),
80 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ 1)));
81 BOOST_CHECK (!ba::equal ( input_iterator
<int *>(num
+ 2), input_iterator
<int *>(num
+ 3),
82 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ 1),
85 // Identical long sequences are equal.
86 BOOST_CHECK ( ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
),
87 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
)));
88 BOOST_CHECK ( ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
),
89 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
),
91 BOOST_CHECK (!ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
),
92 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
),
94 BOOST_CHECK ( ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
),
95 random_access_iterator
<int *>(num
), random_access_iterator
<int *>(num
+ sz
),
98 // different sequences are different
99 BOOST_CHECK (!ba::equal ( input_iterator
<int *>(num
+ 1), input_iterator
<int *>(num
+ sz
),
100 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
)));
101 BOOST_CHECK (!ba::equal ( input_iterator
<int *>(num
+ 1), input_iterator
<int *>(num
+ sz
),
102 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
),
104 BOOST_CHECK (!ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
),
105 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
- 1)));
106 BOOST_CHECK (!ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
),
107 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
- 1),
110 // When there's a cheap check, bail early
111 comparison_count
= 0;
112 BOOST_CHECK (!ba::equal ( random_access_iterator
<int *>(num
), random_access_iterator
<int *>(num
+ sz
),
113 random_access_iterator
<int *>(num
), random_access_iterator
<int *>(num
+ sz
- 1),
114 counting_equals
<int> ));
115 BOOST_CHECK ( comparison_count
== 0 );
116 // And when there's not, we can't
117 comparison_count
= 0;
118 BOOST_CHECK (!ba::equal ( input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
),
119 input_iterator
<int *>(num
), input_iterator
<int *>(num
+ sz
- 1),
120 counting_equals
<int> ));
121 BOOST_CHECK ( comparison_count
> 0 );
126 BOOST_AUTO_TEST_CASE( test_main
)