blob: a1e6673878950959592822e0dcabaed152a00097 [file] [log] [blame]
// { dg-options "-std=gnu++20" }
// { dg-do run { target c++20 } }
// { dg-require-effective-target hosted }
#include <algorithm>
#include <ranges>
#include <string_view>
#include <testsuite_hooks.h>
// Verify P1739R4 (and LWG 3407) changes to views::take/drop/counted.
namespace ranges = std::ranges;
namespace views = ranges::views;
void
test01()
{
ranges::empty_view<int> v;
using ty = decltype(v);
using ty = decltype(views::take(v, 42));
using ty = decltype(views::drop(v, 42));
}
void
test02()
{
int x[] = {1,2,3,4,5};
std::span r(x, x+5);
using ty = decltype(r);
std::same_as<ty> auto v1 = views::take(r, 2);
VERIFY( ranges::equal(v1, (int[]){1,2}) );
std::same_as<ty> auto v2 = views::drop(r, 3);
VERIFY( ranges::equal(v2, (int[]){4,5}) );
std::same_as<ty> auto v3 = views::counted(r.begin(), 4);
VERIFY( ranges::equal(v3, (int[]){1,2,3,4}) );
}
void
test03()
{
using namespace std::literals;
std::string_view r = "hello world"sv;
using ty = decltype(r);
std::same_as<ty> auto v1 = views::take(r, 5);
VERIFY( ranges::equal(v1, "hello"sv) );
std::same_as<ty> auto v2 = views::drop(r, 6);
VERIFY( ranges::equal(v2, "world"sv) );
}
void
test04()
{
int x[] = {1,2,3,4,5};
ranges::subrange r(x, x+5);
using ty = decltype(r);
std::same_as<ty> auto v1 = views::take(r, 2);
VERIFY( ranges::equal(v1, (int[]){1,2}) );
std::same_as<ty> auto v2 = views::drop(r, 1);
VERIFY( ranges::equal(v2, (int[]){2,3,4,5}) );
}
void
test05()
{
auto r1 = views::iota(1, 6);
using ty1 = decltype(r1);
std::same_as<ty1> auto v1 = views::take(r1, 2);
VERIFY( ranges::equal(v1, (int[]){1,2}) );
std::same_as<ty1> auto v2 = views::drop(r1, 3);
VERIFY( ranges::equal(v2, (int[]){4,5}) );
}
int
main()
{
test01();
test02();
test03();
test04();
test05();
}