blob: 0bc4ed463d0fd939cb725ef41a9081584dedd4f0 [file] [log] [blame]
// { dg-do compile { target c++26 } }
#include <algorithm>
#include <array>
#include <functional>
#include <utility>
// returns a pair [array, index of partitioning point]
constexpr auto
create_array()
{
return std::make_pair(
std::to_array({0, 2, 2, 2, 4, 6, 1, 2, 3, 3, 4, 4, 5}),
6);
}
constexpr bool
test01()
{
auto [ar, index] = create_array();
std::inplace_merge(ar.begin(), ar.begin() + index, ar.end());
return std::is_sorted(ar.begin(), ar.end());
}
static_assert(test01());
constexpr bool
test02()
{
auto [ar, index] = create_array();
auto index_it = ar.begin() + index;
std::reverse(ar.begin(), index_it);
std::reverse(index_it, ar.end());
std::inplace_merge(ar.begin(), index_it, ar.end(), std::greater<>());
return std::is_sorted(ar.begin(), ar.end(), std::greater<>());
}
static_assert(test02());
constexpr bool
test03()
{
auto [ar, index] = create_array();
std::ranges::inplace_merge(ar, ar.begin() + index);
return std::ranges::is_sorted(ar);
}
static_assert(test03());
constexpr bool
test04()
{
auto [ar, index] = create_array();
auto index_it = ar.begin() + index;
std::ranges::reverse(ar.begin(), index_it);
std::ranges::reverse(index_it, ar.end());
std::ranges::inplace_merge(ar, index_it, std::ranges::greater());
return std::ranges::is_sorted(ar, std::ranges::greater());
}
static_assert(test04());
constexpr bool
test05()
{
auto [ar, index] = create_array();
auto proj = [](int i) { return -i; };
std::ranges::inplace_merge(ar, ar.begin() + index, std::ranges::greater(), proj);
return std::ranges::is_sorted(ar, std::ranges::greater(), proj);
}
static_assert(test05());