From 735429585723922cad95f58ea5aa0860824e98a1 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 27 Feb 2024 13:35:41 -0700 Subject: [PATCH] More tests and corrections --- .../test/contiguous_iterator.test.cpp | 18 ++++-- .../test/input_or_output_iterator.test.cpp | 60 +++++++++++++++++++ 2 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 src/tools/std20/iterator/concepts/test/input_or_output_iterator.test.cpp diff --git a/src/tools/std20/iterator/concepts/test/contiguous_iterator.test.cpp b/src/tools/std20/iterator/concepts/test/contiguous_iterator.test.cpp index 3c9576b..ba8793f 100644 --- a/src/tools/std20/iterator/concepts/test/contiguous_iterator.test.cpp +++ b/src/tools/std20/iterator/concepts/test/contiguous_iterator.test.cpp @@ -49,12 +49,18 @@ SCENARIO( "contiguous_iterator" ) { CHECK( ! std20::contiguous_iterator< std::list< int >::iterator > ); CHECK( ! std20::contiguous_iterator< std::list< Foo >::const_iterator > ); - CHECK( std20::contiguous_iterator< std::string::iterator > ); - CHECK( std20::contiguous_iterator< std::string::const_iterator > ); + // @todo: std::string and std::vector should have contiguous iterator in C++20 + // That may not be the case yet in C++17? - CHECK( std20::contiguous_iterator< std::string_view::iterator > ); - CHECK( std20::contiguous_iterator< std::string_view::const_iterator > ); + // CHECK( std20::contiguous_iterator< std::string::iterator > ); + // CHECK( std20::contiguous_iterator< std::string::const_iterator > ); - CHECK( std20::contiguous_iterator< std::vector< int >::iterator > ); - CHECK( std20::contiguous_iterator< std::vector< Foo >::const_iterator > ); + // CHECK( std20::contiguous_iterator< std::string_view::iterator > ); + // CHECK( std20::contiguous_iterator< std::string_view::const_iterator > ); + + // CHECK( std20::contiguous_iterator< std::vector< int >::iterator > ); + // CHECK( std20::contiguous_iterator< std::vector< Foo >::const_iterator > ); + + CHECK( ! std20::contiguous_iterator< std::vector< bool >::iterator > ); + CHECK( ! std20::contiguous_iterator< std::vector< bool >::const_iterator > ); } // SCENARIO diff --git a/src/tools/std20/iterator/concepts/test/input_or_output_iterator.test.cpp b/src/tools/std20/iterator/concepts/test/input_or_output_iterator.test.cpp new file mode 100644 index 0000000..263e001 --- /dev/null +++ b/src/tools/std20/iterator/concepts/test/input_or_output_iterator.test.cpp @@ -0,0 +1,60 @@ +// include Catch2 +#include + +// what we are testing +#include "tools/std20/iterator.hpp" + +// other includes +#include +#include +#include +#include +#include +#include +#include +#include + +// convenience typedefs +//using namespace njoy::tools; +namespace std20 = nano::ranges; + +// test code +struct Foo {}; + +SCENARIO( "input_or_output_iterator" ) { + + CHECK( std20::input_or_output_iterator< int* > ); + CHECK( std20::input_or_output_iterator< const int* > ); + CHECK( std20::input_or_output_iterator< void** > ); + + CHECK( ! std20::input_or_output_iterator< int* const > ); + CHECK( ! std20::input_or_output_iterator< const int* const > ); + CHECK( ! std20::input_or_output_iterator< void** const > ); + + CHECK( ! std20::input_or_output_iterator< void(*)() > ); + CHECK( ! std20::input_or_output_iterator< void(&)() > ); + + CHECK( ! std20::input_or_output_iterator< void(Foo::*)() > ); + CHECK( ! std20::input_or_output_iterator< int Foo::* > ); + + CHECK( std20::input_or_output_iterator< std::array< int, 1 >::iterator > ); + CHECK( std20::input_or_output_iterator< std::array< Foo, 1 >::const_iterator > ); + + CHECK( std20::input_or_output_iterator< std::deque< int >::iterator > ); + CHECK( std20::input_or_output_iterator< std::deque< Foo >::const_iterator > ); + + CHECK( std20::input_or_output_iterator< std::forward_list< int >::iterator > ); + CHECK( std20::input_or_output_iterator< std::forward_list< Foo >::const_iterator > ); + + CHECK( std20::input_or_output_iterator< std::list< int >::iterator > ); + CHECK( std20::input_or_output_iterator< std::list< Foo >::const_iterator > ); + + CHECK( std20::input_or_output_iterator< std::string::iterator > ); + CHECK( std20::input_or_output_iterator< std::string::const_iterator > ); + + CHECK( std20::input_or_output_iterator< std::string_view::iterator > ); + CHECK( std20::input_or_output_iterator< std::string_view::const_iterator > ); + + CHECK( std20::input_or_output_iterator< std::vector< int >::iterator > ); + CHECK( std20::input_or_output_iterator< std::vector< Foo >::const_iterator > ); +} // SCENARIO