From d18af2e18d7cb029b1e583dc714fb5d79914039b Mon Sep 17 00:00:00 2001 From: MelReyCG Date: Thu, 23 Mar 2023 11:52:50 +0100 Subject: [PATCH 1/4] stringToArray now throws exceptions instead of errors --- src/Macros.hpp | 6 +++++ src/input.hpp | 59 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/src/Macros.hpp b/src/Macros.hpp index aa8fe6f4..544f5e19 100644 --- a/src/Macros.hpp +++ b/src/Macros.hpp @@ -180,6 +180,12 @@ } \ } while( false ) +/** + * @brief Throw an exception. + * @param MSG The message to associate with the error, can be anything streamable to a std::ostream. + */ +#define LVARRAY_THROW( MSG, TYPE ) LVARRAY_THROW_IF( true, MSG, TYPE ) + /// Assert @p EXP is true with no message. #define LVARRAY_ASSERT( EXP ) LVARRAY_ASSERT_MSG( EXP, "" ) diff --git a/src/input.hpp b/src/input.hpp index fde15d56..69ae7acb 100644 --- a/src/input.hpp +++ b/src/input.hpp @@ -62,9 +62,10 @@ struct StringToArrayHelper { inputStream >> arrayValue; - LVARRAY_ERROR_IF( inputStream.fail(), + LVARRAY_THROW_IF( inputStream.fail(), "Invalid value of type " << typeid(T).name() << " in: " << - ( inputStream.eof() ? "" : inputStream.str().substr( inputStream.tellg() ) ) ); + ( inputStream.eof() ? "" : inputStream.str().substr( inputStream.tellg() ) ), + std::invalid_argument ); } /** @@ -79,7 +80,8 @@ struct StringToArrayHelper INDEX_TYPE const * const dims, std::istringstream & inputStream ) { - LVARRAY_ERROR_IF( inputStream.peek() != '{', "opening { not found for input array: "<( valueString.find_first_not_of( '{' )); - LVARRAY_ERROR_IF( ndims!=NDIM, + LVARRAY_THROW_IF( ndims!=NDIM, "number of dimensions in string ("< Date: Thu, 23 Mar 2023 12:16:13 +0100 Subject: [PATCH 2/4] Adding missing quotemarks to stringToArray errors. --- src/input.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/input.hpp b/src/input.hpp index 69ae7acb..ad97edc8 100644 --- a/src/input.hpp +++ b/src/input.hpp @@ -80,7 +80,7 @@ struct StringToArrayHelper INDEX_TYPE const * const dims, std::istringstream & inputStream ) { - LVARRAY_THROW_IF( inputStream.peek() != '{', "opening { not found for input array: "< Date: Thu, 23 Mar 2023 16:10:12 +0100 Subject: [PATCH 3/4] Throwing exception when a token is missing before a '}' --- src/input.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/input.hpp b/src/input.hpp index ad97edc8..12cc033a 100644 --- a/src/input.hpp +++ b/src/input.hpp @@ -242,6 +242,10 @@ static void stringToArray( Array< T, NDIM, PERMUTATION, INDEX_TYPE, BUFFER_TYPE } else if( c=='}' ) { + LVARRAY_THROW_IF( lastChar==',', + "character '}' follows '"< Date: Mon, 27 Mar 2023 12:01:58 +0200 Subject: [PATCH 4/4] Changed testinput so it expects exceptions --- unitTests/testInput.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/unitTests/testInput.cpp b/unitTests/testInput.cpp index a6b785c0..3cf89a82 100644 --- a/unitTests/testInput.cpp +++ b/unitTests/testInput.cpp @@ -38,62 +38,62 @@ TEST( input, stringToArrayErrors ) { input = " { 10 1 } "; ArrayT< int, RAJA::PERM_I > array; - EXPECT_DEATH_IF_SUPPORTED( input::stringToArray( array, input ), IGNORE_OUTPUT ); + ASSERT_THROW( input::stringToArray( array, input ), std::invalid_argument ); } { input = " { { 1, 2 }{ 3, 4 } } "; ArrayT< int, RAJA::PERM_IJ > array; - EXPECT_DEATH_IF_SUPPORTED( input::stringToArray( array, input ), IGNORE_OUTPUT ); + ASSERT_THROW( input::stringToArray( array, input ), std::invalid_argument ); } // This should fail the num('{')==num('}') test { input = " { { {0,1,2},{3,4,5} }, { {6,7,8},{9,10,11} }, { {12,13,14},{15,16,17} } , { {18,19,20},{21,22,23} } "; ArrayT< int, RAJA::PERM_IJK > array; - EXPECT_DEATH_IF_SUPPORTED( input::stringToArray( array, input ), IGNORE_OUTPUT ); + ASSERT_THROW( input::stringToArray( array, input ), std::invalid_argument ); } { input = " { { {0,1,2},{3,4,5} }, { {6,7,8},{9,10,11} }, { {12,13,14},{15,16,17} , { {18,19,20},{21,22,23} } }"; ArrayT< int, RAJA::PERM_IKJ > array; - EXPECT_DEATH_IF_SUPPORTED( input::stringToArray( array, input ), IGNORE_OUTPUT ); + ASSERT_THROW( input::stringToArray( array, input ), std::invalid_argument ); } { input = " { { {0,1,2},{3,4,5} }, { {6,7,8},{9,10,11} }, { {12,13,14,{15,16,17} } , { {18,19,20},{21,22,23} } }"; ArrayT< int, RAJA::PERM_JIK > array; - EXPECT_DEATH_IF_SUPPORTED( input::stringToArray( array, input ), IGNORE_OUTPUT ); + ASSERT_THROW( input::stringToArray( array, input ), std::invalid_argument ); } { input = " { { {0,1,2},{3,4,5} }, { {6,7,8,{9,10,11} }, { {12,13,14},{15,16,17} } , { {18,19,20},{21,22,23} } }"; ArrayT< int, RAJA::PERM_JKI > array; - EXPECT_DEATH_IF_SUPPORTED( input::stringToArray( array, input ), IGNORE_OUTPUT ); + ASSERT_THROW( input::stringToArray( array, input ), std::invalid_argument ); } { input = " { { 0,1,2},{3,4,5} }, { {6,7,8},{9,10,11} }, { {12,13,14},{15,16,17} } , { {18,19,20},{21,22,23} } }"; ArrayT< int, RAJA::PERM_KIJ > array; - EXPECT_DEATH_IF_SUPPORTED( input::stringToArray( array, input ), IGNORE_OUTPUT ); + ASSERT_THROW( input::stringToArray( array, input ), std::invalid_argument ); } { input = " { {0,1,2},{3,4,5} }, { {6,7,8},{9,10,11} }, { {12,13,14},{15,16,17} } , { {18,19,20},{21,22,23} } "; ArrayT< int, RAJA::PERM_KJI > array; - EXPECT_DEATH_IF_SUPPORTED( input::stringToArray( array, input ), IGNORE_OUTPUT ); + ASSERT_THROW( input::stringToArray( array, input ), std::invalid_argument ); } { input = " { { {,1,2},{3,4,5} }, { {6,7,8},{9,10,11} }, { {12,13,14},{15,16,17} } , { {18,19,20},{21,22,23} } }"; ArrayT< int, RAJA::PERM_IJK > array; - EXPECT_DEATH_IF_SUPPORTED( input::stringToArray( array, input ), IGNORE_OUTPUT ); + ASSERT_THROW( input::stringToArray( array, input ), std::invalid_argument ); } { input = " { { {},{3,4,5} }, { {6,7,8},{9,10,11} }, { {12,13,14},{15,16,17} } , { {18,19,20},{21,22,23} } }"; ArrayT< int, RAJA::PERM_IJK > array; - EXPECT_DEATH_IF_SUPPORTED( input::stringToArray( array, input ), IGNORE_OUTPUT ); + ASSERT_THROW( input::stringToArray( array, input ), std::invalid_argument ); } { input = " { { {0,1,2}}{ } }"; ArrayT< int, RAJA::PERM_IJK > array; - EXPECT_DEATH_IF_SUPPORTED( input::stringToArray( array, input ), IGNORE_OUTPUT ); + ASSERT_THROW( input::stringToArray( array, input ), std::invalid_argument ); }