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)
|
2020-04-18 06:30:17 -04:00
|
|
|
include(FindPkgConfig)
|
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)
|
|
|
|
|
2020-04-18 06:30:17 -04:00
|
|
|
pkg_search_module(GTestMain gtest_main)
|
|
|
|
if (NOT GTestMain_FOUND)
|
|
|
|
configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
|
|
|
|
execute_process(
|
|
|
|
COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
|
|
|
|
RESULT_VARIABLE result
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download
|
|
|
|
)
|
|
|
|
if(result)
|
|
|
|
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
|
|
|
|
endif()
|
2016-03-23 19:53:00 -04:00
|
|
|
|
2020-04-18 06:30:17 -04:00
|
|
|
execute_process(
|
|
|
|
COMMAND ${CMAKE_COMMAND} --build .
|
|
|
|
RESULT_VARIABLE result
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download
|
|
|
|
)
|
|
|
|
if(result)
|
|
|
|
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
|
|
|
|
endif()
|
2015-08-20 21:09:14 -04:00
|
|
|
|
2020-04-18 06:30:17 -04:00
|
|
|
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
|
|
|
set(GTestMain_LIBRARIES gtest_main)
|
2019-12-03 17:32:25 -05:00
|
|
|
|
2020-04-18 06:30:17 -04:00
|
|
|
add_subdirectory(
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/googletest-src
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/googletest-build
|
|
|
|
EXCLUDE_FROM_ALL
|
|
|
|
)
|
|
|
|
endif()
|
2019-12-03 17:32:25 -05: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
|
2020-01-15 12:33:37 -05:00
|
|
|
$<$<CXX_COMPILER_ID:MSVC>:
|
|
|
|
/wd4996 # Use of function or classes marked [[deprecated]]
|
|
|
|
/wd26409 # CppCoreCheck - GTest
|
|
|
|
/wd26426 # CppCoreCheck - GTest
|
|
|
|
/wd26440 # CppCoreCheck - GTest
|
|
|
|
/wd26446 # CppCoreCheck - prefer gsl::at()
|
|
|
|
/wd26472 # CppCoreCheck - use gsl::narrow(_cast)
|
|
|
|
/wd26481 # CppCoreCheck - use span instead of pointer arithmetic
|
|
|
|
$<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,1920>: # VS2015
|
|
|
|
/wd4189 # variable is initialized but not referenced
|
|
|
|
$<$<NOT:$<CONFIG:Debug>>: # Release, RelWithDebInfo
|
|
|
|
/wd4702 # Unreachable code
|
|
|
|
>
|
|
|
|
>
|
|
|
|
>
|
2019-01-15 13:27:34 -05:00
|
|
|
$<$<CXX_COMPILER_ID:Clang>:
|
|
|
|
-Weverything
|
|
|
|
-Wno-c++98-compat
|
|
|
|
-Wno-c++98-compat-pedantic
|
2020-01-14 11:09:27 -05:00
|
|
|
-Wno-covered-switch-default # GTest
|
|
|
|
-Wno-deprecated-declarations # Allow tests for [[deprecated]] elements
|
|
|
|
-Wno-global-constructors # GTest
|
|
|
|
-Wno-language-extension-token # GTest gtest-port.h
|
2019-01-15 13:27:34 -05:00
|
|
|
-Wno-missing-braces
|
|
|
|
-Wno-missing-prototypes
|
2020-01-14 11:09:27 -05:00
|
|
|
-Wno-shift-sign-overflow # GTest gtest-port.h
|
|
|
|
-Wno-undef # GTest
|
|
|
|
-Wno-used-but-marked-unused # GTest EXPECT_DEATH
|
2020-01-14 11:38:42 -05:00
|
|
|
$<$<EQUAL:${GSL_CXX_STANDARD},14>: # no support for [[maybe_unused]]
|
|
|
|
-Wno-unused-member-function
|
|
|
|
-Wno-unused-variable
|
|
|
|
>
|
2019-01-15 13:27:34 -05:00
|
|
|
>
|
|
|
|
)
|
|
|
|
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
|
2020-01-14 11:09:27 -05:00
|
|
|
-Wno-deprecated-declarations # Allow tests for [[deprecated]] elements
|
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
|
2020-01-14 11:09:27 -05:00
|
|
|
-Wno-covered-switch-default # GTest
|
|
|
|
-Wno-global-constructors # GTest
|
2019-01-15 13:27:34 -05:00
|
|
|
-Wno-missing-prototypes
|
|
|
|
-Wno-padded
|
|
|
|
-Wno-unknown-attributes
|
2020-01-14 11:09:27 -05:00
|
|
|
-Wno-used-but-marked-unused # GTest EXPECT_DEATH
|
2019-01-15 13:27:34 -05:00
|
|
|
-Wno-weak-vtables
|
2020-01-14 11:38:42 -05:00
|
|
|
$<$<EQUAL:${GSL_CXX_STANDARD},14>: # no support for [[maybe_unused]]
|
|
|
|
-Wno-unused-member-function
|
|
|
|
-Wno-unused-variable
|
|
|
|
>
|
2019-01-15 13:27:34 -05:00
|
|
|
>
|
|
|
|
$<$<CXX_COMPILER_ID:Clang>:
|
2020-01-13 14:17:24 -05:00
|
|
|
$<$<AND:$<VERSION_GREATER:$<CXX_COMPILER_VERSION>,4.99>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,6>>:
|
|
|
|
$<$<EQUAL:${GSL_CXX_STANDARD},17>:-Wno-undefined-func-template>
|
|
|
|
>
|
|
|
|
>
|
|
|
|
$<$<CXX_COMPILER_ID:AppleClang>:
|
|
|
|
$<$<AND:$<VERSION_GREATER:$<CXX_COMPILER_VERSION>,9.1>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,10>>:
|
|
|
|
$<$<EQUAL:${GSL_CXX_STANDARD},17>:-Wno-undefined-func-template>
|
|
|
|
>
|
2019-01-15 13:27:34 -05:00
|
|
|
>
|
2020-01-14 11:09:27 -05:00
|
|
|
$<$<CXX_COMPILER_ID:GNU>:
|
2020-01-15 13:55:39 -05:00
|
|
|
-Wdouble-promotion # float implicit to double
|
|
|
|
-Wlogical-op # suspicious uses of logical operators
|
2020-01-14 11:38:42 -05:00
|
|
|
$<$<NOT:$<VERSION_LESS:$<CXX_COMPILER_VERSION>,6>>:
|
2020-01-15 13:55:39 -05:00
|
|
|
-Wduplicated-cond # duplicated if-else conditions
|
|
|
|
-Wmisleading-indentation
|
|
|
|
-Wnull-dereference
|
2020-01-14 11:38:42 -05:00
|
|
|
$<$<EQUAL:${GSL_CXX_STANDARD},14>: # no support for [[maybe_unused]]
|
|
|
|
-Wno-unused-variable
|
|
|
|
>
|
|
|
|
>
|
2020-01-15 13:55:39 -05:00
|
|
|
$<$<NOT:$<VERSION_LESS:$<CXX_COMPILER_VERSION>,7>>:
|
|
|
|
-Wduplicated-branches # identical if-else branches
|
|
|
|
>
|
2020-01-14 11:09:27 -05:00
|
|
|
>
|
2019-01-15 13:27:34 -05:00
|
|
|
)
|
|
|
|
endif(MSVC)
|
2017-04-25 20:08:36 -04:00
|
|
|
|
2019-12-03 17:32:25 -05:00
|
|
|
# for tests to find the gtest header
|
|
|
|
target_include_directories(gsl_tests_config SYSTEM INTERFACE
|
|
|
|
googletest/googletest/include
|
2017-08-16 21:38:47 -04:00
|
|
|
)
|
|
|
|
|
2019-12-03 17:32:25 -05:00
|
|
|
set_property(TARGET PROPERTY FOLDER "GSL_tests")
|
2017-07-13 16:53:56 -04:00
|
|
|
|
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
|
|
|
|
gsl_tests_config
|
2020-04-18 06:30:17 -04:00
|
|
|
${GTestMain_LIBRARIES}
|
2017-04-25 20:08:36 -04:00
|
|
|
)
|
2015-09-21 15:04:06 -04:00
|
|
|
add_test(
|
2019-12-03 17:32:25 -05: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)
|
2020-02-19 17:28:12 -05:00
|
|
|
add_gsl_test(span_ext_tests)
|
2020-02-14 18:24:46 -05:00
|
|
|
add_gsl_test(span_compatibility_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
|
2020-01-16 13:10:02 -05:00
|
|
|
target_compile_definitions(gsl_tests_config_noexcept INTERFACE
|
|
|
|
_HAS_EXCEPTIONS=0 # disable exceptions in the Microsoft STL
|
|
|
|
)
|
2019-01-15 13:27:34 -05:00
|
|
|
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
|
2020-01-15 12:33:37 -05:00
|
|
|
/wd26440 # CppCoreCheck - GTest
|
|
|
|
/wd26446 # CppCoreCheck - prefer gsl::at()
|
2019-01-15 13:27:34 -05:00
|
|
|
>
|
|
|
|
$<$<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
|
|
|
|
>
|
2020-01-15 13:55:39 -05:00
|
|
|
$<$<CXX_COMPILER_ID:GNU>:
|
|
|
|
-Wdouble-promotion # float implicit to double
|
|
|
|
-Wlogical-op # suspicious uses of logical operators
|
|
|
|
-Wuseless-cast # casting to its own type
|
|
|
|
$<$<NOT:$<VERSION_LESS:$<CXX_COMPILER_VERSION>,6>>:
|
|
|
|
-Wduplicated-cond # duplicated if-else conditions
|
|
|
|
-Wmisleading-indentation
|
|
|
|
-Wnull-dereference
|
|
|
|
>
|
|
|
|
$<$<NOT:$<VERSION_LESS:$<CXX_COMPILER_VERSION>,7>>:
|
|
|
|
-Wduplicated-branches # identical if-else branches
|
|
|
|
>
|
|
|
|
$<$<NOT:$<VERSION_LESS:$<CXX_COMPILER_VERSION>,8>>:
|
|
|
|
-Wcast-align=strict # increase alignment (i.e. char* to int*)
|
|
|
|
>
|
|
|
|
>
|
2019-01-15 13:27:34 -05:00
|
|
|
)
|
|
|
|
endif(MSVC)
|
2018-03-15 19:00:08 -04:00
|
|
|
|
|
|
|
function(add_gsl_test_noexcept name)
|
|
|
|
add_executable(${name} ${name}.cpp)
|
|
|
|
target_link_libraries(${name}
|
|
|
|
GSL
|
|
|
|
gsl_tests_config_noexcept
|
2020-04-18 06:30:17 -04:00
|
|
|
${GTestMain_LIBRARIES}
|
2018-03-15 19:00:08 -04:00
|
|
|
)
|
|
|
|
add_test(
|
|
|
|
${name}
|
|
|
|
${name}
|
|
|
|
)
|
|
|
|
# group all tests under GSL_tests_noexcept
|
|
|
|
set_property(TARGET ${name} PROPERTY FOLDER "GSL_tests_noexcept")
|
|
|
|
endfunction()
|
|
|
|
|
2019-12-12 13:55:26 -05:00
|
|
|
add_gsl_test_noexcept(no_exception_ensure_tests)
|