Skip to content
Snippets Groups Projects
Commit 246f74a1 authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Added tests for assert macros in TNL

parent 23e59854
No related branches found
No related tags found
No related merge requests found
/***************************************************************************
AssertCudaTest.h - description
-------------------
begin : Sep 7, 2018
copyright : (C) 2018 by Tomas Oberhuber et al.
email : tomas.oberhuber@fjfi.cvut.cz
***************************************************************************/
/* See Copyright Notice in tnl/Copyright */
#include <TNL/Assert.h>
#include <TNL/Devices/Cuda.h>
#include <TNL/Exceptions/CudaRuntimeError.h>
#ifdef HAVE_GTEST
#include <gtest/gtest.h>
using namespace TNL;
#ifdef HAVE_CUDA
#define WRAP_ASSERT( suffix, statement, not_failing ) \
__global__ \
void kernel_##suffix( int* output ) \
{ \
const bool tr = true; \
const bool fa = false; \
const int two = 2; \
const int ten = 10; \
/* pointers */ \
const double* data_null = nullptr; \
const double** data_full = &data_null; \
\
statement \
\
/* actually do something to test if the execution control gets here */ \
output[0] = 1; \
} \
\
TEST( AssertCudaTest, suffix ) \
{ \
int* output_cuda; \
int output_host = 0; \
\
cudaMalloc( (void**)&output_cuda, sizeof(int) ); \
cudaMemcpy( output_cuda, &output_host, sizeof(int), cudaMemcpyHostToDevice ); \
\
kernel_##suffix<<<1, 1>>>(output_cuda); \
cudaDeviceSynchronize(); \
if( not_failing ) { \
EXPECT_NO_THROW( TNL_CHECK_CUDA_DEVICE; ); \
cudaMemcpy( &output_host, output_cuda, sizeof(int), cudaMemcpyDeviceToHost ); \
cudaFree( output_cuda ); \
EXPECT_EQ( output_host, 1 ); \
} \
else \
EXPECT_THROW( TNL_CHECK_CUDA_DEVICE;, \
TNL::Exceptions::CudaRuntimeError ); \
} \
// not failing statements:
WRAP_ASSERT( test1, TNL_ASSERT_TRUE( true, "true is true" );, true );
WRAP_ASSERT( test2, TNL_ASSERT_TRUE( tr, "true is true" );, true );
WRAP_ASSERT( test3, TNL_ASSERT_FALSE( false, "false is false" );, true );
WRAP_ASSERT( test4, TNL_ASSERT_FALSE( fa, "false is false" );, true );
WRAP_ASSERT( test5, TNL_ASSERT_EQ( two, 2, "two is 2" );, true );
WRAP_ASSERT( test6, TNL_ASSERT_NE( ten, 2, "ten is not 2" );, true );
WRAP_ASSERT( test7, TNL_ASSERT_LT( two, 10, "two < 10" );, true );
WRAP_ASSERT( test8, TNL_ASSERT_LE( two, 10, "two <= 10" );, true );
WRAP_ASSERT( test9, TNL_ASSERT_LE( two, 2, "two <= 2" );, true );
WRAP_ASSERT( test10, TNL_ASSERT_GT( ten, 2, "ten > 2" );, true );
WRAP_ASSERT( test11, TNL_ASSERT_GE( ten, 10, "ten >= 10" );, true );
WRAP_ASSERT( test12, TNL_ASSERT_GE( ten, 2, "ten >= 2" );, true );
WRAP_ASSERT( test13, TNL_ASSERT_FALSE( data_null, "nullptr is false" );, true );
WRAP_ASSERT( test14, TNL_ASSERT_TRUE( data_full, "non-nullptr is true" );, true );
// errors:
WRAP_ASSERT( test15, TNL_ASSERT_TRUE( false, "false is true" );, false );
WRAP_ASSERT( test16, TNL_ASSERT_TRUE( fa, "false is true" );, false );
WRAP_ASSERT( test17, TNL_ASSERT_FALSE( true, "true is false" );, false );
WRAP_ASSERT( test18, TNL_ASSERT_FALSE( tr, "true is false" );, false );
WRAP_ASSERT( test19, TNL_ASSERT_NE( two, 2, "two != 2" );, false );
WRAP_ASSERT( test20, TNL_ASSERT_EQ( ten, 2, "ten == 2" );, false );
WRAP_ASSERT( test21, TNL_ASSERT_GE( two, 10, "two >= 10" );, false );
WRAP_ASSERT( test22, TNL_ASSERT_GT( two, 10, "two > 10" );, false );
WRAP_ASSERT( test23, TNL_ASSERT_GT( two, 2, "two > 2" );, false );
WRAP_ASSERT( test24, TNL_ASSERT_LE( ten, 2, "ten <= 2" );, false );
WRAP_ASSERT( test25, TNL_ASSERT_LT( ten, 10, "ten < 10" );, false );
WRAP_ASSERT( test26, TNL_ASSERT_LT( ten, 2, "ten < 2" );, false );
WRAP_ASSERT( test27, TNL_ASSERT_TRUE( data_null, "nullptr is true" );, false );
WRAP_ASSERT( test28, TNL_ASSERT_FALSE( data_full, "non-nullptr is false" );, false );
#endif
#endif
#include "GtestMissingError.h"
int main( int argc, char* argv[] )
{
#ifdef HAVE_GTEST
::testing::InitGoogleTest( &argc, argv );
return RUN_ALL_TESTS();
#else
throw GtestMissingError();
#endif
}
/***************************************************************************
AssertTest.h - description
-------------------
begin : Sep 7, 2018
copyright : (C) 2018 by Tomas Oberhuber et al.
email : tomas.oberhuber@fjfi.cvut.cz
***************************************************************************/
/* See Copyright Notice in tnl/Copyright */
#include <TNL/Assert.h>
#ifdef HAVE_GTEST
#include <gtest/gtest.h>
using namespace TNL;
TEST( AssertTest, basicTest )
{
const bool tr = true;
const bool fa = false;
const int two = 2;
const int ten = 10;
// true statements:
EXPECT_NO_THROW( TNL_ASSERT_TRUE( true, "true is true" ); );
EXPECT_NO_THROW( TNL_ASSERT_TRUE( tr, "true is true" ); );
EXPECT_NO_THROW( TNL_ASSERT_FALSE( false, "false is false" ); );
EXPECT_NO_THROW( TNL_ASSERT_FALSE( fa, "false is false" ); );
EXPECT_NO_THROW( TNL_ASSERT_EQ( two, 2, "two is 2" ); );
EXPECT_NO_THROW( TNL_ASSERT_NE( ten, 2, "ten is not 2" ); );
EXPECT_NO_THROW( TNL_ASSERT_LT( two, 10, "two < 10" ); );
EXPECT_NO_THROW( TNL_ASSERT_LE( two, 10, "two <= 10" ); );
EXPECT_NO_THROW( TNL_ASSERT_LE( two, 2, "two <= 2" ); );
EXPECT_NO_THROW( TNL_ASSERT_GT( ten, 2, "ten > 2" ); );
EXPECT_NO_THROW( TNL_ASSERT_GE( ten, 10, "ten >= 10" ); );
EXPECT_NO_THROW( TNL_ASSERT_GE( ten, 2, "ten >= 2" ); );
// errors:
EXPECT_ANY_THROW( TNL_ASSERT_TRUE( false, "false is true" ); );
EXPECT_ANY_THROW( TNL_ASSERT_TRUE( fa, "false is true" ); );
EXPECT_ANY_THROW( TNL_ASSERT_FALSE( true, "true is false" ); );
EXPECT_ANY_THROW( TNL_ASSERT_FALSE( tr, "true is false" ); );
EXPECT_ANY_THROW( TNL_ASSERT_NE( two, 2, "two != 2" ); );
EXPECT_ANY_THROW( TNL_ASSERT_EQ( ten, 2, "ten == 2" ); );
EXPECT_ANY_THROW( TNL_ASSERT_GE( two, 10, "two >= 10" ); );
EXPECT_ANY_THROW( TNL_ASSERT_GT( two, 10, "two > 10" ); );
EXPECT_ANY_THROW( TNL_ASSERT_GT( two, 2, "two > 2" ); );
EXPECT_ANY_THROW( TNL_ASSERT_LE( ten, 2, "ten <= 2" ); );
EXPECT_ANY_THROW( TNL_ASSERT_LT( ten, 10, "ten < 10" ); );
EXPECT_ANY_THROW( TNL_ASSERT_LT( ten, 2, "ten < 2" ); );
// pointers
const double* data_null = nullptr;
const double** data_full = &data_null;
// true statements:
EXPECT_NO_THROW( TNL_ASSERT_FALSE( data_null, "nullptr is false" ); );
EXPECT_NO_THROW( TNL_ASSERT_TRUE( data_full, "non-nullptr is true" ); );
// errors
EXPECT_ANY_THROW( TNL_ASSERT_TRUE( data_null, "nullptr is true" ); );
EXPECT_ANY_THROW( TNL_ASSERT_FALSE( data_full, "non-nullptr is false" ); );
}
#endif
#include "GtestMissingError.h"
int main( int argc, char* argv[] )
{
#ifdef HAVE_GTEST
::testing::InitGoogleTest( &argc, argv );
return RUN_ALL_TESTS();
#else
throw GtestMissingError();
#endif
}
......@@ -5,24 +5,37 @@ ADD_SUBDIRECTORY( Functions )
ADD_SUBDIRECTORY( Matrices )
ADD_SUBDIRECTORY( Meshes )
ADD_EXECUTABLE( AssertTest AssertTest.cpp )
TARGET_COMPILE_OPTIONS( AssertTest PRIVATE ${CXX_TESTS_FLAGS} )
TARGET_LINK_LIBRARIES( AssertTest
${GTEST_BOTH_LIBRARIES}
tnl )
if( BUILD_CUDA )
CUDA_ADD_EXECUTABLE( AssertCudaTest AssertCudaTest.cu OPTIONS ${CXX_TESTS_FLAGS} )
TARGET_LINK_LIBRARIES( AssertCudaTest
${GTEST_BOTH_LIBRARIES}
tnl )
endif()
ADD_EXECUTABLE( UniquePointerTest UniquePointerTest.cpp )
TARGET_COMPILE_OPTIONS( UniquePointerTest PRIVATE ${CXX_TESTS_FLAGS} )
TARGET_LINK_LIBRARIES( UniquePointerTest
${GTEST_BOTH_LIBRARIES}
tnl )
IF( BUILD_CUDA )
if( BUILD_CUDA )
CUDA_ADD_EXECUTABLE( FileTest FileTest.cu OPTIONS ${CXX_TESTS_FLAGS} )
TARGET_LINK_LIBRARIES( FileTest
${GTEST_BOTH_LIBRARIES}
tnl )
ELSE( BUILD_CUDA )
else()
ADD_EXECUTABLE( FileTest FileTest.cpp )
TARGET_COMPILE_OPTIONS( FileTest PRIVATE ${CXX_TESTS_FLAGS} )
TARGET_LINK_LIBRARIES( FileTest
${GTEST_BOTH_LIBRARIES}
tnl )
ENDIF( BUILD_CUDA )
endif()
ADD_EXECUTABLE( StringTest StringTest.cpp )
TARGET_COMPILE_OPTIONS( StringTest PRIVATE ${CXX_TESTS_FLAGS} )
......@@ -42,6 +55,10 @@ TARGET_LINK_LIBRARIES( SaveAndLoadMeshfunctionTest
${GTEST_BOTH_LIBRARIES}
tnl )
ADD_TEST( AssertTest ${EXECUTABLE_OUTPUT_PATH}/AssertTest${CMAKE_EXECUTABLE_SUFFIX} )
if( BUILD_CUDA )
ADD_TEST( AssertCudaTest ${EXECUTABLE_OUTPUT_PATH}/AssertCudaTest${CMAKE_EXECUTABLE_SUFFIX} )
endif()
ADD_TEST( FileTest ${EXECUTABLE_OUTPUT_PATH}/FileTest${CMAKE_EXECUTABLE_SUFFIX} )
ADD_TEST( StringTest ${EXECUTABLE_OUTPUT_PATH}/StringTest${CMAKE_EXECUTABLE_SUFFIX} )
ADD_TEST( ObjectTest ${EXECUTABLE_OUTPUT_PATH}/ObjectTest${CMAKE_EXECUTABLE_SUFFIX} )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment