]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/std/ranges/adaptors/common.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / std / ranges / adaptors / common.cc
CommitLineData
a945c346 1// Copyright (C) 2020-2024 Free Software Foundation, Inc.
cba9ef06
PP
2//
3// This file is part of the GNU ISO C++ Library. This library is free
4// software; you can redistribute it and/or modify it under the
5// terms of the GNU General Public License as published by the
6// Free Software Foundation; either version 3, or (at your option)
7// any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License along
15// with this library; see the file COPYING3. If not see
16// <http://www.gnu.org/licenses/>.
17
d4ac20b0 18// { dg-do run { target c++20 } }
cba9ef06
PP
19
20#include <algorithm>
21#include <ranges>
22#include <testsuite_hooks.h>
23#include <testsuite_iterators.h>
24
25using __gnu_test::test_range;
26using __gnu_test::forward_iterator_wrapper;
27
28namespace ranges = std::ranges;
29namespace views = ranges::views;
30
31void
32test01()
33{
34 int x[] = {1,2,1,3};
35 auto v = x | views::common;
36 VERIFY( std::count(v.begin(), v.end(), 1) == 2);
37 static_assert(ranges::common_range<decltype(v)>);
38 static_assert(ranges::view<decltype(v)>);
39 static_assert(ranges::random_access_range<decltype(v)>);
40 static_assert(std::same_as<decltype(v), decltype(views::common(v))>);
41
42 auto v2 = v | (views::common | views::common);
43 VERIFY( std::count(v2.begin(), v2.end(), 1) == 2);
44}
45
46void
47test02()
48{
49 int x[] = {1,2,1,3};
50 test_range<int, forward_iterator_wrapper> rx(x);
51 auto v = ranges::common_view(rx);
52 VERIFY( std::count(v.begin(), v.end(), 1) == 2);
53 static_assert(ranges::common_range<decltype(v)>);
54 static_assert(ranges::view<decltype(v)>);
55 static_assert(ranges::forward_range<decltype(v)>);
56 static_assert(std::same_as<decltype(v), decltype(views::common(v))>);
57
58 auto v2 = v | (views::common | views::common);
59 VERIFY( std::count(v2.begin(), v2.end(), 1) == 2);
60}
61
a25321ca
PP
62template<auto common = views::common>
63void
64test03()
65{
66 // Verify SFINAE behavior.
67 static_assert(!requires { common(); });
68 static_assert(!requires { common(0, 0); });
69 static_assert(!requires { common(0); });
70 static_assert(!requires { 0 | common; });
71}
72
cba9ef06
PP
73int
74main()
75{
76 test01();
77 test02();
a25321ca 78 test03();
cba9ef06 79}