2019-01-15 13:27:34 -05:00
|
|
|
cmake_minimum_required(VERSION 3.0.2)
|
2015-08-20 21:09:14 -04:00
|
|
|
|
2015-09-23 11:43:36 -04:00
|
|
|
project(GSLTests CXX)
|
2015-08-20 21:09:14 -04:00
|
|
|
|
2017-04-25 20:08:36 -04:00
|
|
|
# will make visual studio generated project group files
|
|
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
|
2017-07-13 16:53:56 -04:00
|
|
|
list(APPEND CATCH_CMAKE_ARGS
|
2017-08-16 21:38:47 -04:00
|
|
|
"-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/external"
|
2017-07-13 16:53:56 -04:00
|
|
|
"-DNO_SELFTEST=true"
|
|
|
|
)
|
2016-03-23 19:53:00 -04:00
|
|
|
|
2017-08-16 22:00:30 -04:00
|
|
|
if(GIT_FOUND)
|
|
|
|
# add catch
|
|
|
|
ExternalProject_Add(
|
|
|
|
catch
|
|
|
|
PREFIX ${CMAKE_BINARY_DIR}/catch
|
2017-11-14 11:44:56 -05:00
|
|
|
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
|
|
|
|
GIT_TAG v2.0.1
|
2017-08-16 22:00:30 -04:00
|
|
|
CMAKE_ARGS ${CATCH_CMAKE_ARGS}
|
|
|
|
LOG_DOWNLOAD 1
|
|
|
|
UPDATE_DISCONNECTED 1
|
|
|
|
)
|
|
|
|
else()
|
|
|
|
# assume catch is installed in a system directory
|
|
|
|
add_custom_target(catch)
|
|
|
|
endif()
|
2015-08-20 21:09:14 -04:00
|
|
|
|
2018-06-15 13:13:11 -04:00
|
|
|
if (MSVC AND (GSL_CXX_STANDARD EQUAL 17))
|
2018-08-13 00:44:17 -04:00
|
|
|
set(GSL_CPLUSPLUS_OPT -Zc:__cplusplus -permissive-)
|
2018-06-15 13:13:11 -04:00
|
|
|
endif()
|
|
|
|
|
2017-04-25 20:08:36 -04:00
|
|
|
# this interface adds compile options to how the tests are run
|
|
|
|
# please try to keep entries ordered =)
|
|
|
|
add_library(gsl_tests_config INTERFACE)
|
2019-01-15 13:27:34 -05:00
|
|
|
if(MSVC) # MSVC or simulating MSVC
|
|
|
|
target_compile_options(gsl_tests_config INTERFACE
|
|
|
|
${GSL_CPLUSPLUS_OPT}
|
2017-04-25 20:08:36 -04:00
|
|
|
/EHsc
|
|
|
|
/W4
|
|
|
|
/WX
|
2019-01-15 13:27:34 -05:00
|
|
|
$<$<CXX_COMPILER_ID:Clang>:
|
|
|
|
-Weverything
|
|
|
|
-Wno-c++98-compat
|
|
|
|
-Wno-c++98-compat-pedantic
|
|
|
|
-Wno-missing-braces
|
|
|
|
-Wno-missing-prototypes
|
|
|
|
-Wno-unknown-attributes
|
|
|
|
$<$<EQUAL:${GSL_CXX_STANDARD},14>:-Wno-unused-member-function>
|
|
|
|
>
|
|
|
|
)
|
|
|
|
else()
|
|
|
|
target_compile_options(gsl_tests_config INTERFACE
|
2017-04-25 20:08:36 -04:00
|
|
|
-fno-strict-aliasing
|
|
|
|
-Wall
|
|
|
|
-Wcast-align
|
|
|
|
-Wconversion
|
|
|
|
-Wctor-dtor-privacy
|
|
|
|
-Werror
|
|
|
|
-Wextra
|
|
|
|
-Wpedantic
|
|
|
|
-Wshadow
|
|
|
|
-Wsign-conversion
|
2019-01-15 13:27:34 -05:00
|
|
|
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:
|
|
|
|
-Weverything
|
|
|
|
-Wno-c++98-compat
|
|
|
|
-Wno-c++98-compat-pedantic
|
|
|
|
-Wno-missing-braces
|
|
|
|
-Wno-missing-prototypes
|
|
|
|
-Wno-padded
|
|
|
|
-Wno-unknown-attributes
|
|
|
|
$<$<EQUAL:${GSL_CXX_STANDARD},14>:-Wno-unused-member-function>
|
|
|
|
-Wno-weak-vtables
|
|
|
|
>
|
|
|
|
$<$<CXX_COMPILER_ID:Clang>:
|
|
|
|
$<$<CXX_COMPILER_VERSION:5.0.2>:-Wno-undefined-func-template>
|
|
|
|
>
|
|
|
|
)
|
|
|
|
endif(MSVC)
|
2017-04-25 20:08:36 -04:00
|
|
|
|
2017-08-16 21:38:47 -04:00
|
|
|
# for tests to find the catch header
|
|
|
|
target_include_directories(gsl_tests_config INTERFACE
|
|
|
|
${CMAKE_BINARY_DIR}/external/include
|
|
|
|
)
|
|
|
|
|
2017-04-25 20:08:36 -04:00
|
|
|
# set definitions for tests
|
|
|
|
target_compile_definitions(gsl_tests_config INTERFACE
|
|
|
|
GSL_THROW_ON_CONTRACT_VIOLATION
|
|
|
|
)
|
2015-08-20 21:09:14 -04:00
|
|
|
|
2017-07-13 16:53:56 -04:00
|
|
|
# create the main executable for each test. this reduces the compile time
|
|
|
|
# of each test by pre-compiling catch.
|
|
|
|
add_library(test_catch STATIC test.cpp)
|
|
|
|
target_link_libraries(test_catch
|
|
|
|
GSL
|
|
|
|
gsl_tests_config
|
|
|
|
)
|
|
|
|
add_dependencies(test_catch catch)
|
|
|
|
set_property(TARGET test_catch PROPERTY FOLDER "GSL_tests")
|
|
|
|
|
2015-09-21 15:04:06 -04:00
|
|
|
function(add_gsl_test name)
|
2017-02-07 18:59:37 -05:00
|
|
|
add_executable(${name} ${name}.cpp)
|
2017-04-25 20:08:36 -04:00
|
|
|
target_link_libraries(${name}
|
|
|
|
GSL
|
2017-07-13 16:53:56 -04:00
|
|
|
test_catch
|
2017-04-25 20:08:36 -04:00
|
|
|
gsl_tests_config
|
|
|
|
)
|
2017-07-13 16:53:56 -04:00
|
|
|
add_dependencies(${name} catch)
|
2015-09-21 15:04:06 -04:00
|
|
|
add_test(
|
2015-09-23 11:43:36 -04:00
|
|
|
${name}
|
|
|
|
${name}
|
2015-09-21 15:04:06 -04:00
|
|
|
)
|
2017-04-25 20:08:36 -04:00
|
|
|
# group all tests under GSL_tests
|
|
|
|
set_property(TARGET ${name} PROPERTY FOLDER "GSL_tests")
|
2015-09-21 15:04:06 -04:00
|
|
|
endfunction()
|
|
|
|
|
2016-02-24 14:26:28 -05:00
|
|
|
add_gsl_test(span_tests)
|
2016-02-24 14:03:33 -05:00
|
|
|
add_gsl_test(multi_span_tests)
|
2015-11-24 15:49:03 -05:00
|
|
|
add_gsl_test(strided_span_tests)
|
2015-11-04 15:42:27 -05:00
|
|
|
add_gsl_test(string_span_tests)
|
2015-09-21 15:04:06 -04:00
|
|
|
add_gsl_test(at_tests)
|
|
|
|
add_gsl_test(bounds_tests)
|
|
|
|
add_gsl_test(notnull_tests)
|
|
|
|
add_gsl_test(assertion_tests)
|
|
|
|
add_gsl_test(utils_tests)
|
|
|
|
add_gsl_test(owner_tests)
|
2016-10-17 15:42:58 -04:00
|
|
|
add_gsl_test(byte_tests)
|
2016-11-17 13:45:06 -05:00
|
|
|
add_gsl_test(algorithm_tests)
|
Dev/annagrin/remove explicit not null constructor (#743)
* Added c++17 test configurations for clang5.0 and clang6.0
* Removed explicit not_null constructor, sloppy_not_null, added strict_not_null
We added explicit not_null constructor in version 2.0.0.
It proved very difficult to switch to the new version for
large code bases that adopted previous versions of gsl,
due to not_null used extensively in the code. Still, using
explicit constructor is very benefitial for new code, since
it encorages better API design and make null checks intentional.
To resolve the issue, this change:
- removes explicit keyword from not_null constructor
- removes unneded sloppy_not_null type
- adds strict_not_null type to behave the same way as v2 not_null
- updates tests
* Removed explicit not_null constructor, sloppy_not_null, added strict_not_null
We added explicit not_null constructor in version 2.0.0.
It proved very difficult to switch to the new version for
large code bases that adopted previous versions of gsl,
due to not_null used extensively in the code. Still, using
explicit constructor is very benefitial for new code, since
it encorages better API design and make null checks intentional.
To resolve the issue, this change:
- removes explicit keyword from not_null constructor
- removes unneded sloppy_not_null type
- adds strict_not_null type to behave the same way as v2 not_null
- updates tests
* fixed build break for gcc7
* added more tests
* added more non-compiling tests
* Addressed PR comments and suppressed a code analysis warning
* Fixed test failure in not_null tests
2019-01-14 19:45:47 -05:00
|
|
|
add_gsl_test(strict_notnull_tests)
|
2018-03-15 19:00:08 -04:00
|
|
|
|
|
|
|
|
|
|
|
# No exception tests
|
|
|
|
|
|
|
|
foreach(flag_var
|
|
|
|
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
|
|
|
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
|
|
|
STRING (REGEX REPLACE "/EHsc" "" ${flag_var} "${${flag_var}}")
|
|
|
|
endforeach(flag_var)
|
|
|
|
|
|
|
|
# this interface adds compile options to how the tests are run
|
|
|
|
# please try to keep entries ordered =)
|
|
|
|
add_library(gsl_tests_config_noexcept INTERFACE)
|
2019-01-15 13:27:34 -05:00
|
|
|
if(MSVC) # MSVC or simulating MSVC
|
|
|
|
target_compile_definitions(gsl_tests_config_noexcept INTERFACE
|
|
|
|
_HAS_EXCEPTIONS=0
|
|
|
|
)
|
|
|
|
target_compile_options(gsl_tests_config_noexcept INTERFACE
|
|
|
|
${GSL_CPLUSPLUS_OPT}
|
2018-03-15 19:00:08 -04:00
|
|
|
/W4
|
|
|
|
/WX
|
2019-01-15 13:27:34 -05:00
|
|
|
$<$<CXX_COMPILER_ID:MSVC>:
|
|
|
|
/wd4577
|
|
|
|
/wd4702
|
|
|
|
>
|
|
|
|
$<$<CXX_COMPILER_ID:Clang>:
|
|
|
|
-Weverything
|
|
|
|
-Wno-c++98-compat
|
|
|
|
-Wno-c++98-compat-pedantic
|
|
|
|
-Wno-missing-prototypes
|
|
|
|
-Wno-unknown-attributes
|
|
|
|
>
|
|
|
|
)
|
|
|
|
else()
|
|
|
|
target_compile_options(gsl_tests_config_noexcept INTERFACE
|
2018-03-15 19:00:08 -04:00
|
|
|
-fno-exceptions
|
2019-01-15 13:27:34 -05:00
|
|
|
-fno-strict-aliasing
|
2018-03-15 19:00:08 -04:00
|
|
|
-Wall
|
|
|
|
-Wcast-align
|
|
|
|
-Wconversion
|
|
|
|
-Wctor-dtor-privacy
|
|
|
|
-Werror
|
|
|
|
-Wextra
|
|
|
|
-Wpedantic
|
|
|
|
-Wshadow
|
|
|
|
-Wsign-conversion
|
2019-01-15 13:27:34 -05:00
|
|
|
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:
|
|
|
|
-Weverything
|
|
|
|
-Wno-c++98-compat
|
|
|
|
-Wno-c++98-compat-pedantic
|
|
|
|
-Wno-missing-prototypes
|
|
|
|
-Wno-unknown-attributes
|
|
|
|
-Wno-weak-vtables
|
|
|
|
>
|
|
|
|
)
|
|
|
|
endif(MSVC)
|
2018-03-15 19:00:08 -04:00
|
|
|
|
|
|
|
# set definitions for tests
|
|
|
|
target_compile_definitions(gsl_tests_config_noexcept INTERFACE
|
|
|
|
GSL_TERMINATE_ON_CONTRACT_VIOLATION
|
|
|
|
)
|
|
|
|
|
|
|
|
function(add_gsl_test_noexcept name)
|
|
|
|
add_executable(${name} ${name}.cpp)
|
|
|
|
target_link_libraries(${name}
|
|
|
|
GSL
|
|
|
|
gsl_tests_config_noexcept
|
|
|
|
)
|
|
|
|
add_test(
|
|
|
|
${name}
|
|
|
|
${name}
|
|
|
|
)
|
|
|
|
# group all tests under GSL_tests_noexcept
|
|
|
|
set_property(TARGET ${name} PROPERTY FOLDER "GSL_tests_noexcept")
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
add_gsl_test_noexcept(no_exception_throw_tests)
|
|
|
|
add_gsl_test_noexcept(no_exception_ensure_tests)
|