From 28e1c9b5104aebbedc74e10003f3082af4808662 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Thu, 3 Oct 2024 13:38:23 -0600 Subject: [PATCH 01/20] Updating version in develop --- CMakeLists.txt | 2 +- ReleaseNotes.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 62850e3..aaaad2d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ if( DEFINED PROJECT_NAME ) endif() project( tools - VERSION 0.4.0 + VERSION 0.5.0 LANGUAGES CXX ) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index ac08aa7..216954e 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,6 +1,8 @@ # Release Notes—tools Given here are some release notes for tools. +## [tools v0.5.0](https://github.com/njoy/tools/pull/xx) + ## [tools v0.4.0](https://github.com/njoy/tools/pull/44) New features: - added a partial implementation of the C++23 ranges standard: chunk_view, chunk_by_view, stride_view and repeat_view (LLVM implementations for these views were used as models for our C++17 based implementations) From 203f62cb2f895327ffb316a99459016c73b23822 Mon Sep 17 00:00:00 2001 From: Joe Peterson Date: Mon, 14 Oct 2024 17:01:57 -0600 Subject: [PATCH 02/20] Add memleak check to github ci --- .github/scripts/prep_valgrind_test.sh | 16 ++++++++++++++++ .github/workflows/ContinuousIntegration.yml | 15 ++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 .github/scripts/prep_valgrind_test.sh diff --git a/.github/scripts/prep_valgrind_test.sh b/.github/scripts/prep_valgrind_test.sh new file mode 100644 index 0000000..4549a44 --- /dev/null +++ b/.github/scripts/prep_valgrind_test.sh @@ -0,0 +1,16 @@ +#! /bin/bash +echo " +check_return_code() { + if [ \$? -ne 0 ]; then + echo \"Memory leak detected. Test Failed...\" + exit 1 + fi +} + +" > test_valgrind.sh + +find . -iname "*.test" -type f | while IFS= read -r line; do + dirname=$(dirname "$line") + realname=$(basename "$line") + echo "cd ${dirname}; valgrind --leak-check=full --show-leak-kinds=all --errors-for-leak-kinds=all --error-exitcode=1 ./${realname}; check_return_code; cd -" >> test_valgrind.sh +done diff --git a/.github/workflows/ContinuousIntegration.yml b/.github/workflows/ContinuousIntegration.yml index 8d5f6b4..4fade33 100644 --- a/.github/workflows/ContinuousIntegration.yml +++ b/.github/workflows/ContinuousIntegration.yml @@ -29,7 +29,7 @@ jobs: - name: mkdir bin run: mkdir bin - name: cmake - run: cmake -DPYTHON_EXECUTABLE=$(which python3) -D CMAKE_CXX_COMPILER=`which ${{matrix.cxx}}` -D CMAKE_BUILD_TYPE=${{matrix.build_type}} -D tools.tests=ON .. + run: cmake -DCMAKE_CXX_FLAGS="-gdwarf-4" -DPYTHON_EXECUTABLE=$(which python3) -D CMAKE_CXX_COMPILER=`which ${{matrix.cxx}}` -D CMAKE_BUILD_TYPE=${{matrix.build_type}} -D tools.tests=ON .. working-directory: ./bin - name: make run: make -j2 @@ -37,3 +37,16 @@ jobs: - name: ctest run: ctest -j2 working-directory: ./bin + + - name: Setup Valgrind on Ubuntu + if: ${{matrix.os == 'ubuntu-22.04'}} + run: | + sudo apt-get install valgrind; + bash .github/scripts/prep_valgrind_test.sh + working-directory: . + + - name: Run tests with Valgrind + if: ${{matrix.os == 'ubuntu-22.04'}} + run: | + bash test_valgrind.sh + working-directory: . From 662232049b7230da645d741dad413c5f1a5b3ab1 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 15 Oct 2024 10:56:36 -0600 Subject: [PATCH 03/20] Adding some guards to fix an ENDFtk issue --- src/tools/disco/Character.hpp | 6 +++++- src/tools/disco/Column.hpp | 4 ++-- src/tools/disco/Integer.hpp | 8 ++++---- src/tools/disco/Real.hpp | 8 ++++---- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/tools/disco/Character.hpp b/src/tools/disco/Character.hpp index 7360326..2d9236d 100644 --- a/src/tools/disco/Character.hpp +++ b/src/tools/disco/Character.hpp @@ -38,9 +38,13 @@ class Character : public BaseFixedWidthField< Width > { * @param[in,out] iter an iterator to a character in a range */ template < typename Representation, typename Iterator > - static Representation read( Iterator& iter, const Iterator& ) { + static Representation read( Iterator& iter, const Iterator& end ) { Representation value; + if ( iter >= end ) { + + return value; + } value.reserve( Width ); unsigned int position = 0; diff --git a/src/tools/disco/Column.hpp b/src/tools/disco/Column.hpp index 6f7310e..255e081 100644 --- a/src/tools/disco/Column.hpp +++ b/src/tools/disco/Column.hpp @@ -37,10 +37,10 @@ class Column : public BaseFixedWidthField< Width > { * @param[in,out] iter an iterator to a character in a range */ template < typename Iterator > - static void read( Iterator& iter, const Iterator& ) { + static void read( Iterator& iter, const Iterator& end ) { unsigned int position = 0; - while( position < Width && ! ( isNewLine( iter ) || isEndOfFile( iter ) ) ) { + while( position < Width && ! ( isNewLine( iter ) || isEndOfFile( iter ) || iter >= end ) ) { ++position; ++iter; diff --git a/src/tools/disco/Integer.hpp b/src/tools/disco/Integer.hpp index cdef43b..6d2333d 100644 --- a/src/tools/disco/Integer.hpp +++ b/src/tools/disco/Integer.hpp @@ -41,14 +41,14 @@ class Integer : public BaseFixedWidthField< Width > { * @param[in,out] iter an iterator to a character in a range */ template < typename Representation, typename Iterator > - static Representation read( Iterator& iter, const Iterator& ) { + static Representation read( Iterator& iter, const Iterator& end ) { unsigned int position = 0; - const auto end = iter + Width; + const auto final = iter + Width; Representation value = 0; skipSpaces( iter, position ); - if ( isNewLine( iter ) || isEndOfFile( iter ) || Width == position ) { + if ( isNewLine( iter ) || isEndOfFile( iter ) || Width == position || iter >= end ) { return value; } @@ -62,7 +62,7 @@ class Integer : public BaseFixedWidthField< Width > { // we are using fast_float::from_chars instead of std::from_chars since // not all standard c++ libraries implement the floating point version of // std::from_chars - auto result = fast_float::from_chars( &*iter, &*end, value ); + auto result = fast_float::from_chars( &*iter, &*final, value ); if ( result.ec == std::errc() ) { auto advance = result.ptr - &*iter; diff --git a/src/tools/disco/Real.hpp b/src/tools/disco/Real.hpp index 107f19b..f28ee53 100644 --- a/src/tools/disco/Real.hpp +++ b/src/tools/disco/Real.hpp @@ -33,14 +33,14 @@ class Real : public BaseFixedWidthField< Width > { * @param[in,out] iter an iterator to a character in a range */ template < typename Representation, typename Iterator > - static Representation read( Iterator& iter, const Iterator& ) { + static Representation read( Iterator& iter, const Iterator& end ) { unsigned int position = 0; - const auto end = iter + Width; + const auto final = iter + Width; Representation value = 0.0; skipSpaces( iter, position ); - if ( isNewLine( iter ) || isEndOfFile( iter ) || Width == position ) { + if ( isNewLine( iter ) || isEndOfFile( iter ) || Width == position || iter >= end ) { return value; } @@ -56,7 +56,7 @@ class Real : public BaseFixedWidthField< Width > { // of std::from_chars and because this allows us to read fortran formatted // floats fast_float::parse_options options{ fast_float::chars_format::fortran }; - auto result = fast_float::from_chars_advanced( &*iter, &*end, value, options ); + auto result = fast_float::from_chars_advanced( &*iter, &*final, value, options ); if ( result.ec == std::errc() ) { auto advance = result.ptr - &*iter; From 464b6b2a5608e3226ed371f3602f5757f3b84fc4 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 15 Oct 2024 14:34:50 -0600 Subject: [PATCH 04/20] Adding reference to the stride view iterator --- src/tools/std23/views/stride.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tools/std23/views/stride.hpp b/src/tools/std23/views/stride.hpp index d0cb69a..ec64226 100644 --- a/src/tools/std23/views/stride.hpp +++ b/src/tools/std23/views/stride.hpp @@ -65,6 +65,7 @@ struct stride_view : std20::ranges::view_interface< stride_view< R > > { std20::ranges::forward_range< Base >, std20::forward_iterator_tag, std20::input_iterator_tag > > >; + using reference = std20::ranges::iter_reference_t< std20::ranges::iterator_t< Base > >; iterator() = default; From 3f312ace80bd4d0cf9cf261f3457b6c67a657670 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 15 Oct 2024 14:36:48 -0600 Subject: [PATCH 05/20] Updating test --- src/tools/std23/views/test/stride.test.cpp | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/tools/std23/views/test/stride.test.cpp b/src/tools/std23/views/test/stride.test.cpp index 332f31e..e2d438b 100644 --- a/src/tools/std23/views/test/stride.test.cpp +++ b/src/tools/std23/views/test/stride.test.cpp @@ -41,6 +41,17 @@ SCENARIO( "stride_view" ) { CHECK( std20::ranges::common_range< Range > ); } + THEN( "the stride_view range and iterator associated types are correct" ) { + + CHECK( std20::same_as< std20::ranges::range_value_t< Range >, int > ); + CHECK( std20::same_as< std20::ranges::range_reference_t< Range >, int& > ); + CHECK( std20::same_as< std20::ranges::range_difference_t< Range >, std::ptrdiff_t > ); + + CHECK( std20::same_as< std20::ranges::iter_value_t< Iterator >, int > ); + CHECK( std20::same_as< std20::ranges::iter_reference_t< Iterator >, int& > ); + CHECK( std20::same_as< std20::ranges::iter_difference_t< Iterator >, std::ptrdiff_t > ); + } + THEN( "a stride_view can be constructed and members can be tested" ) { CHECK( false == chunk.empty() ); @@ -90,6 +101,17 @@ SCENARIO( "stride_view" ) { CHECK( std20::ranges::common_range< Range > ); } + THEN( "the stride_view range and iterator associated types are correct" ) { + + CHECK( std20::same_as< std20::ranges::range_value_t< Range >, int > ); + CHECK( std20::same_as< std20::ranges::range_reference_t< Range >, int& > ); + CHECK( std20::same_as< std20::ranges::range_difference_t< Range >, std::ptrdiff_t > ); + + CHECK( std20::same_as< std20::ranges::iter_value_t< Iterator >, int > ); + CHECK( std20::same_as< std20::ranges::iter_reference_t< Iterator >, int& > ); + CHECK( std20::same_as< std20::ranges::iter_difference_t< Iterator >, std::ptrdiff_t > ); + } + THEN( "a stride_view can be constructed and members can be tested" ) { CHECK( 5 == chunk.size() ); @@ -154,6 +176,17 @@ SCENARIO( "stride_view" ) { CHECK( std20::ranges::common_range< Range > ); } + THEN( "the stride_view range and iterator associated types are correct" ) { + + CHECK( std20::same_as< std20::ranges::range_value_t< Range >, int > ); + CHECK( std20::same_as< std20::ranges::range_reference_t< Range >, int& > ); + CHECK( std20::same_as< std20::ranges::range_difference_t< Range >, std::ptrdiff_t > ); + + CHECK( std20::same_as< std20::ranges::iter_value_t< Iterator >, int > ); + CHECK( std20::same_as< std20::ranges::iter_reference_t< Iterator >, int& > ); + CHECK( std20::same_as< std20::ranges::iter_difference_t< Iterator >, std::ptrdiff_t > ); + } + THEN( "a stride_view can be constructed and members can be tested" ) { CHECK( 5 == chunk.size() ); From 9a3f83130a3dff6d3aabe9e8363541b40bd7f94a Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 15 Oct 2024 14:43:33 -0600 Subject: [PATCH 06/20] Updating release notes and tools version --- CMakeLists.txt | 2 +- ReleaseNotes.md | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aaaad2d..47d53aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ if( DEFINED PROJECT_NAME ) endif() project( tools - VERSION 0.5.0 + VERSION 0.4.1 LANGUAGES CXX ) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 216954e..a2794d6 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,7 +1,10 @@ # Release Notes—tools Given here are some release notes for tools. -## [tools v0.5.0](https://github.com/njoy/tools/pull/xx) +## tools v0.4.1 +Bug fixes: + - iterator guards were added to the disco parser to avoid valgrind errors in ENDFtk. + - the stride_view iterator was missing the reference type, which is required to create vectors using these stride view iterators in C++17. ## [tools v0.4.0](https://github.com/njoy/tools/pull/44) New features: From 38924d1ea1c44017f666865f94c05a324a5c33d4 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 15 Oct 2024 17:04:19 -0600 Subject: [PATCH 07/20] Add test to illustrate issue --- src/tools/std23/views/test/stride.test.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/tools/std23/views/test/stride.test.cpp b/src/tools/std23/views/test/stride.test.cpp index e2d438b..ccf09f3 100644 --- a/src/tools/std23/views/test/stride.test.cpp +++ b/src/tools/std23/views/test/stride.test.cpp @@ -74,6 +74,11 @@ SCENARIO( "stride_view" ) { CHECK( equal[0] == chunk.front() ); } // THEN + + THEN( "it can be transformed into a vector" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + } } // WHEN } // GIVEN @@ -149,6 +154,11 @@ SCENARIO( "stride_view" ) { CHECK( equal[0] == chunk.front() ); CHECK( equal[4] == chunk.back() ); } // THEN + + THEN( "it can be transformed into a vector" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + } } // WHEN } // GIVEN @@ -232,6 +242,11 @@ SCENARIO( "stride_view" ) { CHECK( 7 == chunk[3] ); CHECK( 9 == chunk[4] ); } // THEN + + THEN( "it can be transformed into a vector" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + } } // WHEN } // GIVEN } // SCENARIO From 8a9e61f8b0b4afa98837704db8c8bf044c982bb0 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 15 Oct 2024 17:22:00 -0600 Subject: [PATCH 08/20] adding similar tests for std20 views --- src/tools/std20/views/test/all.test.cpp | 30 ++++++++++++++ src/tools/std20/views/test/counted.test.cpp | 10 +++++ src/tools/std20/views/test/drop.test.cpp | 30 ++++++++++++++ .../std20/views/test/drop_while.test.cpp | 30 ++++++++++++++ src/tools/std20/views/test/filter.test.cpp | 30 ++++++++++++++ src/tools/std20/views/test/iota.test.cpp | 20 ++++++++++ src/tools/std20/views/test/join.test.cpp | 30 ++++++++++++++ src/tools/std20/views/test/ref.test.cpp | 30 ++++++++++++++ src/tools/std20/views/test/reverse.test.cpp | 20 ++++++++++ src/tools/std20/views/test/subrange.test.cpp | 30 ++++++++++++++ src/tools/std20/views/test/take.test.cpp | 30 ++++++++++++++ .../std20/views/test/take_while.test.cpp | 30 ++++++++++++++ src/tools/std20/views/test/transform.test.cpp | 30 ++++++++++++++ src/tools/std23/views/test/stride.test.cpp | 39 +++++++++++++------ 14 files changed, 377 insertions(+), 12 deletions(-) diff --git a/src/tools/std20/views/test/all.test.cpp b/src/tools/std20/views/test/all.test.cpp index 7f4910a..e811d1c 100644 --- a/src/tools/std20/views/test/all.test.cpp +++ b/src/tools/std20/views/test/all.test.cpp @@ -82,6 +82,16 @@ SCENARIO( "all_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -145,6 +155,16 @@ SCENARIO( "all_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -217,6 +237,16 @@ SCENARIO( "all_view" ) { CHECK( 4 == chunk[3] ); CHECK( 6 == chunk[4] ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN } // SCENARIO diff --git a/src/tools/std20/views/test/counted.test.cpp b/src/tools/std20/views/test/counted.test.cpp index bf09cd1..455b987 100644 --- a/src/tools/std20/views/test/counted.test.cpp +++ b/src/tools/std20/views/test/counted.test.cpp @@ -201,6 +201,16 @@ SCENARIO( "counted_view" ) { CHECK( 0 == chunk[1] ); CHECK( 2 == chunk[2] ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN } // SCENARIO diff --git a/src/tools/std20/views/test/drop.test.cpp b/src/tools/std20/views/test/drop.test.cpp index 9864a26..99aa599 100644 --- a/src/tools/std20/views/test/drop.test.cpp +++ b/src/tools/std20/views/test/drop.test.cpp @@ -80,6 +80,16 @@ SCENARIO( "drop_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, original_modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -137,6 +147,16 @@ SCENARIO( "drop_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, original_modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -202,6 +222,16 @@ SCENARIO( "drop_view" ) { CHECK( 2 == chunk[1] ); CHECK( 4 == chunk[2] ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN } // SCENARIO diff --git a/src/tools/std20/views/test/drop_while.test.cpp b/src/tools/std20/views/test/drop_while.test.cpp index e27a079..605bb48 100644 --- a/src/tools/std20/views/test/drop_while.test.cpp +++ b/src/tools/std20/views/test/drop_while.test.cpp @@ -69,6 +69,16 @@ SCENARIO( "drop_while_view" ) { // the following should not compile: no random access iterator // CHECK( 2 == chunk.back() ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -116,6 +126,16 @@ SCENARIO( "drop_while_view" ) { // the following should not compile: no random access iterator // CHECK( -2 == chunk[0] ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -166,6 +186,16 @@ SCENARIO( "drop_while_view" ) { CHECK( 0 == chunk.front() ); CHECK( 2 == chunk.back() ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN } // SCENARIO diff --git a/src/tools/std20/views/test/filter.test.cpp b/src/tools/std20/views/test/filter.test.cpp index b43f2e6..ac9f1b0 100644 --- a/src/tools/std20/views/test/filter.test.cpp +++ b/src/tools/std20/views/test/filter.test.cpp @@ -82,6 +82,16 @@ SCENARIO( "filter_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, original_modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -140,6 +150,16 @@ SCENARIO( "filter_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, original_modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -204,6 +224,16 @@ SCENARIO( "filter_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, original_modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN*/ } // SCENARIO diff --git a/src/tools/std20/views/test/iota.test.cpp b/src/tools/std20/views/test/iota.test.cpp index 0f0fbd8..4be3dc9 100644 --- a/src/tools/std20/views/test/iota.test.cpp +++ b/src/tools/std20/views/test/iota.test.cpp @@ -77,6 +77,16 @@ SCENARIO( "iota_view" ) { CHECK( *( begin + 5 ) == 6 ); CHECK( *( begin + 99 ) == 100 ); } // THEN + +// THEN( "it can be transformed into a vector using iterators" ) { +// +// std::vector< int > constructed( chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( constructed, chunk ) ); +// +// std::vector< int > inserted; +// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( inserted, chunk ) ); +// } } // WHEN } // GIVEN @@ -139,6 +149,16 @@ SCENARIO( "iota_view" ) { CHECK( *( begin + 1 ) == 2 ); CHECK( *( end - 1 ) == 5 ); } // THEN + +// THEN( "it can be transformed into a vector using iterators" ) { +// +// std::vector< int > constructed( chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( constructed, chunk ) ); +// +// std::vector< int > inserted; +// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( inserted, chunk ) ); +// } } // WHEN } // GIVEN } // SCENARIO diff --git a/src/tools/std20/views/test/join.test.cpp b/src/tools/std20/views/test/join.test.cpp index 48dd9f0..967392d 100644 --- a/src/tools/std20/views/test/join.test.cpp +++ b/src/tools/std20/views/test/join.test.cpp @@ -69,6 +69,16 @@ SCENARIO( "join_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -123,6 +133,16 @@ SCENARIO( "join_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -177,6 +197,16 @@ SCENARIO( "join_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN } // SCENARIO diff --git a/src/tools/std20/views/test/ref.test.cpp b/src/tools/std20/views/test/ref.test.cpp index f8947bb..cf262bc 100644 --- a/src/tools/std20/views/test/ref.test.cpp +++ b/src/tools/std20/views/test/ref.test.cpp @@ -82,6 +82,16 @@ SCENARIO( "ref_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -145,6 +155,16 @@ SCENARIO( "ref_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -216,6 +236,16 @@ SCENARIO( "ref_view" ) { CHECK( 4 == chunk[3] ); CHECK( 6 == chunk[4] ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN } // SCENARIO diff --git a/src/tools/std20/views/test/reverse.test.cpp b/src/tools/std20/views/test/reverse.test.cpp index 68841c7..8452234 100644 --- a/src/tools/std20/views/test/reverse.test.cpp +++ b/src/tools/std20/views/test/reverse.test.cpp @@ -75,6 +75,16 @@ SCENARIO( "reverse_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -144,6 +154,16 @@ SCENARIO( "reverse_view" ) { CHECK( 2 == chunk[3] ); CHECK( 2 == chunk[4] ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN } // SCENARIO diff --git a/src/tools/std20/views/test/subrange.test.cpp b/src/tools/std20/views/test/subrange.test.cpp index 7878bb3..3138c57 100644 --- a/src/tools/std20/views/test/subrange.test.cpp +++ b/src/tools/std20/views/test/subrange.test.cpp @@ -84,6 +84,16 @@ SCENARIO( "subrange" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -151,6 +161,16 @@ SCENARIO( "subrange" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, modified ) ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -224,6 +244,16 @@ SCENARIO( "subrange" ) { CHECK( 4 == chunk[3] ); CHECK( 6 == chunk[4] ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN } // SCENARIO diff --git a/src/tools/std20/views/test/take.test.cpp b/src/tools/std20/views/test/take.test.cpp index 94b5a60..5117e06 100644 --- a/src/tools/std20/views/test/take.test.cpp +++ b/src/tools/std20/views/test/take.test.cpp @@ -80,6 +80,16 @@ SCENARIO( "take_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, original_modified ) ); } // THEN + +// THEN( "it can be transformed into a vector using iterators" ) { +// +// std::vector< int > constructed( chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( constructed, chunk ) ); +// +// std::vector< int > inserted; +// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( inserted, chunk ) ); +// } } // WHEN } // GIVEN @@ -137,6 +147,16 @@ SCENARIO( "take_view" ) { CHECK( std20::ranges::equal( chunk, modified ) ); CHECK( std20::ranges::equal( values, original_modified ) ); } // THEN + +// THEN( "it can be transformed into a vector using iterators" ) { +// +// std::vector< int > constructed( chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( constructed, chunk ) ); +// +// std::vector< int > inserted; +// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( inserted, chunk ) ); +// } } // WHEN } // GIVEN @@ -202,6 +222,16 @@ SCENARIO( "take_view" ) { CHECK( 0 == chunk[1] ); CHECK( 2 == chunk[2] ); } // THEN + +// THEN( "it can be transformed into a vector using iterators" ) { +// +// std::vector< int > constructed( chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( constructed, chunk ) ); +// +// std::vector< int > inserted; +// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( inserted, chunk ) ); +// } } // WHEN } // GIVEN*/ } // SCENARIO diff --git a/src/tools/std20/views/test/take_while.test.cpp b/src/tools/std20/views/test/take_while.test.cpp index 1cf6b8f..f366520 100644 --- a/src/tools/std20/views/test/take_while.test.cpp +++ b/src/tools/std20/views/test/take_while.test.cpp @@ -69,6 +69,16 @@ SCENARIO( "take_while_view" ) { // the following should not compile: no random access iterator // CHECK( 2 == chunk.back() ); } // THEN + +// THEN( "it can be transformed into a vector using iterators" ) { +// +// std::vector< int > constructed( chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( constructed, chunk ) ); +// +// std::vector< int > inserted; +// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( inserted, chunk ) ); +// } } // WHEN } // GIVEN @@ -116,6 +126,16 @@ SCENARIO( "take_while_view" ) { // the following should not compile: no random access iterator // CHECK( -2 == chunk[0] ); } // THEN + +// THEN( "it can be transformed into a vector using iterators" ) { +// +// std::vector< int > constructed( chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( constructed, chunk ) ); +// +// std::vector< int > inserted; +// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( inserted, chunk ) ); +// } } // WHEN } // GIVEN @@ -166,6 +186,16 @@ SCENARIO( "take_while_view" ) { CHECK( -2 == chunk.front() ); // CHECK( 0 == chunk.back() ); } // THEN + +// THEN( "it can be transformed into a vector using iterators" ) { +// +// std::vector< int > constructed( chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( constructed, chunk ) ); +// +// std::vector< int > inserted; +// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( inserted, chunk ) ); +// } } // WHEN } // GIVEN*/ } // SCENARIO diff --git a/src/tools/std20/views/test/transform.test.cpp b/src/tools/std20/views/test/transform.test.cpp index 7c6330c..af8d4f2 100644 --- a/src/tools/std20/views/test/transform.test.cpp +++ b/src/tools/std20/views/test/transform.test.cpp @@ -69,6 +69,16 @@ SCENARIO( "transform_view" ) { // the following should not compile: no random access iterator // CHECK( 2 == chunk.back() ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -118,6 +128,16 @@ SCENARIO( "transform_view" ) { CHECK( -2 == chunk.front() ); CHECK( 2 == chunk.back() ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -170,6 +190,16 @@ SCENARIO( "transform_view" ) { CHECK( -2 == chunk.front() ); CHECK( 2 == chunk.back() ); } // THEN + + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN } // SCENARIO diff --git a/src/tools/std23/views/test/stride.test.cpp b/src/tools/std23/views/test/stride.test.cpp index ccf09f3..9d73353 100644 --- a/src/tools/std23/views/test/stride.test.cpp +++ b/src/tools/std23/views/test/stride.test.cpp @@ -75,10 +75,15 @@ SCENARIO( "stride_view" ) { CHECK( equal[0] == chunk.front() ); } // THEN - THEN( "it can be transformed into a vector" ) { - - std::vector< int > constructed( chunk.begin(), chunk.end() ); - } +// THEN( "it can be transformed into a vector using iterators" ) { +// +// std::vector< int > constructed( chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( constructed, chunk ) ); +// +// std::vector< int > inserted; +// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( inserted, chunk ) ); +// } } // WHEN } // GIVEN @@ -155,10 +160,15 @@ SCENARIO( "stride_view" ) { CHECK( equal[4] == chunk.back() ); } // THEN - THEN( "it can be transformed into a vector" ) { - - std::vector< int > constructed( chunk.begin(), chunk.end() ); - } +// THEN( "it can be transformed into a vector using iterators" ) { +// +// std::vector< int > constructed( chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( constructed, chunk ) ); +// +// std::vector< int > inserted; +// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( inserted, chunk ) ); +// } } // WHEN } // GIVEN @@ -243,10 +253,15 @@ SCENARIO( "stride_view" ) { CHECK( 9 == chunk[4] ); } // THEN - THEN( "it can be transformed into a vector" ) { - - std::vector< int > constructed( chunk.begin(), chunk.end() ); - } +// THEN( "it can be transformed into a vector using iterators" ) { +// +// std::vector< int > constructed( chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( constructed, chunk ) ); +// +// std::vector< int > inserted; +// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); +// CHECK( std20::ranges::equal( inserted, chunk ) ); +// } } // WHEN } // GIVEN } // SCENARIO From c037a60684f314277c26ec5b28dd43ea39c41176 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 15 Oct 2024 17:34:28 -0600 Subject: [PATCH 09/20] Setting pointer = void for stride view iterators --- src/tools/std23/views/stride.hpp | 2 + src/tools/std23/views/test/stride.test.cpp | 54 +++++++++++----------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/tools/std23/views/stride.hpp b/src/tools/std23/views/stride.hpp index ec64226..1e4b4d5 100644 --- a/src/tools/std23/views/stride.hpp +++ b/src/tools/std23/views/stride.hpp @@ -65,6 +65,8 @@ struct stride_view : std20::ranges::view_interface< stride_view< R > > { std20::ranges::forward_range< Base >, std20::forward_iterator_tag, std20::input_iterator_tag > > >; + // Extension: legacy typedefs + using pointer = void; using reference = std20::ranges::iter_reference_t< std20::ranges::iterator_t< Base > >; iterator() = default; diff --git a/src/tools/std23/views/test/stride.test.cpp b/src/tools/std23/views/test/stride.test.cpp index 9d73353..353e196 100644 --- a/src/tools/std23/views/test/stride.test.cpp +++ b/src/tools/std23/views/test/stride.test.cpp @@ -75,15 +75,15 @@ SCENARIO( "stride_view" ) { CHECK( equal[0] == chunk.front() ); } // THEN -// THEN( "it can be transformed into a vector using iterators" ) { -// -// std::vector< int > constructed( chunk.begin(), chunk.end() ); -// CHECK( std20::ranges::equal( constructed, chunk ) ); -// -// std::vector< int > inserted; -// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); -// CHECK( std20::ranges::equal( inserted, chunk ) ); -// } + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -160,15 +160,15 @@ SCENARIO( "stride_view" ) { CHECK( equal[4] == chunk.back() ); } // THEN -// THEN( "it can be transformed into a vector using iterators" ) { -// -// std::vector< int > constructed( chunk.begin(), chunk.end() ); -// CHECK( std20::ranges::equal( constructed, chunk ) ); -// -// std::vector< int > inserted; -// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); -// CHECK( std20::ranges::equal( inserted, chunk ) ); -// } + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN @@ -253,15 +253,15 @@ SCENARIO( "stride_view" ) { CHECK( 9 == chunk[4] ); } // THEN -// THEN( "it can be transformed into a vector using iterators" ) { -// -// std::vector< int > constructed( chunk.begin(), chunk.end() ); -// CHECK( std20::ranges::equal( constructed, chunk ) ); -// -// std::vector< int > inserted; -// inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); -// CHECK( std20::ranges::equal( inserted, chunk ) ); -// } + THEN( "it can be transformed into a vector using iterators" ) { + + std::vector< int > constructed( chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( constructed, chunk ) ); + + std::vector< int > inserted; + inserted.insert( inserted.end(), chunk.begin(), chunk.end() ); + CHECK( std20::ranges::equal( inserted, chunk ) ); + } } // WHEN } // GIVEN } // SCENARIO From 00c2a97b3cc9fae683c6dbee20702241846c9fdd Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Wed, 16 Oct 2024 12:24:31 -0600 Subject: [PATCH 10/20] Upgrading macos to macos-13 --- .github/workflows/ContinuousIntegration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ContinuousIntegration.yml b/.github/workflows/ContinuousIntegration.yml index 4fade33..67c7c1a 100644 --- a/.github/workflows/ContinuousIntegration.yml +++ b/.github/workflows/ContinuousIntegration.yml @@ -16,7 +16,7 @@ jobs: runs-on: ${{matrix.os}} strategy: matrix: - os: [ ubuntu-22.04, macos-12 ] + os: [ ubuntu-22.04, macos-13 ] cxx: [ clang++, g++-12 ] build_type: [ Debug, Release ] From 0cd22f69512a3751dc2717c8d4a7194a0143f623 Mon Sep 17 00:00:00 2001 From: "Michael A. Lively" Date: Fri, 8 Nov 2024 14:02:31 -0700 Subject: [PATCH 11/20] Change `auto` to explciit type in Log.hpp method declarations. This change is required to build Tools on Windows with MSVC19 for use with ACEtk. --- src/tools/Log.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tools/Log.hpp b/src/tools/Log.hpp index 521f0d2..0c4ace9 100644 --- a/src/tools/Log.hpp +++ b/src/tools/Log.hpp @@ -16,9 +16,9 @@ namespace tools { */ class Log { - static auto initialize_logger() { + static std::shared_ptr initialize_logger() { - auto instance = spdlog::stdout_color_st( "njoy" ); + std::shared_ptr instance = spdlog::stdout_color_st( "njoy" ); instance->set_pattern( "[%^%l%$] %v" ); #ifndef NDEBUG instance->set_level( spdlog::level::debug ); @@ -26,9 +26,9 @@ class Log { return instance; } - static auto& logger() { + static std::shared_ptr& logger() { - static auto instance = initialize_logger(); + static std::shared_ptr instance = initialize_logger(); return instance; } From 0a3f7bb6a90009ebe2860931dd583df6d5ad95bf Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 28 Jan 2025 12:06:02 -0700 Subject: [PATCH 12/20] Upping the cmake version to 3.27 --- CMakeLists.txt | 4 ++-- cmake/dependencies.cmake | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 47d53aa..a0857e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ # Preamble ######################################################################## -cmake_minimum_required( VERSION 3.24 ) +cmake_minimum_required( VERSION 3.27 ) set( subproject OFF ) if( DEFINED PROJECT_NAME ) @@ -83,7 +83,7 @@ if( tools.python ) target_link_libraries( tools.python PRIVATE tools ) target_include_directories( tools.python PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/python/src ) - target_compile_options( tools.python PRIVATE "-fvisibility=hidden" ) + set_target_properties( tools.python PROPERTIES CXX_VISIBILITY_PRESET hidden) set_target_properties( tools.python PROPERTIES OUTPUT_NAME tools ) set_target_properties( tools.python PROPERTIES COMPILE_DEFINITIONS "PYBIND11" ) set_target_properties( tools.python PROPERTIES POSITION_INDEPENDENT_CODE ON ) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 8bf1584..25f35f8 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -1,4 +1,4 @@ -cmake_minimum_required( VERSION 3.24 ) +cmake_minimum_required( VERSION 3.27 ) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/.cmake) include( shacl_FetchContent ) ####################################################################### From 50222c5ba392bcce2e44df0a298e58fb2c549241 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 28 Jan 2025 15:00:57 -0700 Subject: [PATCH 13/20] Updating github ci --- .github/workflows/ContinuousIntegration.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ContinuousIntegration.yml b/.github/workflows/ContinuousIntegration.yml index 67c7c1a..b3d8ffc 100644 --- a/.github/workflows/ContinuousIntegration.yml +++ b/.github/workflows/ContinuousIntegration.yml @@ -11,12 +11,15 @@ on: pull_request: branches: 'main' +# ubuntu-22.04 is x64 +# macos-13 is intel +# macos-14 is arm64 (M1) jobs: build: runs-on: ${{matrix.os}} strategy: matrix: - os: [ ubuntu-22.04, macos-13 ] + os: [ ubuntu-22.04, macos-13, macos-14 ] cxx: [ clang++, g++-12 ] build_type: [ Debug, Release ] From e1359f1d2a5044a121e6ac7bd3ad183ee3356988 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 28 Jan 2025 15:01:26 -0700 Subject: [PATCH 14/20] Preparing for linux arm64 runners on GitHub --- src/tools/disco/BaseField/test/BaseField.test.cpp | 2 +- .../disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp | 2 +- .../disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp | 2 +- src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp | 2 +- src/tools/disco/Integer/test/Integer.test.cpp | 2 +- src/tools/disco/Real/test/Real.test.cpp | 2 +- src/tools/disco/functions/test/functions.test.cpp | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/tools/disco/BaseField/test/BaseField.test.cpp b/src/tools/disco/BaseField/test/BaseField.test.cpp index e1570e9..2c52df7 100644 --- a/src/tools/disco/BaseField/test/BaseField.test.cpp +++ b/src/tools/disco/BaseField/test/BaseField.test.cpp @@ -19,7 +19,7 @@ class TestBaseField : protected BaseField { SCENARIO( "BaseField" ) { std::string string = " a\t\n\r\n\f"; - string += char{ std::char_traits::eof() }; + string += std::char_traits::eof(); auto iter = string.begin(); unsigned int position = 0; diff --git a/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp b/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp index b5fb0df..d392013 100644 --- a/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp +++ b/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp @@ -21,7 +21,7 @@ class TestBaseFixedWidthField : protected BaseFixedWidthField< Width > { SCENARIO( "BaseFixedWidthField" ) { std::string string = " a\t\n\r\n\f"; - string += char{ std::char_traits::eof() }; + string += std::char_traits::eof(); auto iter = string.begin(); unsigned int position = 0; diff --git a/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp b/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp index 05a6892..9e79981 100644 --- a/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp +++ b/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp @@ -105,7 +105,7 @@ SCENARIO( "Integer" ) { CHECK( iter == end - 1 ); string = " +123"; - string += char{ std::char_traits::eof() }; + string += std::char_traits::eof(); iter = string.begin(); end = string.end(); CHECK( 123 == FreeFormatInteger::read< int >( iter, end ) ); diff --git a/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp b/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp index 39bfc9a..e1b4ddf 100644 --- a/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp +++ b/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp @@ -215,7 +215,7 @@ SCENARIO( "Integer" ) { CHECK( iter == end - 1 ); string = " +123"; - string += char{ std::char_traits::eof() }; + string += std::char_traits::eof(); iter = string.begin(); end = string.end(); CHECK_THAT( 123, WithinRel( FreeFormatReal::read< double >( iter, end ) ) ); diff --git a/src/tools/disco/Integer/test/Integer.test.cpp b/src/tools/disco/Integer/test/Integer.test.cpp index 0ab4463..de4ddf0 100644 --- a/src/tools/disco/Integer/test/Integer.test.cpp +++ b/src/tools/disco/Integer/test/Integer.test.cpp @@ -86,7 +86,7 @@ SCENARIO( "Integer" ) { CHECK( begin == end - 1 ); string = " +123"; - string += char{ std::char_traits::eof() }; + string += std::char_traits::eof(); begin = string.begin(); end = string.end(); CHECK( 123 == Integer< 10 >::read< int >( begin, end ) ); diff --git a/src/tools/disco/Real/test/Real.test.cpp b/src/tools/disco/Real/test/Real.test.cpp index cc1ed6f..4e50e42 100644 --- a/src/tools/disco/Real/test/Real.test.cpp +++ b/src/tools/disco/Real/test/Real.test.cpp @@ -220,7 +220,7 @@ SCENARIO( "Real" ) { CHECK( begin == end - 1 ); string = " +123"; - string += char{ std::char_traits::eof() }; + string += std::char_traits::eof(); begin = string.begin(); end = string.end(); CHECK_THAT( 123, WithinRel( Real< 10 >::read< double >( begin, end ) ) ); diff --git a/src/tools/disco/functions/test/functions.test.cpp b/src/tools/disco/functions/test/functions.test.cpp index 04a0294..d727592 100644 --- a/src/tools/disco/functions/test/functions.test.cpp +++ b/src/tools/disco/functions/test/functions.test.cpp @@ -12,7 +12,7 @@ using namespace njoy::tools::disco; SCENARIO( "functions" ) { std::string string = " a\t\n\r\n\f"; - string += char{ std::char_traits::eof() }; + string += std::char_traits::eof(); auto iter = string.begin(); unsigned int position = 0; From 412902b2d665e3f74c31df129e8a13dd2282297e Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 28 Jan 2025 15:04:12 -0700 Subject: [PATCH 15/20] Updating release notes --- ReleaseNotes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index a2794d6..9fe5705 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -6,6 +6,8 @@ Bug fixes: - iterator guards were added to the disco parser to avoid valgrind errors in ENDFtk. - the stride_view iterator was missing the reference type, which is required to create vectors using these stride view iterators in C++17. +A few updates were made in the CMake files for Windows compilation issues. The GitHub CI was also updated: macos-14 (arm64 architecture) was added in addition to macos-13 (intel architecture). + ## [tools v0.4.0](https://github.com/njoy/tools/pull/44) New features: - added a partial implementation of the C++23 ranges standard: chunk_view, chunk_by_view, stride_view and repeat_view (LLVM implementations for these views were used as models for our C++17 based implementations) From e229c5f0a000ec17342a43612f58bc95aac93e7f Mon Sep 17 00:00:00 2001 From: Joe Peterson Date: Wed, 29 Jan 2025 12:46:22 -0700 Subject: [PATCH 16/20] Remove addition of EOF char and EOF test in string check --- .../disco/BaseField/test/BaseField.test.cpp | 7 +------ .../test/BaseFixedWidthField.test.cpp | 7 +------ .../test/FreeFormatInteger.test.cpp | 1 - .../FreeFormatReal/test/FreeFormatReal.test.cpp | 1 - src/tools/disco/Integer/test/Integer.test.cpp | 1 - src/tools/disco/Real/test/Real.test.cpp | 1 - .../disco/functions/test/functions.test.cpp | 16 ---------------- 7 files changed, 2 insertions(+), 32 deletions(-) diff --git a/src/tools/disco/BaseField/test/BaseField.test.cpp b/src/tools/disco/BaseField/test/BaseField.test.cpp index 2c52df7..5749d84 100644 --- a/src/tools/disco/BaseField/test/BaseField.test.cpp +++ b/src/tools/disco/BaseField/test/BaseField.test.cpp @@ -17,15 +17,10 @@ class TestBaseField : protected BaseField { }; SCENARIO( "BaseField" ) { - - std::string string = " a\t\n\r\n\f"; - string += std::char_traits::eof(); + std::string string = "+abc"; auto iter = string.begin(); unsigned int position = 0; - string = "+abc"; - position = 0; - iter = string.begin(); TestBaseField::skipPlusSign( iter, position ); CHECK( iter == string.begin() + 1 ); CHECK( position == 1 ); diff --git a/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp b/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp index d392013..85f77ba 100644 --- a/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp +++ b/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp @@ -19,15 +19,10 @@ class TestBaseFixedWidthField : protected BaseFixedWidthField< Width > { }; SCENARIO( "BaseFixedWidthField" ) { - - std::string string = " a\t\n\r\n\f"; - string += std::char_traits::eof(); + std::string string = "+abc"; auto iter = string.begin(); unsigned int position = 0; - string = "+abc"; - position = 0; - iter = string.begin(); TestBaseFixedWidthField< 6 >::skipPlusSign( iter, position ); CHECK( iter == string.begin() + 1 ); CHECK( position == 1 ); diff --git a/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp b/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp index 9e79981..2aea2e5 100644 --- a/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp +++ b/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp @@ -105,7 +105,6 @@ SCENARIO( "Integer" ) { CHECK( iter == end - 1 ); string = " +123"; - string += std::char_traits::eof(); iter = string.begin(); end = string.end(); CHECK( 123 == FreeFormatInteger::read< int >( iter, end ) ); diff --git a/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp b/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp index e1b4ddf..962ef68 100644 --- a/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp +++ b/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp @@ -215,7 +215,6 @@ SCENARIO( "Integer" ) { CHECK( iter == end - 1 ); string = " +123"; - string += std::char_traits::eof(); iter = string.begin(); end = string.end(); CHECK_THAT( 123, WithinRel( FreeFormatReal::read< double >( iter, end ) ) ); diff --git a/src/tools/disco/Integer/test/Integer.test.cpp b/src/tools/disco/Integer/test/Integer.test.cpp index de4ddf0..09ac050 100644 --- a/src/tools/disco/Integer/test/Integer.test.cpp +++ b/src/tools/disco/Integer/test/Integer.test.cpp @@ -86,7 +86,6 @@ SCENARIO( "Integer" ) { CHECK( begin == end - 1 ); string = " +123"; - string += std::char_traits::eof(); begin = string.begin(); end = string.end(); CHECK( 123 == Integer< 10 >::read< int >( begin, end ) ); diff --git a/src/tools/disco/Real/test/Real.test.cpp b/src/tools/disco/Real/test/Real.test.cpp index 4e50e42..b0eacee 100644 --- a/src/tools/disco/Real/test/Real.test.cpp +++ b/src/tools/disco/Real/test/Real.test.cpp @@ -220,7 +220,6 @@ SCENARIO( "Real" ) { CHECK( begin == end - 1 ); string = " +123"; - string += std::char_traits::eof(); begin = string.begin(); end = string.end(); CHECK_THAT( 123, WithinRel( Real< 10 >::read< double >( begin, end ) ) ); diff --git a/src/tools/disco/functions/test/functions.test.cpp b/src/tools/disco/functions/test/functions.test.cpp index d727592..a543293 100644 --- a/src/tools/disco/functions/test/functions.test.cpp +++ b/src/tools/disco/functions/test/functions.test.cpp @@ -12,7 +12,6 @@ using namespace njoy::tools::disco; SCENARIO( "functions" ) { std::string string = " a\t\n\r\n\f"; - string += std::char_traits::eof(); auto iter = string.begin(); unsigned int position = 0; @@ -24,7 +23,6 @@ SCENARIO( "functions" ) { CHECK( false == isSpace( iter ) ); ++iter; CHECK( false == isSpace( iter ) ); ++iter; CHECK( false == isSpace( iter ) ); ++iter; - CHECK( false == isSpace( iter ) ); ++iter; CHECK( iter == string.end() ); iter = string.begin(); @@ -35,7 +33,6 @@ SCENARIO( "functions" ) { CHECK( false == isSpaceOrTabulation( iter ) ); ++iter; CHECK( false == isSpaceOrTabulation( iter ) ); ++iter; CHECK( false == isSpaceOrTabulation( iter ) ); ++iter; - CHECK( false == isSpaceOrTabulation( iter ) ); ++iter; CHECK( iter == string.end() ); iter = string.begin(); @@ -46,7 +43,6 @@ SCENARIO( "functions" ) { CHECK( true == isWhiteSpace( iter ) ); ++iter; CHECK( true == isWhiteSpace( iter ) ); ++iter; CHECK( true == isWhiteSpace( iter ) ); ++iter; - CHECK( false == isWhiteSpace( iter ) ); ++iter; CHECK( iter == string.end() ); iter = string.begin(); @@ -61,17 +57,5 @@ SCENARIO( "functions" ) { CHECK( iter == string.begin() + 5 ); ++iter; // \f is a newline CHECK( true == isNewLine( iter ) ); ++iter; - CHECK( false == isNewLine( iter ) ); ++iter; - CHECK( iter == string.end() ); - - iter = string.begin(); - CHECK( false == isEndOfFile( iter ) ); ++iter; - CHECK( false == isEndOfFile( iter ) ); ++iter; - CHECK( false == isEndOfFile( iter ) ); ++iter; - CHECK( false == isEndOfFile( iter ) ); ++iter; - CHECK( false == isEndOfFile( iter ) ); ++iter; - CHECK( false == isEndOfFile( iter ) ); ++iter; - CHECK( false == isEndOfFile( iter ) ); ++iter; - CHECK( true == isEndOfFile( iter ) ); ++iter; CHECK( iter == string.end() ); } // SCENARIO From 50ee77f0c1c159494b12c5ccd142a9e17e3dc96b Mon Sep 17 00:00:00 2001 From: Joe Peterson Date: Wed, 29 Jan 2025 12:54:39 -0700 Subject: [PATCH 17/20] Remove unneeded test which used to have EOF --- .../disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp | 6 ------ src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp | 6 ------ src/tools/disco/Integer/test/Integer.test.cpp | 6 ------ src/tools/disco/Real/test/Real.test.cpp | 6 ------ 4 files changed, 24 deletions(-) diff --git a/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp b/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp index 2aea2e5..734a69e 100644 --- a/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp +++ b/src/tools/disco/FreeFormatInteger/test/FreeFormatInteger.test.cpp @@ -103,12 +103,6 @@ SCENARIO( "Integer" ) { end = string.end(); CHECK( 123 == FreeFormatInteger::read< int >( iter, end ) ); CHECK( iter == end - 1 ); - - string = " +123"; - iter = string.begin(); - end = string.end(); - CHECK( 123 == FreeFormatInteger::read< int >( iter, end ) ); - CHECK( iter == end - 1 ); } // THEN } // GIVEN diff --git a/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp b/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp index 962ef68..8efb2be 100644 --- a/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp +++ b/src/tools/disco/FreeFormatReal/test/FreeFormatReal.test.cpp @@ -213,12 +213,6 @@ SCENARIO( "Integer" ) { end = string.end(); CHECK_THAT( 123, WithinRel( FreeFormatReal::read< double >( iter, end ) ) ); CHECK( iter == end - 1 ); - - string = " +123"; - iter = string.begin(); - end = string.end(); - CHECK_THAT( 123, WithinRel( FreeFormatReal::read< double >( iter, end ) ) ); - CHECK( iter == end - 1 ); } // THEN } // GIVEN diff --git a/src/tools/disco/Integer/test/Integer.test.cpp b/src/tools/disco/Integer/test/Integer.test.cpp index 09ac050..f562f42 100644 --- a/src/tools/disco/Integer/test/Integer.test.cpp +++ b/src/tools/disco/Integer/test/Integer.test.cpp @@ -84,12 +84,6 @@ SCENARIO( "Integer" ) { end = string.end(); CHECK( 123 == Integer< 10 >::read< int >( begin, end ) ); CHECK( begin == end - 1 ); - - string = " +123"; - begin = string.begin(); - end = string.end(); - CHECK( 123 == Integer< 10 >::read< int >( begin, end ) ); - CHECK( begin == end - 1 ); } // THEN } // GIVEN diff --git a/src/tools/disco/Real/test/Real.test.cpp b/src/tools/disco/Real/test/Real.test.cpp index b0eacee..8441cb2 100644 --- a/src/tools/disco/Real/test/Real.test.cpp +++ b/src/tools/disco/Real/test/Real.test.cpp @@ -218,12 +218,6 @@ SCENARIO( "Real" ) { end = string.end(); CHECK_THAT( 123, WithinRel( Real< 10 >::read< double >( begin, end ) ) ); CHECK( begin == end - 1 ); - - string = " +123"; - begin = string.begin(); - end = string.end(); - CHECK_THAT( 123, WithinRel( Real< 10 >::read< double >( begin, end ) ) ); - CHECK( begin == end - 1 ); } // THEN } // GIVEN From cc038e98a3455604de72d0ce46c9e53a0def3a03 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Wed, 29 Jan 2025 13:04:01 -0700 Subject: [PATCH 18/20] Some more changes --- src/tools/disco/BaseField/test/BaseField.test.cpp | 1 + .../disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/tools/disco/BaseField/test/BaseField.test.cpp b/src/tools/disco/BaseField/test/BaseField.test.cpp index 5749d84..62630de 100644 --- a/src/tools/disco/BaseField/test/BaseField.test.cpp +++ b/src/tools/disco/BaseField/test/BaseField.test.cpp @@ -17,6 +17,7 @@ class TestBaseField : protected BaseField { }; SCENARIO( "BaseField" ) { + std::string string = "+abc"; auto iter = string.begin(); unsigned int position = 0; diff --git a/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp b/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp index 85f77ba..91f6782 100644 --- a/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp +++ b/src/tools/disco/BaseFixedWidthField/test/BaseFixedWidthField.test.cpp @@ -19,6 +19,7 @@ class TestBaseFixedWidthField : protected BaseFixedWidthField< Width > { }; SCENARIO( "BaseFixedWidthField" ) { + std::string string = "+abc"; auto iter = string.begin(); unsigned int position = 0; From a7687bd444e7d3d38b65acea700aa76097900230 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Thu, 30 Jan 2025 08:25:48 -0700 Subject: [PATCH 19/20] Removing eof checking --- src/tools/disco/Character.hpp | 2 +- src/tools/disco/Column.hpp | 2 +- src/tools/disco/FreeFormatCharacter.hpp | 4 ---- src/tools/disco/FreeFormatInteger.hpp | 4 ---- src/tools/disco/FreeFormatReal.hpp | 4 ---- src/tools/disco/Integer.hpp | 4 ++-- src/tools/disco/Real.hpp | 4 ++-- src/tools/disco/Record.hpp | 2 +- src/tools/disco/functions.hpp | 9 --------- 9 files changed, 7 insertions(+), 28 deletions(-) diff --git a/src/tools/disco/Character.hpp b/src/tools/disco/Character.hpp index 2d9236d..14a5eb2 100644 --- a/src/tools/disco/Character.hpp +++ b/src/tools/disco/Character.hpp @@ -48,7 +48,7 @@ class Character : public BaseFixedWidthField< Width > { value.reserve( Width ); unsigned int position = 0; - while( position < Width && ! ( isNewLine( iter ) || isEndOfFile( iter ) ) ) { + while( position < Width && ! isNewLine( iter ) ) { ++position; value.push_back( *iter++ ); diff --git a/src/tools/disco/Column.hpp b/src/tools/disco/Column.hpp index 255e081..4c01d78 100644 --- a/src/tools/disco/Column.hpp +++ b/src/tools/disco/Column.hpp @@ -40,7 +40,7 @@ class Column : public BaseFixedWidthField< Width > { static void read( Iterator& iter, const Iterator& end ) { unsigned int position = 0; - while( position < Width && ! ( isNewLine( iter ) || isEndOfFile( iter ) || iter >= end ) ) { + while( position < Width && ! ( isNewLine( iter ) || iter >= end ) ) { ++position; ++iter; diff --git a/src/tools/disco/FreeFormatCharacter.hpp b/src/tools/disco/FreeFormatCharacter.hpp index b9446bd..ab9f6c7 100644 --- a/src/tools/disco/FreeFormatCharacter.hpp +++ b/src/tools/disco/FreeFormatCharacter.hpp @@ -35,10 +35,6 @@ class FreeFormatCharacter : public BaseField { iter = std::find_if( iter, end, [] ( auto&& value ) { return ! std::isspace( value ); } ); - if ( isEndOfFile( iter ) ) { - - throw std::runtime_error( "Cannot read valid string: end of file encountered" ); - } auto temp = std::find_if( iter, end, [] ( auto&& value ) diff --git a/src/tools/disco/FreeFormatInteger.hpp b/src/tools/disco/FreeFormatInteger.hpp index 9994baf..3556be9 100644 --- a/src/tools/disco/FreeFormatInteger.hpp +++ b/src/tools/disco/FreeFormatInteger.hpp @@ -41,10 +41,6 @@ class FreeFormatInteger : public BaseField { iter = std::find_if( iter, end, [] ( auto&& value ) { return ! std::isspace( value ); } ); - if ( isEndOfFile( iter ) ) { - - throw std::runtime_error( "Cannot read valid integer: end of file encountered" ); - } // we are using fast_float::from_chars instead of std::from_chars since // not all standard c++ libraries implement the floating point version of diff --git a/src/tools/disco/FreeFormatReal.hpp b/src/tools/disco/FreeFormatReal.hpp index 2ab3799..9d6f2a4 100644 --- a/src/tools/disco/FreeFormatReal.hpp +++ b/src/tools/disco/FreeFormatReal.hpp @@ -41,10 +41,6 @@ class FreeFormatReal : public BaseField { iter = std::find_if( iter, end, [] ( auto&& value ) { return ! std::isspace( value ); } ); - if ( isEndOfFile( iter ) ) { - - throw std::runtime_error( "Cannot read valid real value: end of file encountered" ); - } // we are using fast_float::from_chars_advanced instead of std::from_chars // since not all standard c++ libraries implement the floating point version diff --git a/src/tools/disco/Integer.hpp b/src/tools/disco/Integer.hpp index 6d2333d..3969db0 100644 --- a/src/tools/disco/Integer.hpp +++ b/src/tools/disco/Integer.hpp @@ -48,7 +48,7 @@ class Integer : public BaseFixedWidthField< Width > { Representation value = 0; skipSpaces( iter, position ); - if ( isNewLine( iter ) || isEndOfFile( iter ) || Width == position || iter >= end ) { + if ( isNewLine( iter ) || Width == position || iter >= end ) { return value; } @@ -77,7 +77,7 @@ class Integer : public BaseFixedWidthField< Width > { skipSpaces( iter, position ); if ( Width != position ) { - if ( ! isNewLine( iter ) && ! isEndOfFile( iter ) ) { + if ( ! isNewLine( iter ) ) { throw std::runtime_error( "cannot parse invalid integer number 3" ); } diff --git a/src/tools/disco/Real.hpp b/src/tools/disco/Real.hpp index f28ee53..75447a1 100644 --- a/src/tools/disco/Real.hpp +++ b/src/tools/disco/Real.hpp @@ -40,7 +40,7 @@ class Real : public BaseFixedWidthField< Width > { Representation value = 0.0; skipSpaces( iter, position ); - if ( isNewLine( iter ) || isEndOfFile( iter ) || Width == position || iter >= end ) { + if ( isNewLine( iter ) || Width == position || iter >= end ) { return value; } @@ -71,7 +71,7 @@ class Real : public BaseFixedWidthField< Width > { skipSpaces( iter, position ); if ( Width != position ) { - if ( ! isNewLine( iter ) && ! isEndOfFile( iter ) ) { + if ( ! isNewLine( iter ) ) { throw std::runtime_error( "cannot parse invalid real number 3" ); } diff --git a/src/tools/disco/Record.hpp b/src/tools/disco/Record.hpp index 9fad8b9..5f08ddc 100644 --- a/src/tools/disco/Record.hpp +++ b/src/tools/disco/Record.hpp @@ -22,7 +22,7 @@ struct Record<> { template< typename Iterator > static void read( Iterator& iter, const Iterator& end ) { - while ( iter != end && ! ( isNewLine( iter )|| isEndOfFile( iter ) ) ) { + while ( iter != end && ! ( isNewLine( iter ) ) ) { ++iter; } diff --git a/src/tools/disco/functions.hpp b/src/tools/disco/functions.hpp index bc32fe3..883c490 100644 --- a/src/tools/disco/functions.hpp +++ b/src/tools/disco/functions.hpp @@ -69,15 +69,6 @@ bool isWhiteSpace( const Iterator& iter ) { return std::isspace( *iter ); } -/** - * @brief Return whether or not a character is the end of file character - */ -template < typename Iterator > -constexpr bool isEndOfFile( const Iterator& iter ) { - - return std::char_traits< char >::eof() == *iter; -} - } // disco namespace } // tools namespace } // njoy namespace From f2cfa0f19d973b4789c6f2d25e3382f8d9e50f84 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Thu, 30 Jan 2025 13:49:11 -0700 Subject: [PATCH 20/20] Adding todos --- src/tools/std20/views/test/iota.test.cpp | 2 ++ src/tools/std20/views/test/take.test.cpp | 3 +++ src/tools/std20/views/test/take_while.test.cpp | 3 +++ 3 files changed, 8 insertions(+) diff --git a/src/tools/std20/views/test/iota.test.cpp b/src/tools/std20/views/test/iota.test.cpp index 4be3dc9..07af5f1 100644 --- a/src/tools/std20/views/test/iota.test.cpp +++ b/src/tools/std20/views/test/iota.test.cpp @@ -78,6 +78,7 @@ SCENARIO( "iota_view" ) { CHECK( *( begin + 99 ) == 100 ); } // THEN +//! @todo investigate why this throws an exception // THEN( "it can be transformed into a vector using iterators" ) { // // std::vector< int > constructed( chunk.begin(), chunk.end() ); @@ -150,6 +151,7 @@ SCENARIO( "iota_view" ) { CHECK( *( end - 1 ) == 5 ); } // THEN +//! @todo investigate why this throws an exception // THEN( "it can be transformed into a vector using iterators" ) { // // std::vector< int > constructed( chunk.begin(), chunk.end() ); diff --git a/src/tools/std20/views/test/take.test.cpp b/src/tools/std20/views/test/take.test.cpp index 5117e06..b775fa2 100644 --- a/src/tools/std20/views/test/take.test.cpp +++ b/src/tools/std20/views/test/take.test.cpp @@ -81,6 +81,7 @@ SCENARIO( "take_view" ) { CHECK( std20::ranges::equal( values, original_modified ) ); } // THEN +//! @todo investigate why this throws an exception // THEN( "it can be transformed into a vector using iterators" ) { // // std::vector< int > constructed( chunk.begin(), chunk.end() ); @@ -148,6 +149,7 @@ SCENARIO( "take_view" ) { CHECK( std20::ranges::equal( values, original_modified ) ); } // THEN +//! @todo investigate why this throws an exception // THEN( "it can be transformed into a vector using iterators" ) { // // std::vector< int > constructed( chunk.begin(), chunk.end() ); @@ -223,6 +225,7 @@ SCENARIO( "take_view" ) { CHECK( 2 == chunk[2] ); } // THEN +//! @todo investigate why this throws an exception // THEN( "it can be transformed into a vector using iterators" ) { // // std::vector< int > constructed( chunk.begin(), chunk.end() ); diff --git a/src/tools/std20/views/test/take_while.test.cpp b/src/tools/std20/views/test/take_while.test.cpp index f366520..cefa935 100644 --- a/src/tools/std20/views/test/take_while.test.cpp +++ b/src/tools/std20/views/test/take_while.test.cpp @@ -70,6 +70,7 @@ SCENARIO( "take_while_view" ) { // CHECK( 2 == chunk.back() ); } // THEN +//! @todo investigate why this throws an exception // THEN( "it can be transformed into a vector using iterators" ) { // // std::vector< int > constructed( chunk.begin(), chunk.end() ); @@ -127,6 +128,7 @@ SCENARIO( "take_while_view" ) { // CHECK( -2 == chunk[0] ); } // THEN +//! @todo investigate why this throws an exception // THEN( "it can be transformed into a vector using iterators" ) { // // std::vector< int > constructed( chunk.begin(), chunk.end() ); @@ -187,6 +189,7 @@ SCENARIO( "take_while_view" ) { // CHECK( 0 == chunk.back() ); } // THEN +//! @todo investigate why this throws an exception // THEN( "it can be transformed into a vector using iterators" ) { // // std::vector< int > constructed( chunk.begin(), chunk.end() );