diff options
author | Patrick Palka <ppalka@redhat.com> | 2022-10-19 13:03:25 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2022-10-19 13:03:25 -0400 |
commit | a10d6b5eb999a74fd4b12c00e8fb379cd3460e93 (patch) | |
tree | e303246ef08656fdbf52d0a9b49c2fda58020b6a | |
parent | a01eae670600852f78e8df1b88259572f181d42e (diff) | |
download | gcc-a10d6b5eb999a74fd4b12c00e8fb379cd3460e93.zip gcc-a10d6b5eb999a74fd4b12c00e8fb379cd3460e93.tar.gz gcc-a10d6b5eb999a74fd4b12c00e8fb379cd3460e93.tar.bz2 |
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.
-rw-r--r-- | libstdc++-v3/include/std/ranges | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index d113cf1..b292649 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<sentinel_t<_Base>, 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 745d1a6..37ae896 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<int> 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<int>>(); test02<__gnu_test::test_forward_range<int>>(); + test03(); } |