aboutsummaryrefslogtreecommitdiff
path: root/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp')
-rw-r--r--test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp b/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp
new file mode 100644
index 000000000000..a66b2ff27cb0
--- /dev/null
+++ b/test/std/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp
@@ -0,0 +1,77 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <algorithm>
+
+// template<class T, class Compare>
+// pair<T, T>
+// minmax(initializer_list<T> t, Compare comp);
+//
+// Complexity: At most (3/2) * t.size() applications of the corresponding predicate.
+
+#include <algorithm>
+#include <functional>
+#include <cassert>
+
+#include "counting_predicates.hpp"
+
+bool all_equal(int a, int b) { return false; } // everything is equal
+
+#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
+void test_all_equal(std::initializer_list<int> il)
+{
+ binary_counting_predicate<bool(*)(int, int), int, int> pred (all_equal);
+ std::pair<int, int> p = std::minmax(il, std::ref(pred));
+ const int *ptr = il.end();
+ assert(p.first == *il.begin());
+ assert(p.second == *--ptr);
+ assert(pred.count() <= ((3 * il.size()) / 2));
+}
+#endif
+
+int main()
+{
+#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
+ assert((std::minmax({1, 2, 3}, std::greater<int>()) == std::pair<int, int>(3, 1)));
+ assert((std::minmax({1, 3, 2}, std::greater<int>()) == std::pair<int, int>(3, 1)));
+ assert((std::minmax({2, 1, 3}, std::greater<int>()) == std::pair<int, int>(3, 1)));
+ assert((std::minmax({2, 3, 1}, std::greater<int>()) == std::pair<int, int>(3, 1)));
+ assert((std::minmax({3, 1, 2}, std::greater<int>()) == std::pair<int, int>(3, 1)));
+ assert((std::minmax({3, 2, 1}, std::greater<int>()) == std::pair<int, int>(3, 1)));
+ assert((std::minmax({1, 2, 3}, all_equal ) == std::pair<int, int>(1, 3)));
+
+ binary_counting_predicate<std::greater<int>, int, int> pred ((std::greater<int>()));
+ assert((std::minmax({1, 2, 2, 3, 3, 3, 5, 5, 5, 5, 5, 3}, std::ref(pred)) == std::pair<int, int>(5, 1)));
+ assert(pred.count() <= 18); // size == 12
+
+ test_all_equal({0});
+ test_all_equal({0,1});
+ test_all_equal({0,1,2});
+ test_all_equal({0,1,2,3});
+ test_all_equal({0,1,2,3,4});
+ test_all_equal({0,1,2,3,4,5});
+ test_all_equal({0,1,2,3,4,5,6});
+ test_all_equal({0,1,2,3,4,5,6,7});
+ test_all_equal({0,1,2,3,4,5,6,7,8});
+ test_all_equal({0,1,2,3,4,5,6,7,8,9});
+ test_all_equal({0,1,2,3,4,5,6,7,8,9,10});
+ test_all_equal({0,1,2,3,4,5,6,7,8,9,10,11});
+
+#if _LIBCPP_STD_VER > 11
+ {
+ static_assert((std::minmax({1, 2, 3}, std::greater<int>()) == std::pair<int, int>(3, 1)), "");
+ static_assert((std::minmax({1, 3, 2}, std::greater<int>()) == std::pair<int, int>(3, 1)), "");
+ static_assert((std::minmax({2, 1, 3}, std::greater<int>()) == std::pair<int, int>(3, 1)), "");
+ static_assert((std::minmax({2, 3, 1}, std::greater<int>()) == std::pair<int, int>(3, 1)), "");
+ static_assert((std::minmax({3, 1, 2}, std::greater<int>()) == std::pair<int, int>(3, 1)), "");
+ static_assert((std::minmax({3, 2, 1}, std::greater<int>()) == std::pair<int, int>(3, 1)), "");
+ }
+#endif
+#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
+}