From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1888) id 21F2C3858C83; Wed, 19 Oct 2022 17:04:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 21F2C3858C83 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1666199057; bh=U80/sP+SAa9iu7Bwi9fHAq2XNb8GSfCD2Y/ej/7+83E=; h=From:To:Subject:Date:From; b=AYeqCG9/fZmOLMOAV5cWWTMc8aT0QdBETQeaX7up8p13M2LnfUVcf7ZFD2no4dEmI 5yJnNsGA+aBFaXQuYWes0098dUY2XdtYGOIaUUJVDHT0H7C7i4jFLgma9dReNYcoPG NaBF1vxPbs8sHJmlcA6cU2EZ6LI995ebBa3PFE0c= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Patrick Palka To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r13-3386] libstdc++: Fix typo in stride_view's operator- [PR107313] X-Act-Checkin: gcc X-Git-Author: Patrick Palka X-Git-Refname: refs/heads/master X-Git-Oldrev: a01eae670600852f78e8df1b88259572f181d42e X-Git-Newrev: a10d6b5eb999a74fd4b12c00e8fb379cd3460e93 Message-Id: <20221019170417.21F2C3858C83@sourceware.org> Date: Wed, 19 Oct 2022 17:04:16 +0000 (GMT) List-Id: https://gcc.gnu.org/g:a10d6b5eb999a74fd4b12c00e8fb379cd3460e93 commit r13-3386-ga10d6b5eb999a74fd4b12c00e8fb379cd3460e93 Author: Patrick Palka Date: Wed Oct 19 13:03:25 2022 -0400 libstdc++: Fix typo in stride_view's operator- [PR107313] PR libstdc++/107313 libstdc++-v3/ChangeLog: * include/std/ranges (stride_view::_Iterator::operator-): Fix typo. * testsuite/std/ranges/adaptors/stride/1.cc (test03): New test. Diff: --- libstdc++-v3/include/std/ranges | 2 +- .../testsuite/std/ranges/adaptors/stride/1.cc | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index d113cf19dc7..b29264931cc 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -7874,7 +7874,7 @@ namespace views::__adaptor friend constexpr difference_type operator-(default_sentinel_t __y, const _Iterator& __x) requires sized_sentinel_for, iterator_t<_Base>> - { return __detail::__div_ceil(__x._M_end, __x._M_current, __x._M_stride); } + { return __detail::__div_ceil(__x._M_end - __x._M_current, __x._M_stride); } friend constexpr difference_type operator-(const _Iterator& __x, default_sentinel_t __y) diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc index 745d1a61c1b..37ae896014a 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc @@ -64,10 +64,30 @@ test02() VERIFY( ranges::equal(v, (int[]){1, 4, 7}) ); } +void +test03() +{ + // PR libstdc++/107313 + int x[] = {1, 2, 3, 4, 5}; + __gnu_test::test_input_range rx(x); + auto r = views::counted(rx.begin(), 4) | views::stride(2); + auto i = r.begin(); + std::default_sentinel_t s = r.end(); + VERIFY( s != i ); + VERIFY( s - i == 2 && i - s == -2 ); + ++i; + VERIFY( s != i ); + VERIFY( s - i == 1 && i - s == -1 ); + ++i; + VERIFY( s == i ); + VERIFY( s - i == 0 && i - s == 0 ); +} + int main() { static_assert(test01()); test02<__gnu_test::test_input_range>(); test02<__gnu_test::test_forward_range>(); + test03(); }