]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/algorithm/test/ordered_test.cpp
1 // Copyright (c) 2010 Nuovation System Designs, LLC
2 // Grant Erickson <gerickson@nuovations.com>
4 // Reworked by Marshall Clow; August 2010
6 // Distributed under the Boost Software License, Version 1.0. (See
7 // accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
10 // See http://www.boost.org/ for latest version.
15 #include <boost/algorithm/cxx11/is_sorted.hpp>
17 #define BOOST_TEST_MAIN
18 #include <boost/test/unit_test.hpp>
20 using namespace boost
;
22 /* Preprocessor Defines */
24 #define elementsof(v) (sizeof (v) / sizeof (v[0]))
25 #define a_begin(v) (&v[0])
26 #define a_end(v) (v + elementsof (v))
28 #define b_e(v) a_begin(v),a_end(v)
30 namespace ba
= boost::algorithm
;
35 const int strictlyIncreasingValues
[] = { 1, 2, 3, 4, 5 };
36 const int randomValues
[] = { 3, 6, 1, 2, 7 };
37 const int constantValues
[] = { 1, 2, 2, 2, 5 };
38 int nonConstantArray
[] = { 1, 2, 2, 2, 5 };
39 const int inOrderUntilTheEnd
[] = { 0, 1, 2, 3, 4, 5, 6, 7, 6 };
42 BOOST_CHECK ( ba::is_sorted (b_e(strictlyIncreasingValues
)));
43 BOOST_CHECK ( !ba::is_sorted (b_e(randomValues
)));
44 BOOST_CHECK ( ba::is_sorted (b_e(strictlyIncreasingValues
), std::less
<int>()));
45 BOOST_CHECK ( !ba::is_sorted (b_e(strictlyIncreasingValues
), std::greater
<int>()));
48 BOOST_CHECK ( ba::is_sorted (a_range(strictlyIncreasingValues
)));
49 BOOST_CHECK ( !ba::is_sorted (a_range(randomValues
)));
50 BOOST_CHECK ( ba::is_sorted (a_range(strictlyIncreasingValues
), std::less
<int>()));
51 BOOST_CHECK ( !ba::is_sorted (a_range(strictlyIncreasingValues
), std::greater
<int>()));
53 BOOST_CHECK ( ba::is_sorted_until ( b_e(strictlyIncreasingValues
)) == a_end(strictlyIncreasingValues
));
54 BOOST_CHECK ( ba::is_sorted_until ( b_e(strictlyIncreasingValues
), std::less
<int>()) == a_end(strictlyIncreasingValues
));
55 BOOST_CHECK ( ba::is_sorted_until ( a_range(strictlyIncreasingValues
)) == boost::end(strictlyIncreasingValues
));
56 BOOST_CHECK ( ba::is_sorted_until ( a_range(strictlyIncreasingValues
), std::less
<int>()) == boost::end(strictlyIncreasingValues
));
58 // Check for const and non-const arrays
59 BOOST_CHECK ( ba::is_sorted_until ( b_e(constantValues
), std::less
<int>()) == a_end(constantValues
));
60 BOOST_CHECK ( ba::is_sorted_until ( a_range(constantValues
), std::less
<int>()) == boost::end(constantValues
));
61 BOOST_CHECK ( ba::is_sorted_until ( b_e(nonConstantArray
), std::less
<int>()) == a_end(nonConstantArray
));
62 BOOST_CHECK ( ba::is_sorted_until ( a_range(nonConstantArray
), std::less
<int>()) == boost::end(nonConstantArray
));
64 BOOST_CHECK ( ba::is_sorted_until ( b_e(randomValues
), std::less
<int>()) == &randomValues
[2] );
65 BOOST_CHECK ( ba::is_sorted_until ( b_e(randomValues
)) == &randomValues
[2] );
66 BOOST_CHECK ( ba::is_sorted_until ( a_range(randomValues
), std::less
<int>()) == &randomValues
[2] );
67 BOOST_CHECK ( ba::is_sorted_until ( a_range(randomValues
)) == &randomValues
[2] );
69 BOOST_CHECK ( ba::is_sorted_until ( a_range(inOrderUntilTheEnd
), std::less
<int>()) == &inOrderUntilTheEnd
[8] );
70 BOOST_CHECK ( ba::is_sorted_until ( a_range(inOrderUntilTheEnd
)) == &inOrderUntilTheEnd
[8] );
72 // For zero and one element collections, the comparison predicate should never be called
73 BOOST_CHECK ( ba::is_sorted_until ( a_begin(randomValues
), a_begin(randomValues
), std::equal_to
<int>()) == a_begin(randomValues
));
74 BOOST_CHECK ( ba::is_sorted_until ( a_begin(randomValues
), a_begin(randomValues
)) == a_begin(randomValues
));
75 BOOST_CHECK ( ba::is_sorted_until ( a_begin(randomValues
), a_begin(randomValues
) + 1, std::equal_to
<int>()) == a_begin(randomValues
) + 1);
76 BOOST_CHECK ( ba::is_sorted_until ( a_begin(randomValues
), a_begin(randomValues
) + 1 ) == a_begin(randomValues
) + 1);
81 test_increasing_decreasing(void)
83 const int strictlyIncreasingValues
[] = { 1, 2, 3, 4, 5 };
84 const int strictlyDecreasingValues
[] = { 9, 8, 7, 6, 5 };
85 const int increasingValues
[] = { 1, 2, 2, 2, 5 };
86 const int decreasingValues
[] = { 9, 7, 7, 7, 5 };
87 const int randomValues
[] = { 3, 6, 1, 2, 7 };
88 const int constantValues
[] = { 7, 7, 7, 7, 7 };
90 // Test a strictly increasing sequence
91 BOOST_CHECK ( ba::is_strictly_increasing (b_e(strictlyIncreasingValues
)));
92 BOOST_CHECK ( ba::is_increasing (b_e(strictlyIncreasingValues
)));
93 BOOST_CHECK ( !ba::is_strictly_decreasing (b_e(strictlyIncreasingValues
)));
94 BOOST_CHECK ( !ba::is_decreasing (b_e(strictlyIncreasingValues
)));
96 BOOST_CHECK ( ba::is_strictly_increasing (a_range(strictlyIncreasingValues
)));
97 BOOST_CHECK ( ba::is_increasing (a_range(strictlyIncreasingValues
)));
98 BOOST_CHECK ( !ba::is_strictly_decreasing (a_range(strictlyIncreasingValues
)));
99 BOOST_CHECK ( !ba::is_decreasing (a_range(strictlyIncreasingValues
)));
101 // Test a strictly decreasing sequence
102 BOOST_CHECK ( !ba::is_strictly_increasing (b_e(strictlyDecreasingValues
)));
103 BOOST_CHECK ( !ba::is_increasing (b_e(strictlyDecreasingValues
)));
104 BOOST_CHECK ( ba::is_strictly_decreasing (b_e(strictlyDecreasingValues
)));
105 BOOST_CHECK ( ba::is_decreasing (b_e(strictlyDecreasingValues
)));
107 // Test an increasing sequence
108 BOOST_CHECK ( !ba::is_strictly_increasing (b_e(increasingValues
)));
109 BOOST_CHECK ( ba::is_increasing (b_e(increasingValues
)));
110 BOOST_CHECK ( !ba::is_strictly_decreasing (b_e(increasingValues
)));
111 BOOST_CHECK ( !ba::is_decreasing (b_e(increasingValues
)));
113 // Test a decreasing sequence
114 BOOST_CHECK ( !ba::is_strictly_increasing (b_e(decreasingValues
)));
115 BOOST_CHECK ( !ba::is_increasing (b_e(decreasingValues
)));
116 BOOST_CHECK ( !ba::is_strictly_decreasing (b_e(decreasingValues
)));
117 BOOST_CHECK ( ba::is_decreasing (b_e(decreasingValues
)));
119 // Test a random sequence
120 BOOST_CHECK ( !ba::is_strictly_increasing (b_e(randomValues
)));
121 BOOST_CHECK ( !ba::is_increasing (b_e(randomValues
)));
122 BOOST_CHECK ( !ba::is_strictly_decreasing (b_e(randomValues
)));
123 BOOST_CHECK ( !ba::is_decreasing (b_e(randomValues
)));
125 // Test a constant sequence
126 BOOST_CHECK ( !ba::is_strictly_increasing (b_e(constantValues
)));
127 BOOST_CHECK ( ba::is_increasing (b_e(constantValues
)));
128 BOOST_CHECK ( !ba::is_strictly_decreasing (b_e(constantValues
)));
129 BOOST_CHECK ( ba::is_decreasing (b_e(constantValues
)));
131 // Test an empty sequence
132 BOOST_CHECK ( ba::is_strictly_increasing (strictlyIncreasingValues
, strictlyIncreasingValues
));
133 BOOST_CHECK ( ba::is_increasing (strictlyIncreasingValues
, strictlyIncreasingValues
));
134 BOOST_CHECK ( ba::is_strictly_decreasing (strictlyIncreasingValues
, strictlyIncreasingValues
));
135 BOOST_CHECK ( ba::is_decreasing (strictlyIncreasingValues
, strictlyIncreasingValues
));
137 // Test a one-element sequence
138 BOOST_CHECK ( ba::is_strictly_increasing (strictlyIncreasingValues
, strictlyIncreasingValues
+1));
139 BOOST_CHECK ( ba::is_increasing (strictlyIncreasingValues
, strictlyIncreasingValues
+1));
140 BOOST_CHECK ( ba::is_strictly_decreasing (strictlyIncreasingValues
, strictlyIncreasingValues
+1));
141 BOOST_CHECK ( ba::is_decreasing (strictlyIncreasingValues
, strictlyIncreasingValues
+1));
143 // Test a two-element sequence
144 BOOST_CHECK ( ba::is_strictly_increasing (strictlyIncreasingValues
, strictlyIncreasingValues
+2));
145 BOOST_CHECK ( ba::is_increasing (strictlyIncreasingValues
, strictlyIncreasingValues
+2));
146 BOOST_CHECK ( !ba::is_strictly_decreasing (strictlyIncreasingValues
, strictlyIncreasingValues
+2));
147 BOOST_CHECK ( !ba::is_decreasing (strictlyIncreasingValues
, strictlyIncreasingValues
+2));
151 BOOST_AUTO_TEST_CASE( test_main
)
154 test_increasing_decreasing ();