forked from WG21-SG14/SG14
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[test] CI for Linux, MacOS, and Windows!
Entirely cribbed from https://github.com/alexreinking/so69978314/
- Loading branch information
1 parent
a5e9aef
commit f27335e
Showing
3 changed files
with
117 additions
and
96 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,49 +1,42 @@ | ||
name: Build and run tests | ||
|
||
on: | ||
push: | ||
branches: [ "master" ] | ||
pull_request: | ||
branches: [ "master" ] | ||
|
||
on: [ 'push' ] | ||
concurrency: | ||
group: ${{ github.ref }} | ||
cancel-in-progress: true | ||
jobs: | ||
build: | ||
test: | ||
name: ${{ matrix.os }} | ||
runs-on: ${{ matrix.os }} | ||
strategy: | ||
fail-fast: true | ||
|
||
fail-fast: false | ||
matrix: | ||
os: [ubuntu-latest, windows-latest] | ||
build_type: [Debug, RelWithDebInfo, Release] | ||
cpp_compiler: [g++, clang++] | ||
cpp_standard: [14, 17, 20, 23] | ||
os: [ windows-latest, macos-latest, ubuntu-latest ] | ||
build_type: [Debug] | ||
cxx_standard: [14, 17, 20, 23] | ||
exclude: | ||
- os: ubuntu-latest | ||
cpp_compiler: clang++ | ||
cpp_standard: 20 | ||
- os: ubuntu-latest | ||
cpp_compiler: clang++ | ||
cpp_standard: 23 | ||
- os: windows-latest | ||
cpp_compiler: clang++ | ||
- os: windows-latest | ||
cpp_compiler: g++ | ||
|
||
runs-on: ${{ matrix.os }} | ||
|
||
- os: macos-latest | ||
cxx_standard: 23 | ||
env: | ||
PREFIX: ${{ github.workspace }}/_local | ||
steps: | ||
- uses: actions/checkout@v3 | ||
|
||
- name: Install Google Test (Linux) | ||
if: matrix.os == 'ubuntu-latest' | ||
run: | | ||
sudo apt-get install libgtest-dev | ||
- name: Build and Test | ||
run: | | ||
cmake -S ${{ github.workspace }} -B ${{ github.workspace }}/build \ | ||
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} \ | ||
-DCMAKE_CXX_STANDARD=${{ matrix.cpp_standard }} \ | ||
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | ||
cd ${{ github.workspace }}/build | ||
make | ||
./bin/utest | ||
# Check out project | ||
- uses: actions/checkout@v3 | ||
# Check out dependencies | ||
- uses: actions/checkout@v3 | ||
with: | ||
repository: google/googletest | ||
ref: 8d51dc50eb7e7698427fed81b85edad0e032112e | ||
path: googletest | ||
# Manually install dependencies | ||
- name: Install Google Test | ||
run: | | ||
cmake -S googletest -B build/deps/googletest -DCMAKE_BUILD_TYPE=RelWithDebInfo '-DCMAKE_INSTALL_PREFIX=${{ env.PREFIX }}' -DBUILD_GMOCK=OFF -DBUILD_SHARED_LIBS=ON | ||
cmake --build build/deps/googletest --config RelWithDebInfo --target install | ||
# Build and test project | ||
- name: CMake Configure | ||
run: > | ||
cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo '-DCMAKE_PREFIX_PATH=${{ env.PREFIX }}' -DCMAKE_CXX_STANDARD=${{ matrix.cxx_standard }} | ||
- name: CMake Build | ||
run: cmake --build build --config RelWithDebInfo | ||
- name: CTest | ||
run: ctest --test-dir build --config RelWithDebInfo |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,35 +1,53 @@ | ||
|
||
find_package(GTest REQUIRED) | ||
include(GoogleTest) | ||
|
||
set(TEST_SOURCE_FILES | ||
flat_map_test.cpp | ||
flat_set_test.cpp | ||
hive_test.cpp | ||
inplace_function_test.cpp | ||
inplace_vector_test.cpp | ||
ring_span_test.cpp | ||
slot_map_test.cpp | ||
uninitialized_test.cpp | ||
unstable_remove_test.cpp | ||
add_executable(utest | ||
flat_map_test.cpp | ||
flat_set_test.cpp | ||
hive_test.cpp | ||
inplace_function_test.cpp | ||
inplace_vector_test.cpp | ||
ring_span_test.cpp | ||
slot_map_test.cpp | ||
uninitialized_test.cpp | ||
unstable_remove_test.cpp | ||
) | ||
target_include_directories(utest PRIVATE ${SG14_INCLUDE_DIRECTORY}) | ||
target_link_libraries(utest PRIVATE GTest::gtest GTest::gtest_main) | ||
|
||
set(TEST_NAME utest) | ||
add_executable(${TEST_NAME} ${TEST_SOURCE_FILES}) | ||
include_directories(${GTEST_INCLUDE_DIRS} ${SG14_INCLUDE_DIRECTORY}) | ||
target_link_libraries(${TEST_NAME} ${CMAKE_THREAD_LIBS_INIT} ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES}) | ||
if (DEFINED ENV{GITHUB_ACTIONS}) | ||
if (WIN32) | ||
add_custom_command( | ||
TARGET utest POST_BUILD | ||
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_RUNTIME_DLLS:utest> $<TARGET_FILE_DIR:utest> | ||
COMMAND_EXPAND_LISTS | ||
) | ||
endif() | ||
gtest_discover_tests(utest) | ||
endif() | ||
|
||
## Ad-hoc compiler options ## | ||
|
||
# Compile options | ||
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") | ||
target_compile_options(${TEST_NAME} PRIVATE -Wall -Wextra -Werror) | ||
set_property(TARGET utest APPEND PROPERTY COMPILE_OPTIONS "-Wall;-Wextra;-Werror") | ||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||
target_compile_options(${TEST_NAME} PRIVATE -Wall -Wextra -Werror) | ||
if (CMAKE_CXX_COMPILER_VERSION MATCHES "^7.*") | ||
set_source_files_properties(${SG14_TEST_SOURCE_DIRECTORY}/slot_map_test.cpp PROPERTIES | ||
COMPILE_FLAGS "-Wno-error=unused-variable -Wno-error=unused-but-set-variable") # Fix gcc7 issues with structured bindings | ||
message("Disabled -Wunused-variable and -Wunused-but-set-variable for gcc ${CMAKE_CXX_COMPILER_VERSION}.") | ||
endif() | ||
set_property(TARGET utest APPEND PROPERTY COMPILE_OPTIONS "-Wall;-Wextra;-Werror") | ||
# GCC 13 gives bogus warnings on local types with typedefs | ||
set_property(SOURCE hive_test.cpp APPEND PROPERTY COMPILE_OPTIONS "-Wno-unused-local-typedefs") | ||
if (CMAKE_CXX_COMPILER_VERSION MATCHES "^7.*") | ||
# GCC 7 gives bogus warnings on structured bindings | ||
set_property(SOURCE slot_map_test.cpp APPEND PROPERTY COMPILE_OPTIONS "-Wno-unused-variable;-Wno-unused-but-set-variable") | ||
endif() | ||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${TEST_NAME}) | ||
target_compile_options(${TEST_NAME} PRIVATE /Zc:__cplusplus /permissive- /W4 /WX) | ||
add_definitions(-DNOMINMAX -D_SCL_SECURE_NO_WARNINGS) | ||
set_property(TARGET utest APPEND PROPERTY COMPILE_OPTIONS "-W4;-WX;-DNOMINMAX;-D_SCL_SECURE_NO_WARNINGS") | ||
# MSVC gives bogus "conditional expression is constant" warnings | ||
set_property(SOURCE hive_test.cpp APPEND PROPERTY COMPILE_OPTIONS "-wd4127") | ||
set_property(SOURCE inplace_vector_test.cpp APPEND PROPERTY COMPILE_OPTIONS "-wd4127") | ||
# MSVC gives bogus "possible loss of data" warnings | ||
set_property(SOURCE hive_test.cpp APPEND PROPERTY COMPILE_OPTIONS "-wd4244;-wd4267") | ||
# MSVC gives bogus "unreachable code" warnings | ||
set_property(SOURCE hive_test.cpp APPEND PROPERTY COMPILE_OPTIONS "-wd4702") | ||
# std::aligned_storage_t is deprecated in C++23 | ||
set_property(SOURCE inplace_function_test.cpp APPEND PROPERTY COMPILE_OPTIONS "-D_SILENCE_ALL_CXX23_DEPRECATION_WARNINGS") | ||
endif() |