From a10d6b5eb999a74fd4b12c00e8fb379cd3460e93 Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Wed, 19 Oct 2022 13:03:25 -0400 Subject: [PATCH] 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. --- 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 d113cf19dc7b..b29264931cc0 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 745d1a61c1b9..37ae896014a5 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(); } -- 2.47.2