//===----------------------------------------------------------------------===// // // 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. // //===----------------------------------------------------------------------===// // // template // pair // minmax(initializer_list t, Compare comp); // // Complexity: At most (3/2) * t.size() applications of the corresponding predicate. #include #include #include #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 il) { binary_counting_predicate pred (all_equal); std::pair 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()) == std::pair(3, 1))); assert((std::minmax({1, 3, 2}, std::greater()) == std::pair(3, 1))); assert((std::minmax({2, 1, 3}, std::greater()) == std::pair(3, 1))); assert((std::minmax({2, 3, 1}, std::greater()) == std::pair(3, 1))); assert((std::minmax({3, 1, 2}, std::greater()) == std::pair(3, 1))); assert((std::minmax({3, 2, 1}, std::greater()) == std::pair(3, 1))); assert((std::minmax({1, 2, 3}, all_equal ) == std::pair(1, 3))); binary_counting_predicate, int, int> pred ((std::greater())); assert((std::minmax({1, 2, 2, 3, 3, 3, 5, 5, 5, 5, 5, 3}, std::ref(pred)) == std::pair(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()) == std::pair(3, 1)), ""); static_assert((std::minmax({1, 3, 2}, std::greater()) == std::pair(3, 1)), ""); static_assert((std::minmax({2, 1, 3}, std::greater()) == std::pair(3, 1)), ""); static_assert((std::minmax({2, 3, 1}, std::greater()) == std::pair(3, 1)), ""); static_assert((std::minmax({3, 1, 2}, std::greater()) == std::pair(3, 1)), ""); static_assert((std::minmax({3, 2, 1}, std::greater()) == std::pair(3, 1)), ""); } #endif #endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS }