diff options
| author | Phil Nash | 2012-05-07 19:45:55 +0100 |
|---|---|---|
| committer | Phil Nash | 2012-05-07 19:45:55 +0100 |
| commit | e1cb8f25f2c1da70f1a99ec842e20d83ea4340ff (patch) | |
| tree | 8abd9bc0cefb670195a9fbc509617795b9ef9095 | |
| parent | a201f715a84c3f936e2442e40b4c7f3072d41326 (diff) | |
| download | catch3-e1cb8f25f2c1da70f1a99ec842e20d83ea4340ff.tar.gz | |
Fix for comparing (const) char* to NULL
| -rw-r--r-- | include/internal/catch_evaluate.hpp | 16 | ||||
| -rw-r--r-- | projects/SelfTest/ConditionTests.cpp | 6 | ||||
| -rw-r--r-- | projects/SelfTest/TestMain.cpp | 2 |
3 files changed, 20 insertions, 4 deletions
diff --git a/include/internal/catch_evaluate.hpp b/include/internal/catch_evaluate.hpp index 90acad26..38e14f1a 100644 --- a/include/internal/catch_evaluate.hpp +++ b/include/internal/catch_evaluate.hpp @@ -174,16 +174,26 @@ namespace Internal template<Operator Op, typename T> bool compare( long lhs, const T* rhs ) { - return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( NULL ), rhs ); - + return Evaluator<const T*, const T*, Op>::evaluate( reinterpret_cast<const T*>( lhs ), rhs ); } template<Operator Op, typename T> bool compare( long lhs, T* rhs ) { return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( lhs ), rhs ); - } + + template<Operator Op, typename T> + bool compare( const T* lhs, long rhs ) + { + return Evaluator<const T*, const T*, Op>::evaluate( lhs, reinterpret_cast<const T*>( rhs ) ); + } + + template<Operator Op, typename T> + bool compare( T* lhs, long rhs ) + { + return Evaluator<T*, T*, Op>::evaluate( lhs, reinterpret_cast<T*>( rhs ) ); + } } // end of namespace Internal } // end of namespace Catch diff --git a/projects/SelfTest/ConditionTests.cpp b/projects/SelfTest/ConditionTests.cpp index f14da68d..e9a8f685 100644 --- a/projects/SelfTest/ConditionTests.cpp +++ b/projects/SelfTest/ConditionTests.cpp @@ -221,6 +221,9 @@ TEST_CASE( "succeeding/conditions/negative ints", } #endif +inline const char* returnsConstNull(){ return NULL; } +inline char* returnsNull(){ return NULL; } + TEST_CASE( "./succeeding/conditions/ptr", "Pointers can be compared to null" ) { @@ -241,6 +244,9 @@ TEST_CASE( "./succeeding/conditions/ptr", const TestData* const cpc = p; REQUIRE( cpc != NULL ); + REQUIRE( returnsNull() == NULL ); + REQUIRE( returnsConstNull() == NULL ); + // REQUIRE( NULL != p ); // gives warning, but should compile and run ok } diff --git a/projects/SelfTest/TestMain.cpp b/projects/SelfTest/TestMain.cpp index a95402dc..48932dca 100644 --- a/projects/SelfTest/TestMain.cpp +++ b/projects/SelfTest/TestMain.cpp @@ -43,7 +43,7 @@ TEST_CASE( "selftest/main", "Runs all Catch self tests and checks their results" "Number of 'succeeding' tests is fixed" ) { runner.runMatching( "./succeeding/*" ); - CHECK( runner.getTotals().assertions.passed == 273 ); + CHECK( runner.getTotals().assertions.passed == 275 ); CHECK( runner.getTotals().assertions.failed == 0 ); } |