gcc/libstdc++-v3/testsuite/std/ranges/range.cc

95 lines
4 KiB
C++
Raw Normal View History

2024-01-03 12:19:35 +01:00
// Copyright (C) 2019-2024 Free Software Foundation, Inc.
Partial implementation of C++20 of <ranges> header * doc/doxygen/user.cfg.in: Add new header. * include/Makefile.am: Add new header. * include/Makefile.in: Regenerate. * include/precompiled/stdc++.h: Include new header. * include/std/ranges: New header. (ranges::sentinel_t, ranges::range_value_t, ranges::range_reference_t) (ranges::range_rvalue_reference_t, ranges::sized_range) (ranges::output_range, ranges::input_ranges, ranges::forward_range) (ranges::bidirectional_range, ranges::random_access_range) (ranges::contiguous_range, ranges::common::range): Define. * testsuite/24_iterators/headers/iterator/synopsis_c++20.cc: Check that disabled_sized_sentinel can be specialized. * testsuite/std/ranges/access/begin.cc: Include <ranges> instead of <iterator>. * testsuite/std/ranges/access/cbegin.cc: Likewise. * testsuite/std/ranges/access/cdata.cc: Likewise. * testsuite/std/ranges/access/cend.cc: Likewise. * testsuite/std/ranges/access/crbegin.cc: Likewise. * testsuite/std/ranges/access/crend.cc: Likewise. * testsuite/std/ranges/access/data.cc: Likewise. * testsuite/std/ranges/access/empty.cc: Likewise. * testsuite/std/ranges/access/end.cc: Likewise. * testsuite/std/ranges/access/end_neg.cc: Likewise. * testsuite/std/ranges/access/rbegin.cc: Likewise. * testsuite/std/ranges/access/rend.cc: Likewise. * testsuite/std/ranges/access/size.cc: Likewise. * testsuite/std/ranges/access/size_neg.cc: Likewise. * testsuite/std/ranges/headers/ranges/synopsis.cc: New test. * testsuite/std/ranges/range.cc: New test. * testsuite/std/ranges/refinements.cc: New test. * testsuite/std/ranges/sized.cc: New test. * testsuite/util/testsuite_iterators.h: Add aliases for range types. (output_iterator_wrapper::WritableObject::operator=): Add const qualifier so that output_iterator_wrapper satisfies writable. From-SVN: r277697
2019-10-31 21:42:18 +00:00
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
libstdc++: Remove dg-options "-std=gnu++20" from <concepts> and <ranges> tests The testsuite will automatically select C++20 for these tests now, and removing the hardcoded -std option allows them to be tested for C++23 and C++26 as well. libstdc++-v3/ChangeLog: * testsuite/std/concepts/1.cc: Remove dg-options. * testsuite/std/concepts/2.cc: Likewise. * testsuite/std/concepts/concepts.callable/invocable.cc: Likewise. * testsuite/std/concepts/concepts.callable/regular_invocable.cc: Likewise. * testsuite/std/concepts/concepts.callable/relation.cc: Likewise. * testsuite/std/concepts/concepts.callable/strictweakorder.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.arithmetic/floating_point.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.arithmetic/integral.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.arithmetic/signed_integral.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.arithmetic/unsigned_integral.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.assignable/1.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.common/1.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.commonref/1.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.constructible/1.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.convertible/1.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.copyconstructible/1.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.defaultinitializable/1.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.defaultinitializable/lwg3149.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.derived/1.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.destructible/1.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.moveconstructible/1.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.same/1.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.swappable/swap.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.swappable/swappable.cc: Likewise. * testsuite/std/concepts/concepts.lang/concept.swappable/swappable_with.cc: Likewise. * testsuite/std/concepts/concepts.object/copyable.cc: Likewise. * testsuite/std/concepts/concepts.object/movable.cc: Likewise. * testsuite/std/concepts/concepts.object/regular.cc: Likewise. * testsuite/std/concepts/concepts.object/semiregular.cc: Likewise. * testsuite/std/ranges/97600.cc: Likewise. * testsuite/std/ranges/access/101782.cc: Likewise. * testsuite/std/ranges/access/begin.cc: Likewise. * testsuite/std/ranges/access/begin_neg.cc: Likewise. * testsuite/std/ranges/access/cbegin.cc: Likewise. * testsuite/std/ranges/access/cdata.cc: Likewise. * testsuite/std/ranges/access/cend.cc: Likewise. * testsuite/std/ranges/access/crbegin.cc: Likewise. * testsuite/std/ranges/access/crend.cc: Likewise. * testsuite/std/ranges/access/data.cc: Likewise. * testsuite/std/ranges/access/empty.cc: Likewise. * testsuite/std/ranges/access/end.cc: Likewise. * testsuite/std/ranges/access/end_neg.cc: Likewise. * testsuite/std/ranges/access/lwg3467.cc: Likewise. * testsuite/std/ranges/access/p2602.cc: Likewise. * testsuite/std/ranges/access/rbegin.cc: Likewise. * testsuite/std/ranges/access/rend.cc: Likewise. * testsuite/std/ranges/access/size.cc: Likewise. * testsuite/std/ranges/access/size_neg.cc: Likewise. * testsuite/std/ranges/access/ssize.cc: Likewise. * testsuite/std/ranges/adaptors/100479.cc: Likewise. * testsuite/std/ranges/adaptors/100577.cc: Likewise. * testsuite/std/ranges/adaptors/93978.cc: Likewise. * testsuite/std/ranges/adaptors/95322.cc: Likewise. * testsuite/std/ranges/adaptors/99433.cc: Likewise. * testsuite/std/ranges/adaptors/all.cc: Likewise. * testsuite/std/ranges/adaptors/common.cc: Likewise. * testsuite/std/ranges/adaptors/conditionally_borrowed.cc: Likewise. * testsuite/std/ranges/adaptors/counted.cc: Likewise. * testsuite/std/ranges/adaptors/detail/copyable_box.cc: Likewise. * testsuite/std/ranges/adaptors/drop.cc: Likewise. * testsuite/std/ranges/adaptors/drop_while.cc: Likewise. * testsuite/std/ranges/adaptors/elements.cc: Likewise. * testsuite/std/ranges/adaptors/filter.cc: Likewise. * testsuite/std/ranges/adaptors/join.cc: Likewise. * testsuite/std/ranges/adaptors/lazy_split.cc: Likewise. * testsuite/std/ranges/adaptors/lazy_split_neg.cc: Likewise. * testsuite/std/ranges/adaptors/lwg3286.cc: Likewise. * testsuite/std/ranges/adaptors/lwg3313_neg.cc: Likewise. * testsuite/std/ranges/adaptors/lwg3325_neg.cc: Likewise. * testsuite/std/ranges/adaptors/lwg3406.cc: Likewise. * testsuite/std/ranges/adaptors/p1739.cc: Likewise. * testsuite/std/ranges/adaptors/p2281.cc: Likewise. * testsuite/std/ranges/adaptors/p2770r0.cc: Likewise. * testsuite/std/ranges/adaptors/reverse.cc: Likewise. * testsuite/std/ranges/adaptors/sizeof.cc: Likewise. * testsuite/std/ranges/adaptors/split.cc: Likewise. * testsuite/std/ranges/adaptors/take.cc: Likewise. * testsuite/std/ranges/adaptors/take_while.cc: Likewise. * testsuite/std/ranges/adaptors/transform.cc: Likewise. * testsuite/std/ranges/empty_view.cc: Likewise. * testsuite/std/ranges/headers/ranges/synopsis.cc: Likewise. * testsuite/std/ranges/iota/difference_type.cc: Likewise. * testsuite/std/ranges/iota/iota_view.cc: Likewise. * testsuite/std/ranges/iota/iterator.cc: Likewise. * testsuite/std/ranges/iota/lwg3292_neg.cc: Likewise. * testsuite/std/ranges/iota/max_size_type.cc: Likewise. * testsuite/std/ranges/istream_view.cc: Likewise. * testsuite/std/ranges/p2259.cc: Likewise. * testsuite/std/ranges/p2325.cc: Likewise. * testsuite/std/ranges/p2367.cc: Likewise. * testsuite/std/ranges/range.cc: Likewise. * testsuite/std/ranges/refinements.cc: Likewise. * testsuite/std/ranges/safe_range.cc: Likewise. * testsuite/std/ranges/safe_range_types.cc: Likewise. * testsuite/std/ranges/single_view.cc: Likewise. * testsuite/std/ranges/sized.cc: Likewise. * testsuite/std/ranges/subrange/1.cc: Likewise. * testsuite/std/ranges/subrange/97512.cc: Likewise. * testsuite/std/ranges/subrange/constexpr.cc: Likewise. * testsuite/std/ranges/subrange/lwg3282_neg.cc: Likewise. * testsuite/std/ranges/subrange/lwg3286.cc: Likewise. * testsuite/std/ranges/subrange/lwg3433.cc: Likewise. * testsuite/std/ranges/subrange/sizeof.cc: Likewise. * testsuite/std/ranges/subrange/tuple_like.cc: Likewise. * testsuite/std/ranges/view.cc: Likewise.
2023-09-04 14:06:43 +01:00
// { dg-do compile { target c++20 } }
Partial implementation of C++20 of <ranges> header * doc/doxygen/user.cfg.in: Add new header. * include/Makefile.am: Add new header. * include/Makefile.in: Regenerate. * include/precompiled/stdc++.h: Include new header. * include/std/ranges: New header. (ranges::sentinel_t, ranges::range_value_t, ranges::range_reference_t) (ranges::range_rvalue_reference_t, ranges::sized_range) (ranges::output_range, ranges::input_ranges, ranges::forward_range) (ranges::bidirectional_range, ranges::random_access_range) (ranges::contiguous_range, ranges::common::range): Define. * testsuite/24_iterators/headers/iterator/synopsis_c++20.cc: Check that disabled_sized_sentinel can be specialized. * testsuite/std/ranges/access/begin.cc: Include <ranges> instead of <iterator>. * testsuite/std/ranges/access/cbegin.cc: Likewise. * testsuite/std/ranges/access/cdata.cc: Likewise. * testsuite/std/ranges/access/cend.cc: Likewise. * testsuite/std/ranges/access/crbegin.cc: Likewise. * testsuite/std/ranges/access/crend.cc: Likewise. * testsuite/std/ranges/access/data.cc: Likewise. * testsuite/std/ranges/access/empty.cc: Likewise. * testsuite/std/ranges/access/end.cc: Likewise. * testsuite/std/ranges/access/end_neg.cc: Likewise. * testsuite/std/ranges/access/rbegin.cc: Likewise. * testsuite/std/ranges/access/rend.cc: Likewise. * testsuite/std/ranges/access/size.cc: Likewise. * testsuite/std/ranges/access/size_neg.cc: Likewise. * testsuite/std/ranges/headers/ranges/synopsis.cc: New test. * testsuite/std/ranges/range.cc: New test. * testsuite/std/ranges/refinements.cc: New test. * testsuite/std/ranges/sized.cc: New test. * testsuite/util/testsuite_iterators.h: Add aliases for range types. (output_iterator_wrapper::WritableObject::operator=): Add const qualifier so that output_iterator_wrapper satisfies writable. From-SVN: r277697
2019-10-31 21:42:18 +00:00
#include <ranges>
#include <testsuite_iterators.h>
static_assert( std::ranges::range<int(&)[1]> );
static_assert( std::ranges::range<const int(&)[1]> );
static_assert( std::ranges::range<int[1]> );
static_assert( !std::ranges::range<int*> );
using namespace __gnu_test;
static_assert( std::ranges::range<test_contiguous_range<int>> );
static_assert( std::ranges::range<test_contiguous_range<int>&> );
static_assert( std::ranges::range<test_random_access_range<int>> );
static_assert( std::ranges::range<test_random_access_range<int>&> );
static_assert( std::ranges::range<test_bidirectional_range<int>> );
static_assert( std::ranges::range<test_bidirectional_range<int>&> );
static_assert( std::ranges::range<test_forward_range<int>> );
static_assert( std::ranges::range<test_forward_range<int>&> );
static_assert( std::ranges::range<test_input_range<int>> );
static_assert( std::ranges::range<test_input_range<int>&> );
static_assert( std::ranges::range<test_output_range<int>> );
static_assert( std::ranges::range<test_output_range<int>&> );
static_assert( std::ranges::range<test_contiguous_sized_range<int>> );
static_assert( std::ranges::range<test_contiguous_sized_range<int>&> );
static_assert( std::ranges::range<test_random_access_sized_range<int>> );
static_assert( std::ranges::range<test_random_access_sized_range<int>&> );
static_assert( std::ranges::range<test_bidirectional_sized_range<int>> );
static_assert( std::ranges::range<test_bidirectional_sized_range<int>&> );
static_assert( std::ranges::range<test_forward_sized_range<int>> );
static_assert( std::ranges::range<test_forward_sized_range<int>&> );
static_assert( std::ranges::range<test_input_sized_range<int>> );
static_assert( std::ranges::range<test_input_sized_range<int>&> );
static_assert( std::ranges::range<test_output_sized_range<int>> );
static_assert( std::ranges::range<test_output_sized_range<int>&> );
using std::same_as;
using C = test_contiguous_range<char>;
using R = test_random_access_range<char>;
Partial implementation of C++20 of <ranges> header * doc/doxygen/user.cfg.in: Add new header. * include/Makefile.am: Add new header. * include/Makefile.in: Regenerate. * include/precompiled/stdc++.h: Include new header. * include/std/ranges: New header. (ranges::sentinel_t, ranges::range_value_t, ranges::range_reference_t) (ranges::range_rvalue_reference_t, ranges::sized_range) (ranges::output_range, ranges::input_ranges, ranges::forward_range) (ranges::bidirectional_range, ranges::random_access_range) (ranges::contiguous_range, ranges::common::range): Define. * testsuite/24_iterators/headers/iterator/synopsis_c++20.cc: Check that disabled_sized_sentinel can be specialized. * testsuite/std/ranges/access/begin.cc: Include <ranges> instead of <iterator>. * testsuite/std/ranges/access/cbegin.cc: Likewise. * testsuite/std/ranges/access/cdata.cc: Likewise. * testsuite/std/ranges/access/cend.cc: Likewise. * testsuite/std/ranges/access/crbegin.cc: Likewise. * testsuite/std/ranges/access/crend.cc: Likewise. * testsuite/std/ranges/access/data.cc: Likewise. * testsuite/std/ranges/access/empty.cc: Likewise. * testsuite/std/ranges/access/end.cc: Likewise. * testsuite/std/ranges/access/end_neg.cc: Likewise. * testsuite/std/ranges/access/rbegin.cc: Likewise. * testsuite/std/ranges/access/rend.cc: Likewise. * testsuite/std/ranges/access/size.cc: Likewise. * testsuite/std/ranges/access/size_neg.cc: Likewise. * testsuite/std/ranges/headers/ranges/synopsis.cc: New test. * testsuite/std/ranges/range.cc: New test. * testsuite/std/ranges/refinements.cc: New test. * testsuite/std/ranges/sized.cc: New test. * testsuite/util/testsuite_iterators.h: Add aliases for range types. (output_iterator_wrapper::WritableObject::operator=): Add const qualifier so that output_iterator_wrapper satisfies writable. From-SVN: r277697
2019-10-31 21:42:18 +00:00
using I = test_input_range<char>;
using O = test_output_range<char>;
static_assert( same_as<std::ranges::iterator_t<C>,
contiguous_iterator_wrapper<char>> );
static_assert( same_as<std::ranges::iterator_t<O>,
decltype(std::declval<O&>().begin())> );
static_assert( same_as<std::ranges::sentinel_t<C>,
decltype(std::declval<C&>().end())> );
Partial implementation of C++20 of <ranges> header * doc/doxygen/user.cfg.in: Add new header. * include/Makefile.am: Add new header. * include/Makefile.in: Regenerate. * include/precompiled/stdc++.h: Include new header. * include/std/ranges: New header. (ranges::sentinel_t, ranges::range_value_t, ranges::range_reference_t) (ranges::range_rvalue_reference_t, ranges::sized_range) (ranges::output_range, ranges::input_ranges, ranges::forward_range) (ranges::bidirectional_range, ranges::random_access_range) (ranges::contiguous_range, ranges::common::range): Define. * testsuite/24_iterators/headers/iterator/synopsis_c++20.cc: Check that disabled_sized_sentinel can be specialized. * testsuite/std/ranges/access/begin.cc: Include <ranges> instead of <iterator>. * testsuite/std/ranges/access/cbegin.cc: Likewise. * testsuite/std/ranges/access/cdata.cc: Likewise. * testsuite/std/ranges/access/cend.cc: Likewise. * testsuite/std/ranges/access/crbegin.cc: Likewise. * testsuite/std/ranges/access/crend.cc: Likewise. * testsuite/std/ranges/access/data.cc: Likewise. * testsuite/std/ranges/access/empty.cc: Likewise. * testsuite/std/ranges/access/end.cc: Likewise. * testsuite/std/ranges/access/end_neg.cc: Likewise. * testsuite/std/ranges/access/rbegin.cc: Likewise. * testsuite/std/ranges/access/rend.cc: Likewise. * testsuite/std/ranges/access/size.cc: Likewise. * testsuite/std/ranges/access/size_neg.cc: Likewise. * testsuite/std/ranges/headers/ranges/synopsis.cc: New test. * testsuite/std/ranges/range.cc: New test. * testsuite/std/ranges/refinements.cc: New test. * testsuite/std/ranges/sized.cc: New test. * testsuite/util/testsuite_iterators.h: Add aliases for range types. (output_iterator_wrapper::WritableObject::operator=): Add const qualifier so that output_iterator_wrapper satisfies writable. From-SVN: r277697
2019-10-31 21:42:18 +00:00
static_assert( same_as<std::ranges::sentinel_t<O>,
decltype(std::declval<O&>().end())> );
static_assert( ! same_as<std::ranges::range_difference_t<C>,
std::ptrdiff_t> ); // __detail::__max_diff_type
static_assert( same_as<std::ranges::range_difference_t<R>,
Partial implementation of C++20 of <ranges> header * doc/doxygen/user.cfg.in: Add new header. * include/Makefile.am: Add new header. * include/Makefile.in: Regenerate. * include/precompiled/stdc++.h: Include new header. * include/std/ranges: New header. (ranges::sentinel_t, ranges::range_value_t, ranges::range_reference_t) (ranges::range_rvalue_reference_t, ranges::sized_range) (ranges::output_range, ranges::input_ranges, ranges::forward_range) (ranges::bidirectional_range, ranges::random_access_range) (ranges::contiguous_range, ranges::common::range): Define. * testsuite/24_iterators/headers/iterator/synopsis_c++20.cc: Check that disabled_sized_sentinel can be specialized. * testsuite/std/ranges/access/begin.cc: Include <ranges> instead of <iterator>. * testsuite/std/ranges/access/cbegin.cc: Likewise. * testsuite/std/ranges/access/cdata.cc: Likewise. * testsuite/std/ranges/access/cend.cc: Likewise. * testsuite/std/ranges/access/crbegin.cc: Likewise. * testsuite/std/ranges/access/crend.cc: Likewise. * testsuite/std/ranges/access/data.cc: Likewise. * testsuite/std/ranges/access/empty.cc: Likewise. * testsuite/std/ranges/access/end.cc: Likewise. * testsuite/std/ranges/access/end_neg.cc: Likewise. * testsuite/std/ranges/access/rbegin.cc: Likewise. * testsuite/std/ranges/access/rend.cc: Likewise. * testsuite/std/ranges/access/size.cc: Likewise. * testsuite/std/ranges/access/size_neg.cc: Likewise. * testsuite/std/ranges/headers/ranges/synopsis.cc: New test. * testsuite/std/ranges/range.cc: New test. * testsuite/std/ranges/refinements.cc: New test. * testsuite/std/ranges/sized.cc: New test. * testsuite/util/testsuite_iterators.h: Add aliases for range types. (output_iterator_wrapper::WritableObject::operator=): Add const qualifier so that output_iterator_wrapper satisfies writable. From-SVN: r277697
2019-10-31 21:42:18 +00:00
std::ptrdiff_t> );
static_assert( same_as<std::ranges::range_difference_t<O>,
std::ptrdiff_t> );
static_assert( same_as<std::ranges::range_reference_t<I>,
char&> );
static_assert( same_as<std::ranges::range_reference_t<O>,
WritableObject<char>> );
static_assert( same_as<std::ranges::range_rvalue_reference_t<I>,
char&&> );
static_assert( same_as<std::ranges::range_rvalue_reference_t<O>,
WritableObject<char>> );
// LWG 3860. range_common_reference_t is missing
static_assert( same_as<std::ranges::range_common_reference_t<C>,
char&> );
static_assert( same_as<std::ranges::range_common_reference_t<I>,
char&> );