From 684c416f908fce586dcfd6edb7680a26f1ac9f28 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Thu, 20 Jun 2024 21:50:34 -0600 Subject: [PATCH] fixing the last issues in zip_transform --- .../std23/views/test/zip_transform.test.cpp | 18 +++++++++--------- src/tools/std23/views/zip_transform.hpp | 12 +++++++++++- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/tools/std23/views/test/zip_transform.test.cpp b/src/tools/std23/views/test/zip_transform.test.cpp index b545678..331ea53 100644 --- a/src/tools/std23/views/test/zip_transform.test.cpp +++ b/src/tools/std23/views/test/zip_transform.test.cpp @@ -76,7 +76,7 @@ SCENARIO( "zip_view" ) { CHECK( std20::ranges::bidirectional_range< Range > ); CHECK( ! std20::ranges::random_access_range< Range > ); CHECK( ! std20::ranges::contiguous_range< Range > ); -// CHECK( std20::ranges::common_range< Range > ); + CHECK( ! std20::ranges::common_range< Range > ); } THEN( "a stride_view can be constructed and members can be tested" ) { @@ -112,7 +112,7 @@ SCENARIO( "zip_view" ) { CHECK( std20::ranges::sized_range< Range > ); CHECK( std20::ranges::forward_range< Range > ); CHECK( std20::ranges::bidirectional_range< Range > ); -// CHECK( std20::ranges::random_access_range< Range > ); + CHECK( std20::ranges::random_access_range< Range > ); CHECK( ! std20::ranges::contiguous_range< Range > ); CHECK( std20::ranges::common_range< Range > ); } @@ -129,13 +129,13 @@ SCENARIO( "zip_view" ) { CHECK( equal[0] == chunk.front() ); CHECK( equal[6] == chunk.back() ); -// CHECK( 26 == chunk[0] ); -// CHECK( 29 == chunk[1] ); -// CHECK( 32 == chunk[2] ); -// CHECK( 35 == chunk[3] ); -// CHECK( 38 == chunk[4] ); -// CHECK( 41 == chunk[5] ); -// CHECK( 44 == chunk[6] ); + CHECK( 26 == chunk[0] ); + CHECK( 29 == chunk[1] ); + CHECK( 32 == chunk[2] ); + CHECK( 35 == chunk[3] ); + CHECK( 38 == chunk[4] ); + CHECK( 41 == chunk[5] ); + CHECK( 44 == chunk[6] ); } // THEN } // WHEN } // GIVEN diff --git a/src/tools/std23/views/zip_transform.hpp b/src/tools/std23/views/zip_transform.hpp index 32a826e..7f7c362 100644 --- a/src/tools/std23/views/zip_transform.hpp +++ b/src/tools/std23/views/zip_transform.hpp @@ -213,6 +213,16 @@ private : return iterator{ left } -= n; } + + template < typename B = Base > + friend constexpr auto operator-( const iterator& left, const iterator& right ) + -> std::enable_if_t< + std20::ranges::sized_sentinel_for< std20::ranges::iterator_t< B >, + std20::ranges::iterator_t< B > >, + difference_type > { + + return left.current_ - right.current_; + } }; template < bool Const > @@ -277,7 +287,7 @@ private : -> std::enable_if_t< std20::ranges::sized_sentinel_for< InnerSentinel< Const >, InnerIterator< Other > >, std20::ranges::range_difference_t< maybe_const< Other, InnerView > > > { - return right - left; + return -( right - left ); } };