mirror of
https://github.com/catchorg/Catch2.git
synced 2025-04-27 03:15:43 +02:00
Compare commits
No commits in common. "devel" and "v3.7.1" have entirely different histories.
.bazelrc.clang-tidy
.conan/test_package
.github/workflows
linux-bazel-builds.ymllinux-meson-builds.ymllinux-other-builds.ymllinux-simple-builds.ymlmac-builds-m1.ymlmac-builds.ymlpackage-manager-builds.yamlvalidate-header-guards.ymlwindows-simple-builds.yml
BUILD.bazelCMake
CMakeLists.txtCMakePresets.jsonMAINTAINERS.mdMODULE.bazelWORKSPACE.bazeldocs
examples
extras
Catch.cmakeCatchAddTests.cmakeCatchShardTests.cmakeParseAndAddCatchTests.cmakecatch_amalgamated.cppcatch_amalgamated.hpp
meson.buildmeson_options.txtsrc
CMakeLists.txt
catch2
benchmark/detail
catch_timer.cppcatch_tostring.cppcatch_tostring.hppcatch_user_config.hpp.incatch_version.cppcatch_version_macros.hppgenerators
internal
matchers
meson.buildreporters
tests
CMakeLists.txt
ExtraTests
SelfTest
Baselines
automake.sw.approved.txtautomake.sw.multi.approved.txtcompact.sw.approved.txtcompact.sw.multi.approved.txtconsole.std.approved.txtconsole.sw.approved.txtconsole.sw.multi.approved.txtjunit.sw.approved.txtjunit.sw.multi.approved.txtsonarqube.sw.approved.txtsonarqube.sw.multi.approved.txttap.sw.approved.txttap.sw.multi.approved.txtteamcity.sw.approved.txtteamcity.sw.multi.approved.txtxml.sw.approved.txtxml.sw.multi.approved.txt
IntrospectiveTests
UsageTests
TestScripts
tools/misc
3
.bazelrc
3
.bazelrc
@ -1,6 +1,3 @@
|
||||
# Enable Bzlmod for every Bazel command
|
||||
common --enable_bzlmod
|
||||
|
||||
build --enable_platform_specific_config
|
||||
|
||||
build:gcc9 --cxxopt=-std=c++2a
|
||||
|
@ -34,7 +34,7 @@ Checks: >-
|
||||
-modernize-pass-by-value,
|
||||
|
||||
performance-*,
|
||||
performance-enum-size,
|
||||
-performance-enum-size,
|
||||
|
||||
portability-*,
|
||||
|
||||
@ -49,7 +49,6 @@ Checks: >-
|
||||
-readability-implicit-bool-conversion,
|
||||
-readability-isolate-declaration,
|
||||
-readability-magic-numbers,
|
||||
-readability-math-missing-parentheses, #no, 'a + B * C' obeying math rules is not confusing,
|
||||
-readability-named-parameter,
|
||||
-readability-qualified-auto,
|
||||
-readability-redundant-access-specifiers,
|
||||
|
@ -1,7 +1,8 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(PackageTest LANGUAGES CXX)
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
project(PackageTest CXX)
|
||||
|
||||
find_package(Catch2 CONFIG REQUIRED)
|
||||
|
||||
add_executable(test_package test_package.cpp)
|
||||
target_link_libraries(test_package Catch2::Catch2WithMain)
|
||||
target_compile_features(test_package PRIVATE cxx_std_14)
|
||||
|
1
.github/workflows/linux-bazel-builds.yml
vendored
1
.github/workflows/linux-bazel-builds.yml
vendored
@ -7,7 +7,6 @@ jobs:
|
||||
name: Linux Ubuntu 22.04 Bazel build <GCC 11.2.0>
|
||||
runs-on: ubuntu-22.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
compilation_mode: [fastbuild, dbg, opt]
|
||||
|
||||
|
1
.github/workflows/linux-meson-builds.yml
vendored
1
.github/workflows/linux-meson-builds.yml
vendored
@ -7,7 +7,6 @@ jobs:
|
||||
name: meson ${{matrix.cxx}}, C++${{matrix.std}}, ${{matrix.build_type}}
|
||||
runs-on: ubuntu-22.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
cxx:
|
||||
- g++-11
|
||||
|
57
.github/workflows/linux-other-builds.yml
vendored
57
.github/workflows/linux-other-builds.yml
vendored
@ -8,66 +8,65 @@ on: [push, pull_request]
|
||||
jobs:
|
||||
build:
|
||||
name: ${{matrix.build_description}}, ${{matrix.cxx}}, C++${{matrix.std}} ${{matrix.build_type}}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# We add builds one by one in this case, because there are no
|
||||
# dimensions that are shared across the builds
|
||||
include:
|
||||
|
||||
# Single surrogate header build
|
||||
- cxx: clang++-14
|
||||
- cxx: clang++-10
|
||||
build_description: Surrogates build
|
||||
build_type: Debug
|
||||
std: 14
|
||||
other_pkgs: clang-14
|
||||
other_pkgs: clang-10
|
||||
cmake_configurations: -DCATCH_BUILD_SURROGATES=ON
|
||||
|
||||
# Extras and examples with gcc-11
|
||||
- cxx: g++-11
|
||||
# Extras and examples with gcc-7
|
||||
- cxx: g++-7
|
||||
build_description: Extras + Examples
|
||||
build_type: Debug
|
||||
std: 14
|
||||
other_pkgs: g++-11
|
||||
other_pkgs: g++-7
|
||||
cmake_configurations: -DCATCH_BUILD_EXTRA_TESTS=ON -DCATCH_BUILD_EXAMPLES=ON -DCATCH_ENABLE_CMAKE_HELPER_TESTS=ON
|
||||
- cxx: g++-11
|
||||
- cxx: g++-7
|
||||
build_description: Extras + Examples
|
||||
build_type: Release
|
||||
std: 14
|
||||
other_pkgs: g++-11
|
||||
other_pkgs: g++-7
|
||||
cmake_configurations: -DCATCH_BUILD_EXTRA_TESTS=ON -DCATCH_BUILD_EXAMPLES=ON -DCATCH_ENABLE_CMAKE_HELPER_TESTS=ON
|
||||
|
||||
# Extras and examples with Clang-14
|
||||
- cxx: clang++-14
|
||||
# Extras and examples with Clang-10
|
||||
- cxx: clang++-10
|
||||
build_description: Extras + Examples
|
||||
build_type: Debug
|
||||
std: 17
|
||||
other_pkgs: clang-14
|
||||
other_pkgs: clang-10
|
||||
cmake_configurations: -DCATCH_BUILD_EXTRA_TESTS=ON -DCATCH_BUILD_EXAMPLES=ON -DCATCH_ENABLE_CMAKE_HELPER_TESTS=ON
|
||||
- cxx: clang++-14
|
||||
- cxx: clang++-10
|
||||
build_description: Extras + Examples
|
||||
build_type: Release
|
||||
std: 17
|
||||
other_pkgs: clang-14
|
||||
other_pkgs: clang-10
|
||||
cmake_configurations: -DCATCH_BUILD_EXTRA_TESTS=ON -DCATCH_BUILD_EXAMPLES=ON -DCATCH_ENABLE_CMAKE_HELPER_TESTS=ON
|
||||
|
||||
# Configure tests with Clang-14
|
||||
- cxx: clang++-14
|
||||
# Configure tests with Clang-10
|
||||
- cxx: clang++-10
|
||||
build_description: CMake configuration tests
|
||||
build_type: Debug
|
||||
std: 14
|
||||
other_pkgs: clang-14
|
||||
other_pkgs: clang-10
|
||||
cmake_configurations: -DCATCH_ENABLE_CONFIGURE_TESTS=ON
|
||||
|
||||
# Valgrind test Clang-14
|
||||
# - cxx: clang++-14
|
||||
# build_description: Valgrind tests
|
||||
# build_type: Debug
|
||||
# std: 14
|
||||
# other_pkgs: clang-14 valgrind
|
||||
# cmake_configurations: -DMEMORYCHECK_COMMAND=`which valgrind` -DMEMORYCHECK_COMMAND_OPTIONS="-q --track-origins=yes --leak-check=full --num-callers=50 --show-leak-kinds=definite --error-exitcode=1"
|
||||
# other_ctest_args: -T memcheck -LE uses-python
|
||||
# Valgrind test Clang-10
|
||||
- cxx: clang++-10
|
||||
build_description: Valgrind tests
|
||||
build_type: Debug
|
||||
std: 14
|
||||
other_pkgs: clang-10 valgrind
|
||||
cmake_configurations: -DMEMORYCHECK_COMMAND=`which valgrind` -DMEMORYCHECK_COMMAND_OPTIONS="-q --track-origins=yes --leak-check=full --num-callers=50 --show-leak-kinds=definite --error-exitcode=1"
|
||||
other_ctest_args: -T memcheck -LE uses-python
|
||||
|
||||
|
||||
steps:
|
||||
@ -86,7 +85,7 @@ jobs:
|
||||
# Note: $GITHUB_WORKSPACE is distinct from ${{runner.workspace}}.
|
||||
# This is important
|
||||
run: |
|
||||
cmake -Bbuild -S$GITHUB_WORKSPACE \
|
||||
cmake -Bbuild -H$GITHUB_WORKSPACE \
|
||||
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
|
||||
-DCMAKE_CXX_STANDARD=${{matrix.std}} \
|
||||
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
|
||||
@ -100,8 +99,10 @@ jobs:
|
||||
run: ninja
|
||||
|
||||
- name: Run tests
|
||||
env:
|
||||
CTEST_OUTPUT_ON_FAILURE: 1
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
run: ctest -C ${{matrix.build_type}} -j `nproc` ${{matrix.other_ctest_args}} --output-on-failure
|
||||
run: ctest -C ${{matrix.build_type}} -j `nproc` ${{matrix.other_ctest_args}}
|
||||
clang-tidy:
|
||||
name: clang-tidy ${{matrix.version}}, ${{matrix.build_description}}, C++${{matrix.std}} ${{matrix.build_type}}
|
||||
runs-on: ubuntu-22.04
|
||||
@ -133,7 +134,7 @@ jobs:
|
||||
clangtidy="clang-tidy-${{matrix.version}};-use-color"
|
||||
# Use a dummy compiler/linker/ar/ranlib to effectively disable the
|
||||
# compilation and only run clang-tidy.
|
||||
cmake -Bbuild -S$GITHUB_WORKSPACE \
|
||||
cmake -Bbuild -H$GITHUB_WORKSPACE \
|
||||
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
|
||||
-DCMAKE_CXX_STANDARD=${{matrix.std}} \
|
||||
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
|
||||
|
77
.github/workflows/linux-simple-builds.yml
vendored
77
.github/workflows/linux-simple-builds.yml
vendored
@ -5,29 +5,28 @@ on: [push, pull_request]
|
||||
jobs:
|
||||
build:
|
||||
name: ${{matrix.cxx}}, C++${{matrix.std}}, ${{matrix.build_type}}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
cxx:
|
||||
- g++-5
|
||||
- g++-6
|
||||
- g++-7
|
||||
- g++-8
|
||||
- g++-9
|
||||
- g++-10
|
||||
- g++-11
|
||||
- g++-12
|
||||
- clang++-6.0
|
||||
- clang++-7
|
||||
- clang++-8
|
||||
- clang++-9
|
||||
- clang++-10
|
||||
- clang++-11
|
||||
- clang++-12
|
||||
- clang++-13
|
||||
- clang++-14
|
||||
build_type: [Debug, Release]
|
||||
std: [14]
|
||||
include:
|
||||
- cxx: g++-5
|
||||
other_pkgs: g++-5
|
||||
- cxx: g++-6
|
||||
other_pkgs: g++-6
|
||||
- cxx: g++-7
|
||||
other_pkgs: g++-7
|
||||
- cxx: g++-8
|
||||
@ -36,10 +35,6 @@ jobs:
|
||||
other_pkgs: g++-9
|
||||
- cxx: g++-10
|
||||
other_pkgs: g++-10
|
||||
- cxx: g++-11
|
||||
other_pkgs: g++-11
|
||||
- cxx: g++-12
|
||||
other_pkgs: g++-12
|
||||
- cxx: clang++-6.0
|
||||
other_pkgs: clang-6.0
|
||||
- cxx: clang++-7
|
||||
@ -50,47 +45,51 @@ jobs:
|
||||
other_pkgs: clang-9
|
||||
- cxx: clang++-10
|
||||
other_pkgs: clang-10
|
||||
- cxx: clang++-11
|
||||
other_pkgs: clang-11
|
||||
- cxx: clang++-12
|
||||
other_pkgs: clang-12
|
||||
- cxx: clang++-13
|
||||
other_pkgs: clang-13
|
||||
- cxx: clang++-14
|
||||
other_pkgs: clang-14
|
||||
# Clang 14 + C++17
|
||||
- cxx: clang++-14
|
||||
# Clang 6 + C++17
|
||||
# does not work with the default libstdc++ version thanks
|
||||
# to a disagreement on variant implementation.
|
||||
# - cxx: clang++-6.0
|
||||
# build_type: Debug
|
||||
# std: 17
|
||||
# other_pkgs: clang-6.0
|
||||
# - cxx: clang++-6.0
|
||||
# build_type: Release
|
||||
# std: 17
|
||||
# other_pkgs: clang-6.0
|
||||
# Clang 10 + C++17
|
||||
- cxx: clang++-10
|
||||
build_type: Debug
|
||||
std: 17
|
||||
other_pkgs: clang-14
|
||||
- cxx: clang++-14
|
||||
other_pkgs: clang-10
|
||||
- cxx: clang++-10
|
||||
build_type: Release
|
||||
std: 17
|
||||
other_pkgs: clang-14
|
||||
- cxx: clang++-14
|
||||
other_pkgs: clang-10
|
||||
- cxx: clang++-10
|
||||
build_type: Debug
|
||||
std: 20
|
||||
other_pkgs: clang-14
|
||||
- cxx: clang++-14
|
||||
other_pkgs: clang-10
|
||||
- cxx: clang++-10
|
||||
build_type: Release
|
||||
std: 20
|
||||
other_pkgs: clang-14
|
||||
- cxx: g++-11
|
||||
other_pkgs: clang-10
|
||||
- cxx: g++-10
|
||||
build_type: Debug
|
||||
std: 20
|
||||
other_pkgs: g++-11
|
||||
- cxx: g++-11
|
||||
other_pkgs: g++-10
|
||||
- cxx: g++-10
|
||||
build_type: Release
|
||||
std: 20
|
||||
other_pkgs: g++-11
|
||||
other_pkgs: g++-10
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Add repositories for older compilers
|
||||
- name: Add repositories for older GCC
|
||||
run: |
|
||||
sudo apt-add-repository 'deb http://azure.archive.ubuntu.com/ubuntu/ focal main'
|
||||
sudo apt-add-repository 'deb http://azure.archive.ubuntu.com/ubuntu/ focal universe'
|
||||
sudo apt-add-repository 'deb http://azure.archive.ubuntu.com/ubuntu/ bionic main'
|
||||
sudo apt-add-repository 'deb http://azure.archive.ubuntu.com/ubuntu/ bionic universe'
|
||||
if: ${{ matrix.cxx == 'g++-5' || matrix.cxx == 'g++-6' }}
|
||||
|
||||
- name: Prepare environment
|
||||
run: |
|
||||
@ -105,7 +104,7 @@ jobs:
|
||||
# Note: $GITHUB_WORKSPACE is distinct from ${{runner.workspace}}.
|
||||
# This is important
|
||||
run: |
|
||||
cmake -Bbuild -S$GITHUB_WORKSPACE \
|
||||
cmake -Bbuild -H$GITHUB_WORKSPACE \
|
||||
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
|
||||
-DCMAKE_CXX_STANDARD=${{matrix.std}} \
|
||||
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
|
||||
@ -118,5 +117,7 @@ jobs:
|
||||
run: ninja
|
||||
|
||||
- name: Run tests
|
||||
env:
|
||||
CTEST_OUTPUT_ON_FAILURE: 1
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
run: ctest -C ${{matrix.build_type}} -j `nproc` --output-on-failure
|
||||
run: ctest -C ${{matrix.build_type}} -j `nproc`
|
||||
|
9
.github/workflows/mac-builds-m1.yml
vendored
9
.github/workflows/mac-builds-m1.yml
vendored
@ -1,4 +1,4 @@
|
||||
name: Arm Mac builds
|
||||
name: M1 Mac builds
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
@ -6,7 +6,6 @@ jobs:
|
||||
build:
|
||||
runs-on: macos-14
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
cxx:
|
||||
- clang++
|
||||
@ -26,7 +25,7 @@ jobs:
|
||||
CXX: ${{matrix.cxx}}
|
||||
CXXFLAGS: ${{matrix.cxxflags}}
|
||||
run: |
|
||||
cmake -Bbuild -S$GITHUB_WORKSPACE \
|
||||
cmake -Bbuild -H$GITHUB_WORKSPACE \
|
||||
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
|
||||
-DCMAKE_CXX_STANDARD=${{matrix.std}} \
|
||||
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
|
||||
@ -39,5 +38,7 @@ jobs:
|
||||
run: make -j `sysctl -n hw.ncpu`
|
||||
|
||||
- name: Run tests
|
||||
env:
|
||||
CTEST_OUTPUT_ON_FAILURE: 1
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
run: ctest -C ${{matrix.build_type}} -j `sysctl -n hw.ncpu` --output-on-failure
|
||||
run: ctest -C ${{matrix.build_type}} -j `sysctl -n hw.ncpu`
|
||||
|
15
.github/workflows/mac-builds.yml
vendored
15
.github/workflows/mac-builds.yml
vendored
@ -1,16 +1,11 @@
|
||||
name: Intel Mac builds
|
||||
name: Mac builds
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
# From macos-14 forward, the baseline "macos-X" image is Arm based,
|
||||
# and not Intel based. Thus this is the newest image we can use for
|
||||
# Intel MacOS CI, and there don't seem to be any plans to keep providing
|
||||
# the Intel based images for free to OSS projects.
|
||||
runs-on: macos-13
|
||||
runs-on: macos-12
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
cxx:
|
||||
- clang++
|
||||
@ -30,7 +25,7 @@ jobs:
|
||||
CXX: ${{matrix.cxx}}
|
||||
CXXFLAGS: ${{matrix.cxxflags}}
|
||||
run: |
|
||||
cmake -Bbuild -S$GITHUB_WORKSPACE \
|
||||
cmake -Bbuild -H$GITHUB_WORKSPACE \
|
||||
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
|
||||
-DCMAKE_CXX_STANDARD=${{matrix.std}} \
|
||||
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
|
||||
@ -43,5 +38,7 @@ jobs:
|
||||
run: make -j `sysctl -n hw.ncpu`
|
||||
|
||||
- name: Run tests
|
||||
env:
|
||||
CTEST_OUTPUT_ON_FAILURE: 1
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
run: ctest -C ${{matrix.build_type}} -j `sysctl -n hw.ncpu` --output-on-failure
|
||||
run: ctest -C ${{matrix.build_type}} -j `sysctl -n hw.ncpu`
|
||||
|
@ -5,7 +5,7 @@ on: [push, pull_request]
|
||||
jobs:
|
||||
conan_builds:
|
||||
name: Conan ${{matrix.conan_version}}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
conan_version:
|
||||
|
2
.github/workflows/validate-header-guards.yml
vendored
2
.github/workflows/validate-header-guards.yml
vendored
@ -5,7 +5,7 @@ on: [push, pull_request]
|
||||
jobs:
|
||||
build:
|
||||
# Set the type of machine to run on
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
|
||||
- name: Checkout source code
|
||||
|
5
.github/workflows/windows-simple-builds.yml
vendored
5
.github/workflows/windows-simple-builds.yml
vendored
@ -7,7 +7,6 @@ jobs:
|
||||
name: ${{matrix.os}}, ${{matrix.std}}, ${{matrix.build_type}}, ${{matrix.platform}}
|
||||
runs-on: ${{matrix.os}}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [windows-2019, windows-2022]
|
||||
platform: [Win32, x64]
|
||||
@ -32,5 +31,7 @@ jobs:
|
||||
|
||||
- name: Run tests
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
run: ctest -C ${{matrix.build_type}} -j %NUMBER_OF_PROCESSORS% --output-on-failure
|
||||
env:
|
||||
CTEST_OUTPUT_ON_FAILURE: 1
|
||||
run: ctest -C ${{matrix.build_type}} -j %NUMBER_OF_PROCESSORS%
|
||||
shell: cmd
|
||||
|
@ -56,8 +56,6 @@ expand_template(
|
||||
"#cmakedefine CATCH_CONFIG_WCHAR": "",
|
||||
"#cmakedefine CATCH_CONFIG_WINDOWS_CRTDBG": "",
|
||||
"#cmakedefine CATCH_CONFIG_WINDOWS_SEH": "",
|
||||
"#cmakedefine CATCH_CONFIG_USE_BUILTIN_CONSTANT_P": "",
|
||||
"#cmakedefine CATCH_CONFIG_NO_USE_BUILTIN_CONSTANT_P": "",
|
||||
},
|
||||
template = "src/catch2/catch_user_config.hpp.in",
|
||||
)
|
||||
|
@ -1,5 +1,6 @@
|
||||
@PACKAGE_INIT@
|
||||
|
||||
|
||||
# Avoid repeatedly including the targets
|
||||
if(NOT TARGET Catch2::Catch2)
|
||||
# Provide path for scripts
|
||||
|
@ -14,6 +14,7 @@
|
||||
#
|
||||
# For detailed docs look into docs/configuration.md
|
||||
|
||||
|
||||
macro(AddOverridableConfigOption OptionBaseName)
|
||||
option(CATCH_CONFIG_${OptionBaseName} "Read docs/configuration.md for details" OFF)
|
||||
option(CATCH_CONFIG_NO_${OptionBaseName} "Read docs/configuration.md for details" OFF)
|
||||
@ -43,7 +44,6 @@ set(_OverridableOptions
|
||||
"WINDOWS_SEH"
|
||||
"GETENV"
|
||||
"EXPERIMENTAL_STATIC_ANALYSIS_SUPPORT"
|
||||
"USE_BUILTIN_CONSTANT_P"
|
||||
)
|
||||
|
||||
foreach(OptionName ${_OverridableOptions})
|
||||
|
@ -39,6 +39,7 @@ function(add_warnings_to_targets targets)
|
||||
target_compile_options( ${target} PRIVATE /w44265 /w44061 /w44062 /w45038 )
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
endif()
|
||||
|
||||
if (NOT MSVC)
|
||||
|
@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
# detect if Catch is being bundled,
|
||||
# disable testsuite in that case
|
||||
@ -8,8 +8,6 @@ else()
|
||||
set(NOT_SUBPROJECT OFF)
|
||||
endif()
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
option(CATCH_INSTALL_DOCS "Install documentation alongside library" ON)
|
||||
option(CATCH_INSTALL_EXTRAS "Install extras (CMake scripts, debugger helpers) alongside library" ON)
|
||||
option(CATCH_DEVELOPMENT_BUILD "Build tests, enable warnings, enable Werror, etc" OFF)
|
||||
@ -26,6 +24,7 @@ cmake_dependent_option(CATCH_BUILD_SURROGATES "Enable generating and building su
|
||||
cmake_dependent_option(CATCH_ENABLE_CONFIGURE_TESTS "Enable CMake configuration tests. WARNING: VERY EXPENSIVE" OFF "CATCH_DEVELOPMENT_BUILD" OFF)
|
||||
cmake_dependent_option(CATCH_ENABLE_CMAKE_HELPER_TESTS "Enable CMake helper tests. WARNING: VERY EXPENSIVE" OFF "CATCH_DEVELOPMENT_BUILD" OFF)
|
||||
|
||||
|
||||
# Catch2's build breaks if done in-tree. You probably should not build
|
||||
# things in tree anyway, but we can allow projects that include Catch2
|
||||
# as a subproject to build in-tree as long as it is not in our tree.
|
||||
@ -34,12 +33,15 @@ if(CMAKE_BINARY_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
||||
endif()
|
||||
|
||||
project(Catch2
|
||||
VERSION 3.8.1 # CML version placeholder, don't delete
|
||||
VERSION 3.7.1 # CML version placeholder, don't delete
|
||||
LANGUAGES CXX
|
||||
HOMEPAGE_URL "https://github.com/catchorg/Catch2"
|
||||
# HOMEPAGE_URL is not supported until CMake version 3.12, which
|
||||
# we do not target yet.
|
||||
# HOMEPAGE_URL "https://github.com/catchorg/Catch2"
|
||||
DESCRIPTION "A modern, C++-native, unit test framework."
|
||||
)
|
||||
|
||||
|
||||
# Provide path for scripts. We first add path to the scripts we don't use,
|
||||
# but projects including us might, and set the path up to parent scope.
|
||||
# Then we also add path that we use to configure the project, but is of
|
||||
@ -69,6 +71,7 @@ if(CATCH_TEST_USE_WMAIN)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ENTRY:wmainCRTStartup")
|
||||
endif()
|
||||
|
||||
|
||||
# Basic paths
|
||||
set(CATCH_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
set(SOURCES_DIR ${CATCH_DIR}/src/catch2)
|
||||
@ -83,22 +86,18 @@ if(BUILD_TESTING AND CATCH_BUILD_TESTING AND NOT_SUBPROJECT)
|
||||
if (NOT PYTHONINTERP_FOUND)
|
||||
message(FATAL_ERROR "Python not found, but required for tests")
|
||||
endif()
|
||||
set(CMAKE_FOLDER "tests")
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
||||
if(CATCH_BUILD_EXAMPLES)
|
||||
set(CMAKE_FOLDER "Examples")
|
||||
add_subdirectory(examples)
|
||||
endif()
|
||||
|
||||
if(CATCH_BUILD_EXTRA_TESTS)
|
||||
set(CMAKE_FOLDER "tests/ExtraTests")
|
||||
add_subdirectory(tests/ExtraTests)
|
||||
endif()
|
||||
|
||||
if(CATCH_BUILD_FUZZERS)
|
||||
set(CMAKE_FOLDER "fuzzing")
|
||||
add_subdirectory(fuzzing)
|
||||
endif()
|
||||
|
||||
@ -188,7 +187,15 @@ if(NOT_SUBPROJECT)
|
||||
${PKGCONFIG_INSTALL_DIR}
|
||||
)
|
||||
|
||||
# CPack/CMake started taking the package version from project version 3.12
|
||||
# So we need to set the version manually for older CMake versions
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.12.0")
|
||||
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
|
||||
endif()
|
||||
|
||||
set(CPACK_PACKAGE_CONTACT "https://github.com/catchorg/Catch2/")
|
||||
|
||||
|
||||
include( CPack )
|
||||
|
||||
endif()
|
||||
|
@ -6,7 +6,6 @@
|
||||
"displayName": "Basic development build",
|
||||
"description": "Enables development build with basic tests that are cheap to build and run",
|
||||
"cacheVariables": {
|
||||
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
|
||||
"CATCH_DEVELOPMENT_BUILD": "ON"
|
||||
}
|
||||
},
|
||||
|
@ -1,11 +0,0 @@
|
||||
<a id="top"></a>
|
||||
# Catch2 Maintainers
|
||||
|
||||
## Current
|
||||
|
||||
* Chris Thrasher ([@christhrasher](https://github.com/ChrisThrasher)), gpg key: 56FB686C9DFC8E2C
|
||||
* Martin Hořeňovský ([@horenmar](https://github.com/horenmar)), gpg key: E29C46F3B8A7502860793B7DECC9C20E314B2360
|
||||
|
||||
## Retired
|
||||
|
||||
* Phil Nash ([@philsquared](https://github.com/philsquared))
|
@ -1,4 +1,3 @@
|
||||
module(name = "catch2")
|
||||
|
||||
bazel_dep(name = "bazel_skylib", version = "1.7.1")
|
||||
bazel_dep(name = "rules_cc", version = "0.0.17")
|
||||
|
16
WORKSPACE.bazel
Normal file
16
WORKSPACE.bazel
Normal file
@ -0,0 +1,16 @@
|
||||
workspace(name = "catch2")
|
||||
|
||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||
|
||||
http_archive(
|
||||
name = "bazel_skylib",
|
||||
sha256 = "bc283cdfcd526a52c3201279cda4bc298652efa898b10b4db0837dc51652756f",
|
||||
urls = [
|
||||
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.7.1/bazel-skylib-1.7.1.tar.gz",
|
||||
"https://github.com/bazelbuild/bazel-skylib/releases/download/1.7.1/bazel-skylib-1.7.1.tar.gz",
|
||||
],
|
||||
)
|
||||
|
||||
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
|
||||
|
||||
bazel_skylib_workspace()
|
@ -81,11 +81,12 @@ to your CMake module path.
|
||||
|
||||
`Catch.cmake` provides function `catch_discover_tests` to get tests from
|
||||
a target. This function works by running the resulting executable with
|
||||
`--list-test` flag, and then parsing the output to find all existing tests.
|
||||
`--list-test-names-only` flag, and then parsing the output to find all
|
||||
existing tests.
|
||||
|
||||
#### Usage
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
project(baz LANGUAGES CXX VERSION 0.0.1)
|
||||
|
||||
@ -127,8 +128,6 @@ catch_discover_tests(target
|
||||
[OUTPUT_PREFIX prefix]
|
||||
[OUTPUT_SUFFIX suffix]
|
||||
[DISCOVERY_MODE <POST_BUILD|PRE_TEST>]
|
||||
[SKIP_IS_FAILURE]
|
||||
[ADD_TAGS_AS_LABELS]
|
||||
)
|
||||
```
|
||||
|
||||
@ -212,15 +211,6 @@ execution (useful e.g. in cross-compilation environments).
|
||||
calling ``catch_discover_tests``. This provides a mechanism for globally
|
||||
selecting a preferred test discovery behavior.
|
||||
|
||||
* `SKIP_IS_FAILURE`
|
||||
|
||||
Skipped tests will be marked as failed instead.
|
||||
|
||||
* `ADD_TAGS_AS_LABELS`
|
||||
|
||||
Add the tags from tests as labels to CTest.
|
||||
|
||||
|
||||
### `ParseAndAddCatchTests.cmake`
|
||||
|
||||
⚠ This script is [deprecated](https://github.com/catchorg/Catch2/pull/2120)
|
||||
@ -239,7 +229,7 @@ parsed are *silently ignored*.
|
||||
#### Usage
|
||||
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
project(baz LANGUAGES CXX VERSION 0.0.1)
|
||||
|
||||
|
@ -158,14 +158,11 @@ by using `_NO_` in the macro, e.g. `CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS`.
|
||||
CATCH_CONFIG_ANDROID_LOGWRITE // Use android's logging system for debug output
|
||||
CATCH_CONFIG_GLOBAL_NEXTAFTER // Use nextafter{,f,l} instead of std::nextafter
|
||||
CATCH_CONFIG_GETENV // System has a working `getenv`
|
||||
CATCH_CONFIG_USE_BUILTIN_CONSTANT_P // Use __builtin_constant_p to trigger warnings
|
||||
|
||||
> [`CATCH_CONFIG_ANDROID_LOGWRITE`](https://github.com/catchorg/Catch2/issues/1743) and [`CATCH_CONFIG_GLOBAL_NEXTAFTER`](https://github.com/catchorg/Catch2/pull/1739) were introduced in Catch2 2.10.0
|
||||
|
||||
> `CATCH_CONFIG_GETENV` was [introduced](https://github.com/catchorg/Catch2/pull/2562) in Catch2 3.2.0
|
||||
|
||||
> `CATCH_CONFIG_USE_BUILTIN_CONSTANT_P` was introduced in Catch2 vX.Y.Z
|
||||
|
||||
Currently Catch enables `CATCH_CONFIG_WINDOWS_SEH` only when compiled with MSVC, because some versions of MinGW do not have the necessary Win32 API support.
|
||||
|
||||
`CATCH_CONFIG_POSIX_SIGNALS` is on by default, except when Catch is compiled under `Cygwin`, where it is disabled by default (but can be force-enabled by defining `CATCH_CONFIG_POSIX_SIGNALS`).
|
||||
@ -186,12 +183,6 @@ With the exception of `CATCH_CONFIG_EXPERIMENTAL_REDIRECT`,
|
||||
these toggles can be disabled by using `_NO_` form of the toggle,
|
||||
e.g. `CATCH_CONFIG_NO_WINDOWS_SEH`.
|
||||
|
||||
`CATCH_CONFIG_USE_BUILTIN_CONSTANT_P` is ON by default for Clang and GCC
|
||||
(but as far as possible, not for other compilers masquerading for these
|
||||
two). However, it can cause bugs where the enclosed code is evaluated, even
|
||||
though it should not be, e.g. in [#2925](https://github.com/catchorg/Catch2/issues/2925).
|
||||
|
||||
|
||||
### `CATCH_CONFIG_FAST_COMPILE`
|
||||
This compile-time flag speeds up compilation of assertion macros by ~20%,
|
||||
by disabling the generation of assertion-local try-catch blocks for
|
||||
|
@ -21,10 +21,7 @@ The "Generators" `TEST_CASE` will be entered 3 times, and the value of
|
||||
`i` will be 1, 3, and 5 in turn. `GENERATE`s can also be used multiple
|
||||
times at the same scope, in which case the result will be a cartesian
|
||||
product of all elements in the generators. This means that in the snippet
|
||||
below, the test case will be run 6 (2\*3) times. The `GENERATE` macro
|
||||
is defined in the `catch_generators.hpp` header, so compiling
|
||||
the code examples below also requires
|
||||
`#include <catch2/generators/catch_generators.hpp>`.
|
||||
below, the test case will be run 6 (2\*3) times.
|
||||
|
||||
```cpp
|
||||
TEST_CASE("Generators") {
|
||||
@ -106,7 +103,7 @@ a test case,
|
||||
* 2 fundamental generators
|
||||
* `SingleValueGenerator<T>` -- contains only single element
|
||||
* `FixedValuesGenerator<T>` -- contains multiple elements
|
||||
* 5 generic generators that modify other generators (defined in `catch2/generators/catch_generators_adapters.hpp`)
|
||||
* 5 generic generators that modify other generators
|
||||
* `FilterGenerator<T, Predicate>` -- filters out elements from a generator
|
||||
for which the predicate returns "false"
|
||||
* `TakeGenerator<T>` -- takes first `n` elements from a generator
|
||||
@ -114,11 +111,11 @@ a test case,
|
||||
* `MapGenerator<T, U, Func>` -- returns the result of applying `Func`
|
||||
on elements from a different generator
|
||||
* `ChunkGenerator<T>` -- returns chunks (inside `std::vector`) of n elements from a generator
|
||||
* 4 specific purpose generators (defined in `catch2/generators/catch_generators_random.hpp`)
|
||||
* 4 specific purpose generators
|
||||
* `RandomIntegerGenerator<Integral>` -- generates random Integrals from range
|
||||
* `RandomFloatGenerator<Float>` -- generates random Floats from range
|
||||
* `RangeGenerator<T>(first, last)` -- generates all values inside a `[first, last)` arithmetic range (defined in `catch2/generators/catch_generators_range.hpp`)
|
||||
* `IteratorGenerator<T>` -- copies and returns values from an iterator range (defined in `catch2/generators/catch_generators_range.hpp`)
|
||||
* `RangeGenerator<T>(first, last)` -- generates all values inside a `[first, last)` arithmetic range
|
||||
* `IteratorGenerator<T>` -- copies and returns values from an iterator range
|
||||
|
||||
> `ChunkGenerator<T>`, `RandomIntegerGenerator<Integral>`, `RandomFloatGenerator<Float>` and `RangeGenerator<T>` were introduced in Catch2 2.7.0.
|
||||
|
||||
|
@ -2,8 +2,6 @@
|
||||
|
||||
# Release notes
|
||||
**Contents**<br>
|
||||
[3.8.1](#381)<br>
|
||||
[3.8.0](#380)<br>
|
||||
[3.7.1](#371)<br>
|
||||
[3.7.0](#370)<br>
|
||||
[3.6.0](#360)<br>
|
||||
@ -67,38 +65,6 @@
|
||||
[Even Older versions](#even-older-versions)<br>
|
||||
|
||||
|
||||
## 3.8.1
|
||||
|
||||
### Fixes
|
||||
* Fixed bug where catch_discover_tests fails when no TEST_CASEs are present (#2962)
|
||||
* Fixed Clang 19 -Wc++20-extensions warning (#2968)
|
||||
|
||||
|
||||
## 3.8.0
|
||||
|
||||
### Improvements
|
||||
* Added `std::initializer_list` overloads for `(Unordered)RangeEquals` matcher (#2915, #2919)
|
||||
* Added explicit casts to silence GCC's `Wconversion` (#2875)
|
||||
* Made the use of `builtin_constant_p` tricks in assertion macros configurable (#2925)
|
||||
* It is used to prod GCC-like compilers into providing warnings for the asserted expressions, but the compilers miscompile it annoyingly often.
|
||||
* Cleaned out Clang-Tidy's `performance-enum-size` warnings
|
||||
* Added support for using `from_range` generator with iterators with `value_type = const T` (#2926)
|
||||
* This is not correct `value_type` typedef, but it is used in the wild and the change does not make the code meaningfully worse.
|
||||
|
||||
### Fixes
|
||||
* Fixed crash when stringifying pre-1970 (epoch) dates on Windows (#2944)
|
||||
|
||||
### Miscellaneous
|
||||
* Fixes and improvements for `catch_discover_tests` CMake helper
|
||||
* Removed redundant `CTEST_FILE` param when creating the indirection file for `PRE_TEST` discovery mode (#2936)
|
||||
* Rewrote the test discovery logic to use output from the JSON reporter
|
||||
* This means that `catch_discover_tests` now requires CMake 3.19 or newer
|
||||
* Added `ADD_TAGS_AS_LABELS` option. If specified, each CTest test will be labeled with corrensponding Catch2's test tag
|
||||
* Bumped up the minimum required CMake version to build Catch2 to 3.16
|
||||
* Meson build now provides option to avoid installing Catch2
|
||||
* Bazel build is moved to Bzlmod.
|
||||
|
||||
|
||||
## 3.7.1
|
||||
|
||||
### Improvements
|
||||
|
@ -75,7 +75,7 @@ CATCH_TRANSLATE_EXCEPTION( MyType const& ex ) {
|
||||
|
||||
Enums that already have a `<<` overload for `std::ostream` will convert to strings as expected.
|
||||
If you only need to convert enums to strings for test reporting purposes you can provide a `StringMaker` specialisations as any other type.
|
||||
However, as a convenience, Catch provides the `CATCH_REGISTER_ENUM` helper macro that will generate the `StringMaker` specialisation for you with minimal code.
|
||||
However, as a convenience, Catch provides the `REGISTER_ENUM` helper macro that will generate the `StringMaker` specialisation for you with minimal code.
|
||||
Simply provide it the (qualified) enum name, followed by all the enum values, and you're done!
|
||||
|
||||
E.g.
|
||||
|
@ -1,8 +1,10 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
cmake_minimum_required( VERSION 3.10 )
|
||||
|
||||
project( Catch2Examples LANGUAGES CXX )
|
||||
|
||||
message( STATUS "Examples included" )
|
||||
|
||||
|
||||
# Some one-offs first:
|
||||
# 1) Tests and main in one file
|
||||
add_executable( 010-TestCase
|
||||
@ -40,6 +42,7 @@ set(SOURCES_IDIOMATIC_EXAMPLES
|
||||
string( REPLACE ".cpp" "" BASENAMES_IDIOMATIC_EXAMPLES "${SOURCES_IDIOMATIC_EXAMPLES}" )
|
||||
set( TARGETS_IDIOMATIC_EXAMPLES ${BASENAMES_IDIOMATIC_EXAMPLES} )
|
||||
|
||||
|
||||
foreach( name ${TARGETS_IDIOMATIC_EXAMPLES} )
|
||||
add_executable( ${name} ${name}.cpp )
|
||||
endforeach()
|
||||
@ -54,5 +57,6 @@ foreach(name ${ALL_EXAMPLE_TARGETS})
|
||||
target_link_libraries( ${name} Catch2WithMain )
|
||||
endforeach()
|
||||
|
||||
|
||||
list(APPEND CATCH_WARNING_TARGETS ${ALL_EXAMPLE_TARGETS})
|
||||
set(CATCH_WARNING_TARGETS ${CATCH_WARNING_TARGETS} PARENT_SCOPE)
|
||||
|
@ -39,7 +39,6 @@ same as the Catch name; see also ``TEST_PREFIX`` and ``TEST_SUFFIX``.
|
||||
[OUTPUT_SUFFIX suffix]
|
||||
[DISCOVERY_MODE <POST_BUILD|PRE_TEST>]
|
||||
[SKIP_IS_FAILURE]
|
||||
[ADD_TAGS_AS_LABELS]
|
||||
)
|
||||
|
||||
``catch_discover_tests`` sets up a post-build command on the test executable
|
||||
@ -149,9 +148,6 @@ same as the Catch name; see also ``TEST_PREFIX`` and ``TEST_SUFFIX``.
|
||||
``SKIP_IS_FAILURE``
|
||||
Disables skipped test detection.
|
||||
|
||||
``ADD_TAGS_AS_LABELS``
|
||||
Adds all test tags as CTest labels.
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
@ -159,16 +155,12 @@ function(catch_discover_tests TARGET)
|
||||
|
||||
cmake_parse_arguments(
|
||||
""
|
||||
"SKIP_IS_FAILURE;ADD_TAGS_AS_LABELS"
|
||||
"SKIP_IS_FAILURE"
|
||||
"TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST;REPORTER;OUTPUT_DIR;OUTPUT_PREFIX;OUTPUT_SUFFIX;DISCOVERY_MODE"
|
||||
"TEST_SPEC;EXTRA_ARGS;PROPERTIES;DL_PATHS;DL_FRAMEWORK_PATHS"
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.19")
|
||||
message(FATAL_ERROR "This script requires JSON support from CMake version 3.19 or greater.")
|
||||
endif()
|
||||
|
||||
if(NOT _WORKING_DIRECTORY)
|
||||
set(_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
endif()
|
||||
@ -230,7 +222,6 @@ function(catch_discover_tests TARGET)
|
||||
-D "TEST_DL_PATHS=${_DL_PATHS}"
|
||||
-D "TEST_DL_FRAMEWORK_PATHS=${_DL_FRAMEWORK_PATHS}"
|
||||
-D "CTEST_FILE=${ctest_tests_file}"
|
||||
-D "ADD_TAGS_AS_LABELS=${_ADD_TAGS_AS_LABELS}"
|
||||
-P "${_CATCH_DISCOVER_TESTS_SCRIPT}"
|
||||
VERBATIM
|
||||
)
|
||||
@ -276,7 +267,7 @@ function(catch_discover_tests TARGET)
|
||||
" CTEST_FILE" " [==[" "${ctest_tests_file}" "]==]" "\n"
|
||||
" TEST_DL_PATHS" " [==[" "${_DL_PATHS}" "]==]" "\n"
|
||||
" TEST_DL_FRAMEWORK_PATHS" " [==[" "${_DL_FRAMEWORK_PATHS}" "]==]" "\n"
|
||||
" ADD_TAGS_AS_LABELS" " [==[" "${_ADD_TAGS_AS_LABELS}" "]==]" "\n"
|
||||
" CTEST_FILE" " [==[" "${CTEST_FILE}" "]==]" "\n"
|
||||
" )" "\n"
|
||||
" endif()" "\n"
|
||||
" include(\"${ctest_tests_file}\")" "\n"
|
||||
@ -303,10 +294,22 @@ function(catch_discover_tests TARGET)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT ${CMAKE_VERSION} VERSION_LESS "3.10.0")
|
||||
# Add discovered tests to directory TEST_INCLUDE_FILES
|
||||
set_property(DIRECTORY
|
||||
APPEND PROPERTY TEST_INCLUDE_FILES "${ctest_include_file}"
|
||||
)
|
||||
else()
|
||||
# Add discovered tests as directory TEST_INCLUDE_FILE if possible
|
||||
get_property(test_include_file_set DIRECTORY PROPERTY TEST_INCLUDE_FILE SET)
|
||||
if (NOT ${test_include_file_set})
|
||||
set_property(DIRECTORY
|
||||
PROPERTY TEST_INCLUDE_FILE "${ctest_include_file}"
|
||||
)
|
||||
else()
|
||||
message(FATAL_ERROR "Cannot set more than one TEST_INCLUDE_FILE")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
|
||||
|
@ -22,11 +22,10 @@ function(catch_discover_tests_impl)
|
||||
""
|
||||
""
|
||||
"TEST_EXECUTABLE;TEST_WORKING_DIR;TEST_OUTPUT_DIR;TEST_OUTPUT_PREFIX;TEST_OUTPUT_SUFFIX;TEST_PREFIX;TEST_REPORTER;TEST_SPEC;TEST_SUFFIX;TEST_LIST;CTEST_FILE"
|
||||
"TEST_EXTRA_ARGS;TEST_PROPERTIES;TEST_EXECUTOR;TEST_DL_PATHS;TEST_DL_FRAMEWORK_PATHS;ADD_TAGS_AS_LABELS"
|
||||
"TEST_EXTRA_ARGS;TEST_PROPERTIES;TEST_EXECUTOR;TEST_DL_PATHS;TEST_DL_FRAMEWORK_PATHS"
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
set(add_tags "${_ADD_TAGS_AS_LABELS}")
|
||||
set(prefix "${_TEST_PREFIX}")
|
||||
set(suffix "${_TEST_SUFFIX}")
|
||||
set(spec ${_TEST_SPEC})
|
||||
@ -73,19 +72,25 @@ function(catch_discover_tests_impl)
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND ${_TEST_EXECUTOR} "${_TEST_EXECUTABLE}" ${spec} --list-tests --reporter json
|
||||
OUTPUT_VARIABLE listing_output
|
||||
COMMAND ${_TEST_EXECUTOR} "${_TEST_EXECUTABLE}" ${spec} --list-tests --verbosity quiet
|
||||
OUTPUT_VARIABLE output
|
||||
RESULT_VARIABLE result
|
||||
WORKING_DIRECTORY "${_TEST_WORKING_DIR}"
|
||||
)
|
||||
if(NOT ${result} EQUAL 0)
|
||||
message(FATAL_ERROR
|
||||
"Error listing tests from executable '${_TEST_EXECUTABLE}':\n"
|
||||
"Error running test executable '${_TEST_EXECUTABLE}':\n"
|
||||
" Result: ${result}\n"
|
||||
" Output: ${listing_output}\n"
|
||||
" Output: ${output}\n"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Make sure to escape ; (semicolons) in test names first, because
|
||||
# that'd break the foreach loop for "Parse output" later and create
|
||||
# wrongly splitted and thus failing test cases (false positives)
|
||||
string(REPLACE ";" "\;" output "${output}")
|
||||
string(REPLACE "\n" ";" output "${output}")
|
||||
|
||||
# Prepare reporter
|
||||
if(reporter)
|
||||
set(reporter_arg "--reporter ${reporter}")
|
||||
@ -105,7 +110,7 @@ function(catch_discover_tests_impl)
|
||||
)
|
||||
elseif(NOT ${reporter_check_result} EQUAL 0)
|
||||
message(FATAL_ERROR
|
||||
"Error checking for reporter in test executable '${_TEST_EXECUTABLE}':\n"
|
||||
"Error running test executable '${_TEST_EXECUTABLE}':\n"
|
||||
" Result: ${reporter_check_result}\n"
|
||||
" Output: ${reporter_check_output}\n"
|
||||
)
|
||||
@ -134,92 +139,46 @@ function(catch_discover_tests_impl)
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# Parse JSON output for list of tests/class names/tags
|
||||
string(JSON version GET "${listing_output}" "version")
|
||||
if(NOT version STREQUAL "1")
|
||||
message(FATAL_ERROR "Unsupported catch output version: '${version}'")
|
||||
endif()
|
||||
|
||||
# Speed-up reparsing by cutting away unneeded parts of JSON.
|
||||
string(JSON test_listing GET "${listing_output}" "listings" "tests")
|
||||
string(JSON num_tests LENGTH "${test_listing}")
|
||||
|
||||
# Exit early if no tests are detected
|
||||
if(num_tests STREQUAL "0")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# CMake's foreach-RANGE is inclusive, so we have to subtract 1
|
||||
math(EXPR num_tests "${num_tests} - 1")
|
||||
|
||||
foreach(idx RANGE ${num_tests})
|
||||
string(JSON single_test GET ${test_listing} ${idx})
|
||||
string(JSON test_tags GET "${single_test}" "tags")
|
||||
string(JSON plain_name GET "${single_test}" "name")
|
||||
|
||||
# Parse output
|
||||
foreach(line ${output})
|
||||
set(test "${line}")
|
||||
# Escape characters in test case names that would be parsed by Catch2
|
||||
# Note that the \ escaping must happen FIRST! Do not change the order.
|
||||
set(escaped_name "${plain_name}")
|
||||
foreach(char \\ , [ ] ;)
|
||||
string(REPLACE ${char} "\\${char}" escaped_name "${escaped_name}")
|
||||
set(test_name "${test}")
|
||||
foreach(char \\ , [ ])
|
||||
string(REPLACE ${char} "\\${char}" test_name "${test_name}")
|
||||
endforeach(char)
|
||||
# ...add output dir
|
||||
if(output_dir)
|
||||
string(REGEX REPLACE "[^A-Za-z0-9_]" "_" escaped_name_clean "${escaped_name}")
|
||||
set(output_dir_arg "--out ${output_dir}/${output_prefix}${escaped_name_clean}${output_suffix}")
|
||||
string(REGEX REPLACE "[^A-Za-z0-9_]" "_" test_name_clean "${test_name}")
|
||||
set(output_dir_arg "--out ${output_dir}/${output_prefix}${test_name_clean}${output_suffix}")
|
||||
endif()
|
||||
|
||||
# ...and add to script
|
||||
add_command(add_test
|
||||
"${prefix}${plain_name}${suffix}"
|
||||
"${prefix}${test}${suffix}"
|
||||
${_TEST_EXECUTOR}
|
||||
"${_TEST_EXECUTABLE}"
|
||||
"${escaped_name}"
|
||||
"${test_name}"
|
||||
${extra_args}
|
||||
"${reporter_arg}"
|
||||
"${output_dir_arg}"
|
||||
)
|
||||
add_command(set_tests_properties
|
||||
"${prefix}${plain_name}${suffix}"
|
||||
"${prefix}${test}${suffix}"
|
||||
PROPERTIES
|
||||
WORKING_DIRECTORY "${_TEST_WORKING_DIR}"
|
||||
${properties}
|
||||
)
|
||||
|
||||
if(add_tags)
|
||||
string(JSON num_tags LENGTH "${test_tags}")
|
||||
math(EXPR num_tags "${num_tags} - 1")
|
||||
set(tag_list "")
|
||||
if(num_tags GREATER_EQUAL "0")
|
||||
foreach(tag_idx RANGE ${num_tags})
|
||||
string(JSON a_tag GET "${test_tags}" "${tag_idx}")
|
||||
# Catch2's tags can contain semicolons, which are list element separators
|
||||
# in CMake, so we have to escape them. Ideally we could use the [=[...]=]
|
||||
# syntax for this, but CTest currently keeps the square quotes in the label
|
||||
# name. So we add 2 backslashes to escape it instead.
|
||||
# **IMPORTANT**: The number of backslashes depends on how many layers
|
||||
# of CMake the tag goes. If this script is changed, the
|
||||
# number of backslashes to escape may change as well.
|
||||
string(REPLACE ";" "\\;" a_tag "${a_tag}")
|
||||
list(APPEND tag_list "${a_tag}")
|
||||
endforeach()
|
||||
|
||||
add_command(set_tests_properties
|
||||
"${prefix}${plain_name}${suffix}"
|
||||
PROPERTIES
|
||||
LABELS "${tag_list}"
|
||||
)
|
||||
endif()
|
||||
endif(add_tags)
|
||||
|
||||
if(environment_modifications)
|
||||
add_command(set_tests_properties
|
||||
"${prefix}${plain_name}${suffix}"
|
||||
"${prefix}${test}${suffix}"
|
||||
PROPERTIES
|
||||
ENVIRONMENT_MODIFICATION "${environment_modifications}")
|
||||
endif()
|
||||
|
||||
list(APPEND tests "${prefix}${plain_name}${suffix}")
|
||||
list(APPEND tests "${prefix}${test}${suffix}")
|
||||
endforeach()
|
||||
|
||||
# Create a list of all discovered tests, which users may use to e.g. set
|
||||
@ -248,6 +207,5 @@ if(CMAKE_SCRIPT_MODE_FILE)
|
||||
TEST_DL_PATHS ${TEST_DL_PATHS}
|
||||
TEST_DL_FRAMEWORK_PATHS ${TEST_DL_FRAMEWORK_PATHS}
|
||||
CTEST_FILE ${CTEST_FILE}
|
||||
ADD_TAGS_AS_LABELS ${ADD_TAGS_AS_LABELS}
|
||||
)
|
||||
endif()
|
||||
|
@ -61,6 +61,8 @@ function(catch_add_sharded_tests TARGET)
|
||||
-P "${shard_impl_script_file}"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
|
||||
endfunction()
|
||||
|
||||
|
||||
|
@ -234,6 +234,8 @@ function(ParseAndAddCatchTests_ParseFile SourceFile TestTarget)
|
||||
APPEND
|
||||
PROPERTY ParseAndAddCatchTests_TESTS "${CTestName}")
|
||||
endif()
|
||||
|
||||
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
|
@ -6,8 +6,8 @@
|
||||
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
|
||||
// Catch v3.8.1
|
||||
// Generated: 2025-04-08 12:33:19.863332
|
||||
// Catch v3.7.1
|
||||
// Generated: 2024-09-17 10:36:45.608896
|
||||
// ----------------------------------------------------------
|
||||
// This file is an amalgamation of multiple different files.
|
||||
// You probably shouldn't edit it directly.
|
||||
@ -332,7 +332,7 @@ namespace Catch {
|
||||
double diff = b - m;
|
||||
return a + diff * diff;
|
||||
} ) /
|
||||
static_cast<double>( last - first );
|
||||
( last - first );
|
||||
return std::sqrt( variance );
|
||||
}
|
||||
|
||||
@ -367,7 +367,7 @@ namespace Catch {
|
||||
double* first,
|
||||
double* last ) {
|
||||
auto count = last - first;
|
||||
double idx = static_cast<double>((count - 1) * k) / static_cast<double>(q);
|
||||
double idx = (count - 1) * k / static_cast<double>(q);
|
||||
int j = static_cast<int>(idx);
|
||||
double g = idx - j;
|
||||
std::nth_element(first, first + j, last);
|
||||
@ -470,10 +470,10 @@ namespace Catch {
|
||||
|
||||
double accel = sum_cubes / ( 6 * std::pow( sum_squares, 1.5 ) );
|
||||
long n = static_cast<long>( resample.size() );
|
||||
double prob_n = static_cast<double>(
|
||||
double prob_n =
|
||||
std::count_if( resample.begin(),
|
||||
resample.end(),
|
||||
[point]( double x ) { return x < point; } )) /
|
||||
[point]( double x ) { return x < point; } ) /
|
||||
static_cast<double>( n );
|
||||
// degenerate case with uniform samples
|
||||
if ( Catch::Detail::directCompare( prob_n, 0. ) ) {
|
||||
@ -1926,7 +1926,7 @@ namespace Catch {
|
||||
return static_cast<unsigned int>(getElapsedMicroseconds()/1000);
|
||||
}
|
||||
auto Timer::getElapsedSeconds() const -> double {
|
||||
return static_cast<double>(getElapsedMicroseconds())/1000000.0;
|
||||
return getElapsedMicroseconds()/1000000.0;
|
||||
}
|
||||
|
||||
|
||||
@ -1946,10 +1946,7 @@ namespace Detail {
|
||||
const int hexThreshold = 255;
|
||||
|
||||
struct Endianness {
|
||||
enum Arch : uint8_t {
|
||||
Big,
|
||||
Little
|
||||
};
|
||||
enum Arch { Big, Little };
|
||||
|
||||
static Arch which() {
|
||||
int one = 1;
|
||||
@ -2283,7 +2280,7 @@ namespace Catch {
|
||||
}
|
||||
|
||||
Version const& libraryVersion() {
|
||||
static Version version( 3, 8, 1, "", 0 );
|
||||
static Version version( 3, 7, 1, "", 0 );
|
||||
return version;
|
||||
}
|
||||
|
||||
@ -3519,7 +3516,7 @@ namespace {
|
||||
#endif // Windows/ ANSI/ None
|
||||
|
||||
|
||||
#if defined( CATCH_PLATFORM_LINUX ) || defined( CATCH_PLATFORM_MAC ) || defined( __GLIBC__ )
|
||||
#if defined( CATCH_PLATFORM_LINUX ) || defined( CATCH_PLATFORM_MAC )
|
||||
# define CATCH_INTERNAL_HAS_ISATTY
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
@ -5261,7 +5258,7 @@ namespace {
|
||||
SimplePcg32::result_type SimplePcg32::operator()() {
|
||||
// prepare the output value
|
||||
const uint32_t xorshifted = static_cast<uint32_t>(((m_state >> 18u) ^ m_state) >> 27u);
|
||||
const auto output = rotate_right(xorshifted, static_cast<uint32_t>(m_state >> 59u));
|
||||
const auto output = rotate_right(xorshifted, m_state >> 59u);
|
||||
|
||||
// advance state
|
||||
m_state = m_state * 6364136223846793005ULL + s_inc;
|
||||
@ -9111,7 +9108,7 @@ struct RowBreak {};
|
||||
struct OutputFlush {};
|
||||
|
||||
class Duration {
|
||||
enum class Unit : uint8_t {
|
||||
enum class Unit {
|
||||
Auto,
|
||||
Nanoseconds,
|
||||
Microseconds,
|
||||
@ -9183,10 +9180,7 @@ public:
|
||||
};
|
||||
} // end anon namespace
|
||||
|
||||
enum class Justification : uint8_t {
|
||||
Left,
|
||||
Right
|
||||
};
|
||||
enum class Justification { Left, Right };
|
||||
|
||||
struct ColumnInfo {
|
||||
std::string name;
|
||||
|
@ -6,8 +6,8 @@
|
||||
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
|
||||
// Catch v3.8.1
|
||||
// Generated: 2025-04-08 12:33:19.851017
|
||||
// Catch v3.7.1
|
||||
// Generated: 2024-09-17 10:36:40.974985
|
||||
// ----------------------------------------------------------
|
||||
// This file is an amalgamation of multiple different files.
|
||||
// You probably shouldn't edit it directly.
|
||||
@ -150,7 +150,7 @@
|
||||
# define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS \
|
||||
_Pragma( "GCC diagnostic ignored \"-Wshadow\"" )
|
||||
|
||||
# define CATCH_INTERNAL_CONFIG_USE_BUILTIN_CONSTANT_P
|
||||
# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__)
|
||||
|
||||
#endif
|
||||
|
||||
@ -174,45 +174,14 @@
|
||||
// clang-cl defines _MSC_VER as well as __clang__, which could cause the
|
||||
// start/stop internal suppression macros to be double defined.
|
||||
#if defined(__clang__) && !defined(_MSC_VER)
|
||||
# define CATCH_INTERNAL_CONFIG_USE_BUILTIN_CONSTANT_P
|
||||
|
||||
# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" )
|
||||
# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" )
|
||||
|
||||
#endif // __clang__ && !_MSC_VER
|
||||
|
||||
#if defined(__clang__)
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \
|
||||
_Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"")
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wparentheses\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wunused-variable\"" )
|
||||
|
||||
# if (__clang_major__ >= 20)
|
||||
# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wvariadic-macro-arguments-omitted\"" )
|
||||
# elif (__clang_major__ == 19)
|
||||
# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wc++20-extensions\"" )
|
||||
# else
|
||||
# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS
|
||||
_Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" )
|
||||
# endif
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wunused-template\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wcomma\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wshadow\"" )
|
||||
|
||||
#endif // __clang__
|
||||
|
||||
// As of this writing, IBM XL's implementation of __builtin_constant_p has a bug
|
||||
// which results in calls to destructors being emitted for each temporary,
|
||||
// without a matching initialization. In practice, this can result in something
|
||||
@ -229,11 +198,35 @@
|
||||
// https://developer.nvidia.com/nvidia_bug/3321845.
|
||||
//
|
||||
// Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented.
|
||||
#if defined( __ibmxl__ ) || defined( __CUDACC__ ) || defined( __NVCOMPILER )
|
||||
# define CATCH_INTERNAL_CONFIG_NO_USE_BUILTIN_CONSTANT_P
|
||||
# if !defined(__ibmxl__) && !defined(__CUDACC__) && !defined( __NVCOMPILER )
|
||||
# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) /* NOLINT(cppcoreguidelines-pro-type-vararg, hicpp-vararg) */
|
||||
# endif
|
||||
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \
|
||||
_Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"")
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wparentheses\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wunused-variable\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wunused-template\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wcomma\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wshadow\"" )
|
||||
|
||||
#endif // __clang__
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// We know some environments not to support full POSIX signals
|
||||
@ -457,22 +450,6 @@
|
||||
#endif
|
||||
|
||||
|
||||
// The goal of this macro is to avoid evaluation of the arguments, but
|
||||
// still have the compiler warn on problems inside...
|
||||
#if defined( CATCH_INTERNAL_CONFIG_USE_BUILTIN_CONSTANT_P ) && \
|
||||
!defined( CATCH_INTERNAL_CONFIG_NO_USE_BUILTIN_CONSTANT_P ) && !defined(CATCH_CONFIG_USE_BUILTIN_CONSTANT_P)
|
||||
#define CATCH_CONFIG_USE_BUILTIN_CONSTANT_P
|
||||
#endif
|
||||
|
||||
#if defined( CATCH_CONFIG_USE_BUILTIN_CONSTANT_P ) && \
|
||||
!defined( CATCH_CONFIG_NO_USE_BUILTIN_CONSTANT_P )
|
||||
# define CATCH_INTERNAL_IGNORE_BUT_WARN( ... ) \
|
||||
(void)__builtin_constant_p( __VA_ARGS__ ) /* NOLINT(cppcoreguidelines-pro-type-vararg, \
|
||||
hicpp-vararg) */
|
||||
#else
|
||||
# define CATCH_INTERNAL_IGNORE_BUT_WARN( ... )
|
||||
#endif
|
||||
|
||||
// Even if we do not think the compiler has that warning, we still have
|
||||
// to provide a macro that can be used by the code.
|
||||
#if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION)
|
||||
@ -509,6 +486,13 @@
|
||||
# define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS
|
||||
#endif
|
||||
|
||||
|
||||
// The goal of this macro is to avoid evaluation of the arguments, but
|
||||
// still have the compiler warn on problems inside...
|
||||
#if !defined(CATCH_INTERNAL_IGNORE_BUT_WARN)
|
||||
# define CATCH_INTERNAL_IGNORE_BUT_WARN(...)
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10)
|
||||
# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
|
||||
#elif defined(__clang__) && (__clang_major__ < 5)
|
||||
@ -3066,11 +3050,7 @@ struct ratio_string<std::milli> {
|
||||
|
||||
#ifdef _MSC_VER
|
||||
std::tm timeInfo = {};
|
||||
const auto err = gmtime_s(&timeInfo, &converted);
|
||||
if ( err ) {
|
||||
return "gmtime from provided timepoint has failed. This "
|
||||
"happens e.g. with pre-1970 dates using Microsoft libc";
|
||||
}
|
||||
gmtime_s(&timeInfo, &converted);
|
||||
#else
|
||||
std::tm* timeInfo = std::gmtime(&converted);
|
||||
#endif
|
||||
@ -7349,7 +7329,7 @@ namespace Catch {
|
||||
#define CATCH_VERSION_MACROS_HPP_INCLUDED
|
||||
|
||||
#define CATCH_VERSION_MAJOR 3
|
||||
#define CATCH_VERSION_MINOR 8
|
||||
#define CATCH_VERSION_MINOR 7
|
||||
#define CATCH_VERSION_PATCH 1
|
||||
|
||||
#endif // CATCH_VERSION_MACROS_HPP_INCLUDED
|
||||
@ -8733,7 +8713,7 @@ public:
|
||||
|
||||
template <typename InputIterator,
|
||||
typename InputSentinel,
|
||||
typename ResultType = std::remove_const_t<typename std::iterator_traits<InputIterator>::value_type>>
|
||||
typename ResultType = typename std::iterator_traits<InputIterator>::value_type>
|
||||
GeneratorWrapper<ResultType> from_range(InputIterator from, InputSentinel to) {
|
||||
return GeneratorWrapper<ResultType>(Catch::Detail::make_unique<IteratorGenerator<ResultType>>(from, to));
|
||||
}
|
||||
@ -12711,65 +12691,56 @@ namespace Catch {
|
||||
* Creates a matcher that checks if all elements in a range are equal
|
||||
* to all elements in another range.
|
||||
*
|
||||
* Uses the provided predicate `predicate` to do the comparisons
|
||||
* (defaulting to `std::equal_to`)
|
||||
* Uses `std::equal_to` to do the comparison
|
||||
*/
|
||||
template <typename RangeLike,
|
||||
typename Equality = decltype( std::equal_to<>{} )>
|
||||
template <typename RangeLike>
|
||||
constexpr
|
||||
std::enable_if_t<!Detail::is_matcher<RangeLike>::value,
|
||||
RangeEqualsMatcher<RangeLike, std::equal_to<>>>
|
||||
RangeEquals( RangeLike&& range ) {
|
||||
return { CATCH_FORWARD( range ), std::equal_to<>{} };
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matcher that checks if all elements in a range are equal
|
||||
* to all elements in another range.
|
||||
*
|
||||
* Uses to provided predicate `predicate` to do the comparisons
|
||||
*/
|
||||
template <typename RangeLike, typename Equality>
|
||||
constexpr
|
||||
RangeEqualsMatcher<RangeLike, Equality>
|
||||
RangeEquals( RangeLike&& range,
|
||||
Equality&& predicate = std::equal_to<>{} ) {
|
||||
RangeEquals( RangeLike&& range, Equality&& predicate ) {
|
||||
return { CATCH_FORWARD( range ), CATCH_FORWARD( predicate ) };
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matcher that checks if all elements in a range are equal
|
||||
* to all elements in an initializer list.
|
||||
* to all elements in another range, in some permutation
|
||||
*
|
||||
* Uses the provided predicate `predicate` to do the comparisons
|
||||
* (defaulting to `std::equal_to`)
|
||||
* Uses `std::equal_to` to do the comparison
|
||||
*/
|
||||
template <typename T,
|
||||
typename Equality = decltype( std::equal_to<>{} )>
|
||||
template <typename RangeLike>
|
||||
constexpr
|
||||
RangeEqualsMatcher<std::initializer_list<T>, Equality>
|
||||
RangeEquals( std::initializer_list<T> range,
|
||||
Equality&& predicate = std::equal_to<>{} ) {
|
||||
return { range, CATCH_FORWARD( predicate ) };
|
||||
std::enable_if_t<
|
||||
!Detail::is_matcher<RangeLike>::value,
|
||||
UnorderedRangeEqualsMatcher<RangeLike, std::equal_to<>>>
|
||||
UnorderedRangeEquals( RangeLike&& range ) {
|
||||
return { CATCH_FORWARD( range ), std::equal_to<>{} };
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matcher that checks if all elements in a range are equal
|
||||
* to all elements in another range, in some permutation.
|
||||
*
|
||||
* Uses the provided predicate `predicate` to do the comparisons
|
||||
* (defaulting to `std::equal_to`)
|
||||
* Uses to provided predicate `predicate` to do the comparisons
|
||||
*/
|
||||
template <typename RangeLike,
|
||||
typename Equality = decltype( std::equal_to<>{} )>
|
||||
template <typename RangeLike, typename Equality>
|
||||
constexpr
|
||||
UnorderedRangeEqualsMatcher<RangeLike, Equality>
|
||||
UnorderedRangeEquals( RangeLike&& range,
|
||||
Equality&& predicate = std::equal_to<>{} ) {
|
||||
UnorderedRangeEquals( RangeLike&& range, Equality&& predicate ) {
|
||||
return { CATCH_FORWARD( range ), CATCH_FORWARD( predicate ) };
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matcher that checks if all elements in a range are equal
|
||||
* to all elements in an initializer list, in some permutation.
|
||||
*
|
||||
* Uses the provided predicate `predicate` to do the comparisons
|
||||
* (defaulting to `std::equal_to`)
|
||||
*/
|
||||
template <typename T,
|
||||
typename Equality = decltype( std::equal_to<>{} )>
|
||||
constexpr
|
||||
UnorderedRangeEqualsMatcher<std::initializer_list<T>, Equality>
|
||||
UnorderedRangeEquals( std::initializer_list<T> range,
|
||||
Equality&& predicate = std::equal_to<>{} ) {
|
||||
return { range, CATCH_FORWARD( predicate ) };
|
||||
}
|
||||
} // namespace Matchers
|
||||
} // namespace Catch
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
project(
|
||||
'catch2',
|
||||
'cpp',
|
||||
version: '3.8.1', # CML version placeholder, don't delete
|
||||
version: '3.7.1', # CML version placeholder, don't delete
|
||||
license: 'BSL-1.0',
|
||||
meson_version: '>=0.54.1',
|
||||
)
|
||||
|
@ -1,2 +1 @@
|
||||
option('tests', type: 'boolean', value: true, description: 'Build the unit tests')
|
||||
option('install', type: 'boolean', value: true, description: 'Install the library')
|
||||
|
@ -40,6 +40,7 @@ set(BENCHMARK_SOURCES
|
||||
)
|
||||
set(BENCHMARK_FILES ${BENCHMARK_HEADERS} ${BENCHMARK_SOURCES})
|
||||
|
||||
|
||||
set(IMPL_HEADERS
|
||||
"${PROJECT_BINARY_DIR}/generated-includes/catch2/catch_user_config.hpp"
|
||||
${SOURCES_DIR}/catch_user_config.hpp.in
|
||||
@ -359,11 +360,13 @@ endif()
|
||||
set_target_properties(Catch2 PROPERTIES
|
||||
DEBUG_POSTFIX "d"
|
||||
VERSION ${PROJECT_VERSION}
|
||||
SOVERSION ${PROJECT_VERSION}
|
||||
)
|
||||
SOVERSION ${PROJECT_VERSION})
|
||||
|
||||
# require C++14
|
||||
target_compile_features(Catch2 PUBLIC cxx_std_14)
|
||||
target_compile_features(Catch2
|
||||
PUBLIC
|
||||
cxx_std_14
|
||||
)
|
||||
|
||||
configure_file(
|
||||
"${SOURCES_DIR}/catch_user_config.hpp.in"
|
||||
@ -410,6 +413,7 @@ if(NOT_SUBPROJECT)
|
||||
${CMAKE_INSTALL_BINDIR}
|
||||
)
|
||||
|
||||
|
||||
install(
|
||||
EXPORT
|
||||
Catch2Targets
|
||||
@ -446,13 +450,20 @@ if(CATCH_BUILD_EXAMPLES OR CATCH_BUILD_EXTRA_TESTS)
|
||||
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/generated-includes>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
target_compile_definitions(Catch2_buildall_interface INTERFACE CATCH_CONFIG_STATIC)
|
||||
target_compile_features(Catch2_buildall_interface INTERFACE cxx_std_14)
|
||||
target_compile_definitions(Catch2_buildall_interface
|
||||
INTERFACE
|
||||
CATCH_CONFIG_STATIC
|
||||
)
|
||||
target_compile_features(Catch2_buildall_interface
|
||||
INTERFACE
|
||||
cxx_std_14
|
||||
)
|
||||
endif()
|
||||
|
||||
list(APPEND CATCH_WARNING_TARGETS Catch2 Catch2WithMain)
|
||||
set(CATCH_WARNING_TARGETS ${CATCH_WARNING_TARGETS} PARENT_SCOPE)
|
||||
|
||||
|
||||
# We still do not support building dynamic library with hidden visibility
|
||||
# so we want to check & warn users if they do this. However, we won't abort
|
||||
# the configuration step so that we don't have to also provide an override.
|
||||
|
@ -178,7 +178,7 @@ namespace Catch {
|
||||
double diff = b - m;
|
||||
return a + diff * diff;
|
||||
} ) /
|
||||
static_cast<double>( last - first );
|
||||
( last - first );
|
||||
return std::sqrt( variance );
|
||||
}
|
||||
|
||||
@ -213,7 +213,7 @@ namespace Catch {
|
||||
double* first,
|
||||
double* last ) {
|
||||
auto count = last - first;
|
||||
double idx = static_cast<double>((count - 1) * k) / static_cast<double>(q);
|
||||
double idx = (count - 1) * k / static_cast<double>(q);
|
||||
int j = static_cast<int>(idx);
|
||||
double g = idx - j;
|
||||
std::nth_element(first, first + j, last);
|
||||
@ -316,10 +316,10 @@ namespace Catch {
|
||||
|
||||
double accel = sum_cubes / ( 6 * std::pow( sum_squares, 1.5 ) );
|
||||
long n = static_cast<long>( resample.size() );
|
||||
double prob_n = static_cast<double>(
|
||||
double prob_n =
|
||||
std::count_if( resample.begin(),
|
||||
resample.end(),
|
||||
[point]( double x ) { return x < point; } )) /
|
||||
[point]( double x ) { return x < point; } ) /
|
||||
static_cast<double>( n );
|
||||
// degenerate case with uniform samples
|
||||
if ( Catch::Detail::directCompare( prob_n, 0. ) ) {
|
||||
|
@ -30,7 +30,7 @@ namespace Catch {
|
||||
return static_cast<unsigned int>(getElapsedMicroseconds()/1000);
|
||||
}
|
||||
auto Timer::getElapsedSeconds() const -> double {
|
||||
return static_cast<double>(getElapsedMicroseconds())/1000000.0;
|
||||
return getElapsedMicroseconds()/1000000.0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -22,10 +22,7 @@ namespace Detail {
|
||||
const int hexThreshold = 255;
|
||||
|
||||
struct Endianness {
|
||||
enum Arch : uint8_t {
|
||||
Big,
|
||||
Little
|
||||
};
|
||||
enum Arch { Big, Little };
|
||||
|
||||
static Arch which() {
|
||||
int one = 1;
|
||||
|
@ -634,11 +634,7 @@ struct ratio_string<std::milli> {
|
||||
|
||||
#ifdef _MSC_VER
|
||||
std::tm timeInfo = {};
|
||||
const auto err = gmtime_s(&timeInfo, &converted);
|
||||
if ( err ) {
|
||||
return "gmtime from provided timepoint has failed. This "
|
||||
"happens e.g. with pre-1970 dates using Microsoft libc";
|
||||
}
|
||||
gmtime_s(&timeInfo, &converted);
|
||||
#else
|
||||
std::tm* timeInfo = std::gmtime(&converted);
|
||||
#endif
|
||||
|
@ -178,15 +178,6 @@
|
||||
#endif
|
||||
|
||||
|
||||
#cmakedefine CATCH_CONFIG_USE_BUILTIN_CONSTANT_P
|
||||
#cmakedefine CATCH_CONFIG_NO_USE_BUILTIN_CONSTANT_P
|
||||
|
||||
#if defined( CATCH_CONFIG_USE_BUILTIN_CONSTANT_P ) && \
|
||||
defined( CATCH_CONFIG_NO_USE_BUILTIN_CONSTANT_P )
|
||||
# error Cannot force USE_BUILTIN_CONSTANT_P to both ON and OFF
|
||||
#endif
|
||||
|
||||
|
||||
// ------
|
||||
// Simple toggle defines
|
||||
// their value is never used and they cannot be overridden
|
||||
|
@ -36,7 +36,7 @@ namespace Catch {
|
||||
}
|
||||
|
||||
Version const& libraryVersion() {
|
||||
static Version version( 3, 8, 1, "", 0 );
|
||||
static Version version( 3, 7, 1, "", 0 );
|
||||
return version;
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
#define CATCH_VERSION_MACROS_HPP_INCLUDED
|
||||
|
||||
#define CATCH_VERSION_MAJOR 3
|
||||
#define CATCH_VERSION_MINOR 8
|
||||
#define CATCH_VERSION_MINOR 7
|
||||
#define CATCH_VERSION_PATCH 1
|
||||
|
||||
#endif // CATCH_VERSION_MACROS_HPP_INCLUDED
|
||||
|
@ -91,7 +91,7 @@ public:
|
||||
|
||||
template <typename InputIterator,
|
||||
typename InputSentinel,
|
||||
typename ResultType = std::remove_const_t<typename std::iterator_traits<InputIterator>::value_type>>
|
||||
typename ResultType = typename std::iterator_traits<InputIterator>::value_type>
|
||||
GeneratorWrapper<ResultType> from_range(InputIterator from, InputSentinel to) {
|
||||
return GeneratorWrapper<ResultType>(Catch::Detail::make_unique<IteratorGenerator<ResultType>>(from, to));
|
||||
}
|
||||
|
@ -62,7 +62,7 @@
|
||||
# define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS \
|
||||
_Pragma( "GCC diagnostic ignored \"-Wshadow\"" )
|
||||
|
||||
# define CATCH_INTERNAL_CONFIG_USE_BUILTIN_CONSTANT_P
|
||||
# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__)
|
||||
|
||||
#endif
|
||||
|
||||
@ -86,45 +86,14 @@
|
||||
// clang-cl defines _MSC_VER as well as __clang__, which could cause the
|
||||
// start/stop internal suppression macros to be double defined.
|
||||
#if defined(__clang__) && !defined(_MSC_VER)
|
||||
# define CATCH_INTERNAL_CONFIG_USE_BUILTIN_CONSTANT_P
|
||||
|
||||
# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" )
|
||||
# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" )
|
||||
|
||||
#endif // __clang__ && !_MSC_VER
|
||||
|
||||
#if defined(__clang__)
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \
|
||||
_Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"")
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wparentheses\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wunused-variable\"" )
|
||||
|
||||
# if (__clang_major__ >= 20)
|
||||
# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wvariadic-macro-arguments-omitted\"" )
|
||||
# elif (__clang_major__ == 19)
|
||||
# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wc++20-extensions\"" )
|
||||
# else
|
||||
# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS
|
||||
_Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" )
|
||||
# endif
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wunused-template\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wcomma\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wshadow\"" )
|
||||
|
||||
#endif // __clang__
|
||||
|
||||
// As of this writing, IBM XL's implementation of __builtin_constant_p has a bug
|
||||
// which results in calls to destructors being emitted for each temporary,
|
||||
// without a matching initialization. In practice, this can result in something
|
||||
@ -141,11 +110,35 @@
|
||||
// https://developer.nvidia.com/nvidia_bug/3321845.
|
||||
//
|
||||
// Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented.
|
||||
#if defined( __ibmxl__ ) || defined( __CUDACC__ ) || defined( __NVCOMPILER )
|
||||
# define CATCH_INTERNAL_CONFIG_NO_USE_BUILTIN_CONSTANT_P
|
||||
# if !defined(__ibmxl__) && !defined(__CUDACC__) && !defined( __NVCOMPILER )
|
||||
# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) /* NOLINT(cppcoreguidelines-pro-type-vararg, hicpp-vararg) */
|
||||
# endif
|
||||
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \
|
||||
_Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"")
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wparentheses\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wunused-variable\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wunused-template\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wcomma\"" )
|
||||
|
||||
# define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS \
|
||||
_Pragma( "clang diagnostic ignored \"-Wshadow\"" )
|
||||
|
||||
#endif // __clang__
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// We know some environments not to support full POSIX signals
|
||||
@ -369,22 +362,6 @@
|
||||
#endif
|
||||
|
||||
|
||||
// The goal of this macro is to avoid evaluation of the arguments, but
|
||||
// still have the compiler warn on problems inside...
|
||||
#if defined( CATCH_INTERNAL_CONFIG_USE_BUILTIN_CONSTANT_P ) && \
|
||||
!defined( CATCH_INTERNAL_CONFIG_NO_USE_BUILTIN_CONSTANT_P ) && !defined(CATCH_CONFIG_USE_BUILTIN_CONSTANT_P)
|
||||
#define CATCH_CONFIG_USE_BUILTIN_CONSTANT_P
|
||||
#endif
|
||||
|
||||
#if defined( CATCH_CONFIG_USE_BUILTIN_CONSTANT_P ) && \
|
||||
!defined( CATCH_CONFIG_NO_USE_BUILTIN_CONSTANT_P )
|
||||
# define CATCH_INTERNAL_IGNORE_BUT_WARN( ... ) \
|
||||
(void)__builtin_constant_p( __VA_ARGS__ ) /* NOLINT(cppcoreguidelines-pro-type-vararg, \
|
||||
hicpp-vararg) */
|
||||
#else
|
||||
# define CATCH_INTERNAL_IGNORE_BUT_WARN( ... )
|
||||
#endif
|
||||
|
||||
// Even if we do not think the compiler has that warning, we still have
|
||||
// to provide a macro that can be used by the code.
|
||||
#if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION)
|
||||
@ -421,6 +398,13 @@
|
||||
# define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS
|
||||
#endif
|
||||
|
||||
|
||||
// The goal of this macro is to avoid evaluation of the arguments, but
|
||||
// still have the compiler warn on problems inside...
|
||||
#if !defined(CATCH_INTERNAL_IGNORE_BUT_WARN)
|
||||
# define CATCH_INTERNAL_IGNORE_BUT_WARN(...)
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10)
|
||||
# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS
|
||||
#elif defined(__clang__) && (__clang_major__ < 5)
|
||||
|
@ -161,7 +161,7 @@ namespace {
|
||||
#endif // Windows/ ANSI/ None
|
||||
|
||||
|
||||
#if defined( CATCH_PLATFORM_LINUX ) || defined( CATCH_PLATFORM_MAC ) || defined( __GLIBC__ )
|
||||
#if defined( CATCH_PLATFORM_LINUX ) || defined( CATCH_PLATFORM_MAC )
|
||||
# define CATCH_INTERNAL_HAS_ISATTY
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
@ -52,7 +52,7 @@ namespace {
|
||||
SimplePcg32::result_type SimplePcg32::operator()() {
|
||||
// prepare the output value
|
||||
const uint32_t xorshifted = static_cast<uint32_t>(((m_state >> 18u) ^ m_state) >> 27u);
|
||||
const auto output = rotate_right(xorshifted, static_cast<uint32_t>(m_state >> 59u));
|
||||
const auto output = rotate_right(xorshifted, m_state >> 59u);
|
||||
|
||||
// advance state
|
||||
m_state = m_state * 6364136223846793005ULL + s_inc;
|
||||
|
@ -96,65 +96,56 @@ namespace Catch {
|
||||
* Creates a matcher that checks if all elements in a range are equal
|
||||
* to all elements in another range.
|
||||
*
|
||||
* Uses the provided predicate `predicate` to do the comparisons
|
||||
* (defaulting to `std::equal_to`)
|
||||
* Uses `std::equal_to` to do the comparison
|
||||
*/
|
||||
template <typename RangeLike,
|
||||
typename Equality = decltype( std::equal_to<>{} )>
|
||||
template <typename RangeLike>
|
||||
constexpr
|
||||
std::enable_if_t<!Detail::is_matcher<RangeLike>::value,
|
||||
RangeEqualsMatcher<RangeLike, std::equal_to<>>>
|
||||
RangeEquals( RangeLike&& range ) {
|
||||
return { CATCH_FORWARD( range ), std::equal_to<>{} };
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matcher that checks if all elements in a range are equal
|
||||
* to all elements in another range.
|
||||
*
|
||||
* Uses to provided predicate `predicate` to do the comparisons
|
||||
*/
|
||||
template <typename RangeLike, typename Equality>
|
||||
constexpr
|
||||
RangeEqualsMatcher<RangeLike, Equality>
|
||||
RangeEquals( RangeLike&& range,
|
||||
Equality&& predicate = std::equal_to<>{} ) {
|
||||
RangeEquals( RangeLike&& range, Equality&& predicate ) {
|
||||
return { CATCH_FORWARD( range ), CATCH_FORWARD( predicate ) };
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matcher that checks if all elements in a range are equal
|
||||
* to all elements in an initializer list.
|
||||
* to all elements in another range, in some permutation
|
||||
*
|
||||
* Uses the provided predicate `predicate` to do the comparisons
|
||||
* (defaulting to `std::equal_to`)
|
||||
* Uses `std::equal_to` to do the comparison
|
||||
*/
|
||||
template <typename T,
|
||||
typename Equality = decltype( std::equal_to<>{} )>
|
||||
template <typename RangeLike>
|
||||
constexpr
|
||||
RangeEqualsMatcher<std::initializer_list<T>, Equality>
|
||||
RangeEquals( std::initializer_list<T> range,
|
||||
Equality&& predicate = std::equal_to<>{} ) {
|
||||
return { range, CATCH_FORWARD( predicate ) };
|
||||
std::enable_if_t<
|
||||
!Detail::is_matcher<RangeLike>::value,
|
||||
UnorderedRangeEqualsMatcher<RangeLike, std::equal_to<>>>
|
||||
UnorderedRangeEquals( RangeLike&& range ) {
|
||||
return { CATCH_FORWARD( range ), std::equal_to<>{} };
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matcher that checks if all elements in a range are equal
|
||||
* to all elements in another range, in some permutation.
|
||||
*
|
||||
* Uses the provided predicate `predicate` to do the comparisons
|
||||
* (defaulting to `std::equal_to`)
|
||||
* Uses to provided predicate `predicate` to do the comparisons
|
||||
*/
|
||||
template <typename RangeLike,
|
||||
typename Equality = decltype( std::equal_to<>{} )>
|
||||
template <typename RangeLike, typename Equality>
|
||||
constexpr
|
||||
UnorderedRangeEqualsMatcher<RangeLike, Equality>
|
||||
UnorderedRangeEquals( RangeLike&& range,
|
||||
Equality&& predicate = std::equal_to<>{} ) {
|
||||
UnorderedRangeEquals( RangeLike&& range, Equality&& predicate ) {
|
||||
return { CATCH_FORWARD( range ), CATCH_FORWARD( predicate ) };
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a matcher that checks if all elements in a range are equal
|
||||
* to all elements in an initializer list, in some permutation.
|
||||
*
|
||||
* Uses the provided predicate `predicate` to do the comparisons
|
||||
* (defaulting to `std::equal_to`)
|
||||
*/
|
||||
template <typename T,
|
||||
typename Equality = decltype( std::equal_to<>{} )>
|
||||
constexpr
|
||||
UnorderedRangeEqualsMatcher<std::initializer_list<T>, Equality>
|
||||
UnorderedRangeEquals( std::initializer_list<T> range,
|
||||
Equality&& predicate = std::equal_to<>{} ) {
|
||||
return { range, CATCH_FORWARD( predicate ) };
|
||||
}
|
||||
} // namespace Matchers
|
||||
} // namespace Catch
|
||||
|
||||
|
@ -16,7 +16,6 @@ configure_file(
|
||||
format: 'cmake@',
|
||||
install_dir: get_option('includedir') / 'catch2',
|
||||
configuration: conf_data,
|
||||
install: get_option('install')
|
||||
)
|
||||
|
||||
fs = import('fs')
|
||||
@ -340,9 +339,7 @@ foreach file : headers
|
||||
endif
|
||||
endforeach
|
||||
|
||||
if get_option('install')
|
||||
install_headers(file, subdir: join_paths(include_subdir, folder))
|
||||
endif
|
||||
endforeach
|
||||
|
||||
catch2_dependencies = []
|
||||
@ -359,7 +356,7 @@ catch2 = static_library(
|
||||
sources,
|
||||
dependencies: catch2_dependencies,
|
||||
include_directories: '..',
|
||||
install: get_option('install'),
|
||||
install: true,
|
||||
)
|
||||
|
||||
catch2_dep = declare_dependency(
|
||||
@ -367,21 +364,19 @@ catch2_dep = declare_dependency(
|
||||
include_directories: '..',
|
||||
)
|
||||
|
||||
if get_option('install')
|
||||
pkg.generate(
|
||||
catch2,
|
||||
filebase: 'catch2',
|
||||
description: 'A modern, C++-native, test framework for C++14 and above',
|
||||
url: 'https://github.com/catchorg/Catch2',
|
||||
)
|
||||
endif
|
||||
|
||||
catch2_with_main = static_library(
|
||||
'Catch2Main',
|
||||
'internal/catch_main.cpp',
|
||||
link_with: catch2,
|
||||
include_directories: '..',
|
||||
install: get_option('install'),
|
||||
install: true,
|
||||
)
|
||||
|
||||
catch2_with_main_dep = declare_dependency(
|
||||
@ -389,11 +384,9 @@ catch2_with_main_dep = declare_dependency(
|
||||
include_directories: '..',
|
||||
)
|
||||
|
||||
if get_option('install')
|
||||
pkg.generate(
|
||||
catch2_with_main,
|
||||
filebase: 'catch2-with-main',
|
||||
description: 'A modern, C++-native, test framework for C++14 and above (links in default main)',
|
||||
requires: 'catch2 = ' + meson.project_version(),
|
||||
)
|
||||
endif
|
||||
|
@ -214,7 +214,7 @@ struct RowBreak {};
|
||||
struct OutputFlush {};
|
||||
|
||||
class Duration {
|
||||
enum class Unit : uint8_t {
|
||||
enum class Unit {
|
||||
Auto,
|
||||
Nanoseconds,
|
||||
Microseconds,
|
||||
@ -286,10 +286,7 @@ public:
|
||||
};
|
||||
} // end anon namespace
|
||||
|
||||
enum class Justification : uint8_t {
|
||||
Left,
|
||||
Right
|
||||
};
|
||||
enum class Justification { Left, Right };
|
||||
|
||||
struct ColumnInfo {
|
||||
std::string name;
|
||||
|
@ -11,9 +11,11 @@ if(CATCH_BUILD_SURROGATES)
|
||||
# Returns the path to the generated file.
|
||||
function(createSurrogateFileTarget sourceHeader pathToFile)
|
||||
set(pathPrefix ${PROJECT_SOURCE_DIR}/src)
|
||||
|
||||
file(RELATIVE_PATH includePath ${pathPrefix} ${sourceHeader})
|
||||
|
||||
get_filename_component(basicFileName "${sourceHeader}" NAME_WE)
|
||||
|
||||
set(surrogateFilePath ${CMAKE_CURRENT_BINARY_DIR}/surrogates/surrogate_${basicFileName}.cpp)
|
||||
|
||||
add_custom_command(
|
||||
@ -39,6 +41,7 @@ if(CATCH_BUILD_SURROGATES)
|
||||
set(${OutArg} ${AllHeaders} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
ExtractCatch2Headers(mainHeaders)
|
||||
|
||||
if (NOT mainHeaders)
|
||||
@ -50,10 +53,12 @@ if(CATCH_BUILD_SURROGATES)
|
||||
list(APPEND surrogateFiles ${pathToGeneratedFile})
|
||||
endforeach()
|
||||
|
||||
|
||||
add_executable(Catch2SurrogateTarget
|
||||
${surrogateFiles}
|
||||
)
|
||||
target_link_libraries(Catch2SurrogateTarget PRIVATE Catch2WithMain)
|
||||
|
||||
endif()
|
||||
|
||||
####
|
||||
@ -62,9 +67,12 @@ endif()
|
||||
# until 3.13 (not yet released)
|
||||
####
|
||||
if (MSVC)
|
||||
configure_file(${CATCH_DIR}/tools/misc/SelfTest.vcxproj.user ${CMAKE_BINARY_DIR}/tests COPYONLY)
|
||||
configure_file(${CATCH_DIR}/tools/misc/SelfTest.vcxproj.user
|
||||
${CMAKE_BINARY_DIR}/tests
|
||||
COPYONLY)
|
||||
endif() #Temporary workaround
|
||||
|
||||
|
||||
# define the sources of the self test
|
||||
# Please keep these ordered alphabetically
|
||||
set(TEST_SOURCES
|
||||
@ -134,6 +142,7 @@ set(TEST_HEADERS
|
||||
${SELF_TEST_DIR}/helpers/type_with_lit_0_comparisons.hpp
|
||||
)
|
||||
|
||||
|
||||
# Specify the headers, too, so CLion recognises them as project files
|
||||
set(HEADERS
|
||||
${TOP_LEVEL_HEADERS}
|
||||
@ -145,8 +154,8 @@ set(HEADERS
|
||||
)
|
||||
|
||||
# Provide some groupings for IDEs
|
||||
#source_group("benchmark" FILES ${BENCHMARK_HEADERS} ${BENCHMARK_SOURCES})
|
||||
#source_group("Tests" FILES ${TEST_SOURCES})
|
||||
#SOURCE_GROUP("benchmark" FILES ${BENCHMARK_HEADERS} ${BENCHMARK_SOURCES})
|
||||
#SOURCE_GROUP("Tests" FILES ${TEST_SOURCES})
|
||||
|
||||
include(CTest)
|
||||
|
||||
@ -210,6 +219,7 @@ set_tests_properties(List::Tags::XmlOutput PROPERTIES
|
||||
FAIL_REGULAR_EXPRESSION "[0-9]+ tags"
|
||||
)
|
||||
|
||||
|
||||
add_test(NAME List::Reporters::Output COMMAND $<TARGET_FILE:SelfTest> --list-reporters)
|
||||
set_tests_properties(List::Reporters::Output PROPERTIES PASS_REGULAR_EXPRESSION "Available reporters:")
|
||||
add_test(NAME List::Reporters::ExitCode COMMAND $<TARGET_FILE:SelfTest> --list-reporters)
|
||||
@ -437,6 +447,7 @@ set_tests_properties("Benchmarking::SkipBenchmarkMacros"
|
||||
FAIL_REGULAR_EXPRESSION "benchmark name"
|
||||
)
|
||||
|
||||
|
||||
add_test(NAME "Benchmarking::FailureReporting::OptimizedOut"
|
||||
COMMAND
|
||||
$<TARGET_FILE:SelfTest> "Failing benchmarks" -c "empty" -r xml
|
||||
@ -600,6 +611,7 @@ set_tests_properties("Reporters::JUnit::NamespacesAreNormalized"
|
||||
if (CATCH_ENABLE_CONFIGURE_TESTS)
|
||||
foreach(testName "DefaultReporter" "Disable" "DisableStringification"
|
||||
"ExperimentalRedirect")
|
||||
|
||||
add_test(NAME "CMakeConfig::${testName}"
|
||||
COMMAND
|
||||
"${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_LIST_DIR}/TestScripts/testConfigure${testName}.py" "${CATCH_DIR}" "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
@ -609,6 +621,7 @@ if(CATCH_ENABLE_CONFIGURE_TESTS)
|
||||
COST 240
|
||||
LABELS "uses-python"
|
||||
)
|
||||
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
@ -633,6 +646,7 @@ foreach(reporterName # "Automake" - the simple .trs format does not support any
|
||||
# "TeamCity" - does not seem to support test suite-level metadata/comments
|
||||
"XML"
|
||||
"JSON")
|
||||
|
||||
add_test(NAME "Reporters:Filters:${reporterName}"
|
||||
COMMAND
|
||||
$<TARGET_FILE:SelfTest> [comparisons][string-case] "CaseInsensitiveLess is case insensitive"
|
||||
@ -661,7 +675,9 @@ foreach(reporterName # "Automake" - the simple .trs format does not support any
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "18181818"
|
||||
)
|
||||
|
||||
endforeach()
|
||||
|
||||
|
||||
list(APPEND CATCH_WARNING_TARGETS SelfTest)
|
||||
set(CATCH_WARNING_TARGETS ${CATCH_WARNING_TARGETS} PARENT_SCOPE)
|
||||
|
@ -1,8 +1,14 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
#
|
||||
# Build extra tests.
|
||||
#
|
||||
|
||||
cmake_minimum_required( VERSION 3.10 )
|
||||
|
||||
project( Catch2ExtraTests LANGUAGES CXX )
|
||||
|
||||
message( STATUS "Extra tests included" )
|
||||
|
||||
|
||||
add_test(
|
||||
NAME TestShardingIntegration
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${CATCH_DIR}/tests/TestScripts/testSharding.py $<TARGET_FILE:SelfTest>
|
||||
@ -16,7 +22,8 @@ add_test(
|
||||
NAME TestSharding::OverlyLargeShardIndex
|
||||
COMMAND $<TARGET_FILE:SelfTest> --shard-index 5 --shard-count 5
|
||||
)
|
||||
set_tests_properties(TestSharding::OverlyLargeShardIndex
|
||||
set_tests_properties(
|
||||
TestSharding::OverlyLargeShardIndex
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "The shard count \\(5\\) must be greater than the shard index \\(5\\)"
|
||||
)
|
||||
@ -25,7 +32,8 @@ set_tests_properties(TestSharding::OverlyLargeShardIndex
|
||||
# they have non-trivial execution time, so they are categorized as
|
||||
# extra tests, so that they are run less.
|
||||
add_test(NAME MinDuration::SimpleThreshold COMMAND $<TARGET_FILE:SelfTest> --min-duration 0.950 [min_duration_test])
|
||||
set_tests_properties(MinDuration::SimpleThreshold
|
||||
set_tests_properties(
|
||||
MinDuration::SimpleThreshold
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "s: sleep_for_1000ms"
|
||||
FAIL_REGULAR_EXPRESSION "sleep_for_100ms"
|
||||
@ -36,7 +44,8 @@ set_tests_properties(MinDuration::SimpleThreshold
|
||||
# -d yes overrides the threshold, so we should see the faster test even
|
||||
# with a ridiculous high min duration threshold
|
||||
add_test(NAME MinDuration::DurationOverrideYes COMMAND $<TARGET_FILE:SelfTest> --min-duration 1.0 -d yes [min_duration_test])
|
||||
set_tests_properties(MinDuration::DurationOverrideYes
|
||||
set_tests_properties(
|
||||
MinDuration::DurationOverrideYes
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "s: sleep_for_100ms"
|
||||
)
|
||||
@ -44,11 +53,13 @@ set_tests_properties(MinDuration::DurationOverrideYes
|
||||
# -d no overrides the threshold, so we should never see any tests even
|
||||
# with ridiculously low min duration threshold
|
||||
add_test(NAME MinDuration::DurationOverrideNo COMMAND $<TARGET_FILE:SelfTest> --min-duration 0.0001 -d no [min_duration_test])
|
||||
set_tests_properties(MinDuration::DurationOverrideNo
|
||||
set_tests_properties(
|
||||
MinDuration::DurationOverrideNo
|
||||
PROPERTIES
|
||||
FAIL_REGULAR_EXPRESSION "sleep_for_250ms"
|
||||
)
|
||||
|
||||
|
||||
# ------------ end of duration reporting tests
|
||||
|
||||
# define folders used:
|
||||
@ -61,7 +72,8 @@ target_compile_definitions(PrefixedMacros PRIVATE CATCH_CONFIG_PREFIX_ALL CATCH_
|
||||
target_link_libraries( PrefixedMacros Catch2WithMain )
|
||||
|
||||
add_test(NAME CATCH_CONFIG_PREFIX_ALL COMMAND PrefixedMacros -s)
|
||||
set_tests_properties(CATCH_CONFIG_PREFIX_ALL
|
||||
set_tests_properties(
|
||||
CATCH_CONFIG_PREFIX_ALL
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "CATCH_"
|
||||
FAIL_REGULAR_EXPRESSION
|
||||
@ -70,6 +82,7 @@ set_tests_properties(CATCH_CONFIG_PREFIX_ALL
|
||||
" REQUIRE; REQUIRE_FALSE; REQUIRE_THROWS; REQUIRE_THROWS_AS; REQUIRE_THROWS_WITH; REQUIRE_THROWS_MATCHES; REQUIRE_NOTHROW; CHECK; CHECK_FALSE; CHECKED_IF; CHECKED_ELSE; CHECK_NOFAIL; CHECK_THROWS; CHECK_THROWS_AS; CHECK_THROWS_WITH; CHECK_THROWS_MATCHES; CHECK_NOTHROW; REQUIRE_THAT; CHECK_THAT"
|
||||
)
|
||||
|
||||
|
||||
add_executable(DisabledMacros ${TESTS_DIR}/X02-DisabledMacros.cpp)
|
||||
target_compile_definitions( DisabledMacros PRIVATE CATCH_CONFIG_DISABLE )
|
||||
# Macro configuration does not touch the compiled parts, so we can link
|
||||
@ -77,13 +90,15 @@ target_compile_definitions(DisabledMacros PRIVATE CATCH_CONFIG_DISABLE)
|
||||
target_link_libraries( DisabledMacros Catch2WithMain )
|
||||
|
||||
add_test(NAME CATCH_CONFIG_DISABLE-1 COMMAND DisabledMacros -s)
|
||||
set_tests_properties(CATCH_CONFIG_DISABLE-1
|
||||
set_tests_properties(
|
||||
CATCH_CONFIG_DISABLE-1
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "No tests ran"
|
||||
FAIL_REGULAR_EXPRESSION "This should not happen"
|
||||
)
|
||||
add_test(NAME CATCH_CONFIG_DISABLE-2 COMMAND DisabledMacros --list-tests)
|
||||
set_tests_properties(CATCH_CONFIG_DISABLE-2
|
||||
set_tests_properties(
|
||||
CATCH_CONFIG_DISABLE-2
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "0 test cases"
|
||||
)
|
||||
@ -103,7 +118,8 @@ target_compile_definitions(DisabledExceptions-CustomHandler PUBLIC CATCH_CONFIG_
|
||||
|
||||
|
||||
add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-1 COMMAND DisabledExceptions-DefaultHandler "Tests that run")
|
||||
set_tests_properties(CATCH_CONFIG_DISABLE_EXCEPTIONS-1
|
||||
set_tests_properties(
|
||||
CATCH_CONFIG_DISABLE_EXCEPTIONS-1
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "assertions: 4 \| 2 passed \| 2 failed"
|
||||
FAIL_REGULAR_EXPRESSION "abort;terminate;fatal"
|
||||
@ -144,6 +160,7 @@ set_tests_properties(BazelEnv::TESTBRIDGE_TEST_ONLY
|
||||
PASS_REGULAR_EXPRESSION "All tests passed \\(1 assertion in 1 test case\\)"
|
||||
)
|
||||
|
||||
|
||||
add_test(NAME BazelEnv::Sharding
|
||||
COMMAND
|
||||
"${PYTHON_EXECUTABLE}" "${CATCH_DIR}/tests/TestScripts/testBazelSharding.py"
|
||||
@ -155,60 +172,72 @@ set_tests_properties(BazelEnv::Sharding
|
||||
LABELS "uses-python"
|
||||
)
|
||||
|
||||
|
||||
# The default handler on Windows leads to the just-in-time debugger firing,
|
||||
# which makes this test unsuitable for CI and headless runs, as it opens
|
||||
# up an interactive dialog.
|
||||
if (NOT WIN32)
|
||||
add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-2 COMMAND DisabledExceptions-DefaultHandler "Tests that abort")
|
||||
set_tests_properties(CATCH_CONFIG_DISABLE_EXCEPTIONS-2
|
||||
set_tests_properties(
|
||||
CATCH_CONFIG_DISABLE_EXCEPTIONS-2
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "Catch will terminate"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-3 COMMAND DisabledExceptions-CustomHandler "Tests that run")
|
||||
set_tests_properties(CATCH_CONFIG_DISABLE_EXCEPTIONS-3
|
||||
set_tests_properties(
|
||||
CATCH_CONFIG_DISABLE_EXCEPTIONS-3
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "assertions: 4 \| 2 passed \| 2 failed"
|
||||
FAIL_REGULAR_EXPRESSION "====== CUSTOM HANDLER ======"
|
||||
)
|
||||
|
||||
add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-4 COMMAND DisabledExceptions-CustomHandler "Tests that abort")
|
||||
set_tests_properties(CATCH_CONFIG_DISABLE_EXCEPTIONS-4
|
||||
set_tests_properties(
|
||||
CATCH_CONFIG_DISABLE_EXCEPTIONS-4
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "====== CUSTOM HANDLER ======"
|
||||
)
|
||||
|
||||
|
||||
add_executable(DeferredStaticChecks ${TESTS_DIR}/X05-DeferredStaticChecks.cpp)
|
||||
target_link_libraries(DeferredStaticChecks PRIVATE Catch2WithMain)
|
||||
target_compile_definitions(DeferredStaticChecks PRIVATE "CATCH_CONFIG_RUNTIME_STATIC_REQUIRE")
|
||||
|
||||
add_test(NAME DeferredStaticChecks COMMAND DeferredStaticChecks -r compact)
|
||||
set_tests_properties(DeferredStaticChecks
|
||||
set_tests_properties(
|
||||
DeferredStaticChecks
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "test cases: 1 \\| 1 failed\nassertions: 3 \\| 3 failed"
|
||||
)
|
||||
|
||||
|
||||
add_executable(FallbackStringifier ${TESTS_DIR}/X10-FallbackStringifier.cpp)
|
||||
target_compile_definitions( FallbackStringifier PRIVATE CATCH_CONFIG_FALLBACK_STRINGIFIER=fallbackStringifier )
|
||||
target_link_libraries( FallbackStringifier Catch2WithMain )
|
||||
|
||||
add_test(NAME FallbackStringifier COMMAND FallbackStringifier -r compact -s)
|
||||
set_tests_properties(FallbackStringifier
|
||||
set_tests_properties(
|
||||
FallbackStringifier
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "foo{} for: { !!! }"
|
||||
)
|
||||
|
||||
|
||||
add_executable(DisableStringification ${TESTS_DIR}/X11-DisableStringification.cpp)
|
||||
target_compile_definitions( DisableStringification PRIVATE CATCH_CONFIG_DISABLE_STRINGIFICATION )
|
||||
target_link_libraries(DisableStringification Catch2WithMain)
|
||||
add_test(NAME CATCH_CONFIG_DISABLE_STRINGIFICATION COMMAND DisableStringification -r compact -s)
|
||||
set_tests_properties(CATCH_CONFIG_DISABLE_STRINGIFICATION
|
||||
set_tests_properties(
|
||||
CATCH_CONFIG_DISABLE_STRINGIFICATION
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "Disabled by CATCH_CONFIG_DISABLE_STRINGIFICATION"
|
||||
FAIL_REGULAR_EXPRESSION "Hidden{} == Hidden{}"
|
||||
)
|
||||
|
||||
|
||||
# This test touches windows.h, so it should only be compiled under msvc
|
||||
if (MSVC)
|
||||
# This test fails if it does not compile and succeeds otherwise
|
||||
@ -218,6 +247,7 @@ if(MSVC)
|
||||
list(APPEND CATCH_WARNING_TARGETS ${EXTRA_TEST_BINARIES} WindowsHeader)
|
||||
endif()
|
||||
|
||||
|
||||
add_executable(PartialTestCaseEvents ${TESTS_DIR}/X21-PartialTestCaseEvents.cpp)
|
||||
target_link_libraries(PartialTestCaseEvents PRIVATE Catch2WithMain)
|
||||
add_test(
|
||||
@ -235,19 +265,22 @@ add_test(
|
||||
NAME BenchmarksInCumulativeReporter
|
||||
COMMAND BenchmarksInCumulativeReporter --reporter testReporter
|
||||
)
|
||||
set_tests_properties(BenchmarksInCumulativeReporter
|
||||
set_tests_properties(
|
||||
BenchmarksInCumulativeReporter
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "1\n2\n3\n4\n5\n"
|
||||
COST 30
|
||||
)
|
||||
|
||||
|
||||
add_executable(CasingInReporterNames ${TESTS_DIR}/X23-CasingInReporterNames.cpp)
|
||||
target_link_libraries(CasingInReporterNames PRIVATE Catch2::Catch2WithMain)
|
||||
add_test(
|
||||
NAME Reporters::registration-is-case-preserving
|
||||
COMMAND CasingInReporterNames --list-reporters
|
||||
)
|
||||
set_tests_properties(Reporters::registration-is-case-preserving
|
||||
set_tests_properties(
|
||||
Reporters::registration-is-case-preserving
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "testReporterCASED"
|
||||
)
|
||||
@ -255,7 +288,8 @@ add_test(
|
||||
NAME Reporters::selection-is-case-insensitive
|
||||
COMMAND CasingInReporterNames -r testReportercased
|
||||
)
|
||||
set_tests_properties(Reporters::selection-is-case-insensitive
|
||||
set_tests_properties(
|
||||
Reporters::selection-is-case-insensitive
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "TestReporter constructed"
|
||||
)
|
||||
@ -267,12 +301,14 @@ add_test(
|
||||
COMMAND CapturedStdoutInTestCaseEvents
|
||||
--reporter test-reporter
|
||||
)
|
||||
set_tests_properties(Reporters::CapturedStdOutInEvents
|
||||
set_tests_properties(
|
||||
Reporters::CapturedStdOutInEvents
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "X27 - TestReporter constructed"
|
||||
FAIL_REGULAR_EXPRESSION "X27 ERROR"
|
||||
)
|
||||
|
||||
|
||||
if (MSVC)
|
||||
set(_NullFile "NUL")
|
||||
else()
|
||||
@ -293,13 +329,15 @@ if(NOT MEMORYCHECK_COMMAND)
|
||||
--reporter junit::out=${_NullFile}
|
||||
)
|
||||
|
||||
set_tests_properties(MultiReporter::NoncapturingListenerDoesntCauseStdoutPassThrough
|
||||
set_tests_properties(
|
||||
MultiReporter::NoncapturingListenerDoesntCauseStdoutPassThrough
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "X24 - NonCapturingListener initialized"
|
||||
FAIL_REGULAR_EXPRESSION "X24 - FooBarBaz"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
add_executable(ListenerCanAskForCapturedStdout ${TESTS_DIR}/X25-ListenerCanAskForCapturedStdout.cpp)
|
||||
target_link_libraries(ListenerCanAskForCapturedStdout PRIVATE Catch2::Catch2WithMain)
|
||||
add_test(
|
||||
@ -308,7 +346,8 @@ add_test(
|
||||
--reporter compact::out=${_NullFile}
|
||||
--reporter console::out=${_NullFile}
|
||||
)
|
||||
set_tests_properties(MultiReporter::CapturingListenerCausesStdoutCapture
|
||||
set_tests_properties(
|
||||
MultiReporter::CapturingListenerCausesStdoutCapture
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "CapturingListener initialized"
|
||||
FAIL_REGULAR_EXPRESSION "X25 - ERROR"
|
||||
@ -321,7 +360,8 @@ add_test(
|
||||
COMMAND ReporterPreferencesForPassingAssertionsIsRespected
|
||||
--reporter test-reporter
|
||||
)
|
||||
set_tests_properties(Reporters::PreferencesForPassingAssertionsIsRespected
|
||||
set_tests_properties(
|
||||
Reporters::PreferencesForPassingAssertionsIsRespected
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "X26 - TestReporter constructed"
|
||||
FAIL_REGULAR_EXPRESSION "X26 - assertionEnded"
|
||||
@ -332,7 +372,8 @@ add_test(
|
||||
--reporter test-reporter
|
||||
--reporter console::out=${_NullFile}
|
||||
)
|
||||
set_tests_properties(MultiReporter::PreferencesForPassingAssertionsIsRespected
|
||||
set_tests_properties(
|
||||
MultiReporter::PreferencesForPassingAssertionsIsRespected
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "X26 - TestReporter constructed"
|
||||
FAIL_REGULAR_EXPRESSION "X26 - assertionEnded"
|
||||
@ -344,7 +385,8 @@ add_test(
|
||||
NAME ListenersGetEventsBeforeReporters
|
||||
COMMAND ListenersGetEventsBeforeReporters --reporter test-reporter
|
||||
)
|
||||
set_tests_properties(ListenersGetEventsBeforeReporters
|
||||
set_tests_properties(
|
||||
ListenersGetEventsBeforeReporters
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "X28 - TestReporter constructed"
|
||||
FAIL_REGULAR_EXPRESSION "X28 - ERROR"
|
||||
@ -357,18 +399,21 @@ add_test(
|
||||
COMMAND CustomArgumentsForReporters
|
||||
--reporter "test-reporter::Xa b=c 1::Xz:e = 1234"
|
||||
)
|
||||
set_tests_properties(CustomArgumentsForReporters
|
||||
set_tests_properties(
|
||||
CustomArgumentsForReporters
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "Xa b=c 1::Xz:e = 1234"
|
||||
)
|
||||
|
||||
|
||||
add_executable(DuplicatedTestCases-SameNameAndTags ${TESTS_DIR}/X31-DuplicatedTestCases.cpp)
|
||||
target_link_libraries(DuplicatedTestCases-SameNameAndTags PRIVATE Catch2::Catch2WithMain)
|
||||
add_test(
|
||||
NAME DuplicatedTestCases::SameNameAndTags
|
||||
COMMAND $<TARGET_FILE:DuplicatedTestCases-SameNameAndTags>
|
||||
)
|
||||
set_tests_properties(DuplicatedTestCases::SameNameAndTags
|
||||
set_tests_properties(
|
||||
DuplicatedTestCases::SameNameAndTags
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "error: .* already defined\\."
|
||||
)
|
||||
@ -379,7 +424,8 @@ add_test(
|
||||
NAME DuplicatedTestCases::SameNameDifferentTags
|
||||
COMMAND $<TARGET_FILE:DuplicatedTestCases-SameNameDifferentTags>
|
||||
)
|
||||
set_tests_properties(DuplicatedTestCases::SameNameDifferentTags
|
||||
set_tests_properties(
|
||||
DuplicatedTestCases::SameNameDifferentTags
|
||||
PROPERTIES
|
||||
FAIL_REGULAR_EXPRESSION "error: .* already defined\\."
|
||||
)
|
||||
@ -390,7 +436,8 @@ add_test(
|
||||
NAME DuplicatedTestCases::DuplicatedTestCaseMethods
|
||||
COMMAND $<TARGET_FILE:DuplicatedTestCases-DuplicatedTestCaseMethods>
|
||||
)
|
||||
set_tests_properties(DuplicatedTestCases::DuplicatedTestCaseMethods
|
||||
set_tests_properties(
|
||||
DuplicatedTestCases::DuplicatedTestCaseMethods
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "error: .* already defined\\."
|
||||
)
|
||||
@ -401,18 +448,21 @@ add_test(
|
||||
NAME DuplicatedTestCases::DuplicatedTestCaseMethodsDifferentFixtures
|
||||
COMMAND $<TARGET_FILE:DuplicatedTestCases-DifferentFixtures>
|
||||
)
|
||||
set_tests_properties(DuplicatedTestCases::DuplicatedTestCaseMethodsDifferentFixtures
|
||||
set_tests_properties(
|
||||
DuplicatedTestCases::DuplicatedTestCaseMethodsDifferentFixtures
|
||||
PROPERTIES
|
||||
FAIL_REGULAR_EXPRESSION "error: .* already defined\\."
|
||||
)
|
||||
|
||||
|
||||
add_executable(DuplicatedReporters ${TESTS_DIR}/X35-DuplicatedReporterNames.cpp)
|
||||
target_link_libraries(DuplicatedReporters PRIVATE Catch2::Catch2WithMain)
|
||||
add_test(
|
||||
NAME Reporters::RegistrationErrorsAreCaught
|
||||
COMMAND $<TARGET_FILE:DuplicatedReporters>
|
||||
)
|
||||
set_tests_properties(Reporters::RegistrationErrorsAreCaught
|
||||
set_tests_properties(
|
||||
Reporters::RegistrationErrorsAreCaught
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "Errors occurred during startup!"
|
||||
)
|
||||
@ -423,7 +473,8 @@ add_test(
|
||||
NAME Reporters::CrashInJunitReporter
|
||||
COMMAND ${CMAKE_COMMAND} -E env $<TARGET_FILE:ReportingCrashWithJunitReporter> --reporter JUnit
|
||||
)
|
||||
set_tests_properties(Reporters::CrashInJunitReporter
|
||||
set_tests_properties(
|
||||
Reporters::CrashInJunitReporter
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "</testsuites>"
|
||||
LABELS "uses-signals"
|
||||
@ -443,7 +494,8 @@ add_test(
|
||||
#add_executable(DebugBreakMacros ${TESTS_DIR}/X12-CustomDebugBreakMacro.cpp)
|
||||
#target_link_libraries(DebugBreakMacros Catch2)
|
||||
#add_test(NAME DebugBreakMacros COMMAND DebugBreakMacros --break)
|
||||
#set_tests_properties(DebugBreakMacros
|
||||
#set_tests_properties(
|
||||
# DebugBreakMacros
|
||||
# PROPERTIES
|
||||
# PASS_REGULAR_EXPRESSION "Pretty please, break into debugger"
|
||||
#)
|
||||
@ -470,6 +522,7 @@ add_test(
|
||||
COMMAND $<TARGET_FILE:NoTests> --list-listeners
|
||||
)
|
||||
|
||||
|
||||
add_executable(AllSkipped ${TESTS_DIR}/X93-AllSkipped.cpp)
|
||||
target_link_libraries(AllSkipped PRIVATE Catch2::Catch2WithMain)
|
||||
|
||||
@ -505,6 +558,7 @@ list(FILTER EXTRA_TEST_BINARIES EXCLUDE REGEX "DisabledExceptions.*")
|
||||
list(APPEND CATCH_WARNING_TARGETS ${EXTRA_TEST_BINARIES})
|
||||
set(CATCH_WARNING_TARGETS ${CATCH_WARNING_TARGETS} PARENT_SCOPE)
|
||||
|
||||
|
||||
# This sets up a one-off executable that compiles against the amalgamated
|
||||
# files, and then runs it for a super simple check that the amalgamated
|
||||
# files are usable.
|
||||
@ -517,7 +571,8 @@ target_include_directories(AmalgamatedTestCompilation PRIVATE ${CATCH_DIR}/extra
|
||||
target_compile_features(AmalgamatedTestCompilation PRIVATE cxx_std_14)
|
||||
|
||||
add_test(NAME AmalgamatedFileTest COMMAND AmalgamatedTestCompilation)
|
||||
set_tests_properties(AmalgamatedFileTest
|
||||
set_tests_properties(
|
||||
AmalgamatedFileTest
|
||||
PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "All tests passed \\(14 assertions in 3 test cases\\)"
|
||||
)
|
||||
|
@ -136,8 +136,8 @@ Nor would this
|
||||
:test-result: SKIP Empty generators can SKIP in constructor
|
||||
:test-result: PASS Empty stream name opens cout stream
|
||||
:test-result: FAIL EndsWith string matcher
|
||||
:test-result: PASS Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
:test-result: PASS Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
:test-result: PASS Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
:test-result: PASS Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM
|
||||
:test-result: PASS Epsilon only applies to Approx's value
|
||||
:test-result: XFAIL Equality checks that should fail
|
||||
:test-result: PASS Equality checks that should succeed
|
||||
|
@ -134,8 +134,8 @@
|
||||
:test-result: SKIP Empty generators can SKIP in constructor
|
||||
:test-result: PASS Empty stream name opens cout stream
|
||||
:test-result: FAIL EndsWith string matcher
|
||||
:test-result: PASS Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
:test-result: PASS Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
:test-result: PASS Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
:test-result: PASS Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM
|
||||
:test-result: PASS Epsilon only applies to Approx's value
|
||||
:test-result: XFAIL Equality checks that should fail
|
||||
:test-result: PASS Equality checks that should succeed
|
||||
|
@ -2284,8 +2284,6 @@ MatchersRanges.tests.cpp:<line number>: passed: vector_a, RangeEquals( vector_a_
|
||||
MatchersRanges.tests.cpp:<line number>: passed: vector_a, !RangeEquals( vector_b, close_enough ) for: { 1, 2, 3 } not elements are { 3, 3, 4 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: needs_adl1, RangeEquals( needs_adl2 ) for: { 1, 2, 3, 4, 5 } elements are { 1, 2, 3, 4, 5 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: needs_adl1, RangeEquals( needs_adl3, []( int l, int r ) { return l + 1 == r; } ) for: { 1, 2, 3, 4, 5 } elements are { 2, 3, 4, 5, 6 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: array_a, RangeEquals( { 1, 2, 3 } ) for: { 1, 2, 3 } elements are { 1, 2, 3 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: array_a, RangeEquals( { 2, 4, 6 }, []( int l, int r ) { return l * 2 == r; } ) for: { 1, 2, 3 } elements are { 2, 4, 6 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: mocked1, !RangeEquals( arr ) for: { 1, 2, 3, 4 } not elements are { 1, 2, 4, 4 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: mocked1.m_derefed[0] for: true
|
||||
MatchersRanges.tests.cpp:<line number>: passed: mocked1.m_derefed[1] for: true
|
||||
@ -2306,8 +2304,6 @@ MatchersRanges.tests.cpp:<line number>: passed: vector_a, !UnorderedRangeEquals(
|
||||
MatchersRanges.tests.cpp:<line number>: passed: vector_a, UnorderedRangeEquals( vector_a_plus_1, close_enough ) for: { 1, 10, 20 } unordered elements are { 11, 21, 2 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: vector_a, !UnorderedRangeEquals( vector_b, close_enough ) for: { 1, 10, 21 } not unordered elements are { 11, 21, 3 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: needs_adl1, UnorderedRangeEquals( needs_adl2 ) for: { 1, 2, 3, 4, 5 } unordered elements are { 1, 2, 3, 4, 5 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: array_a, UnorderedRangeEquals( { 10, 20, 1 } ) for: { 1, 10, 20 } unordered elements are { 10, 20, 1 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: array_a, UnorderedRangeEquals( { 11, 21, 2 }, []( int l, int r ) { return std::abs( l - r ) <= 1; } ) for: { 1, 10, 20 } unordered elements are { 11, 21, 2 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: empty_vec, SizeIs(0) for: { } has size == 0
|
||||
MatchersRanges.tests.cpp:<line number>: passed: empty_vec, !SizeIs(2) for: { } not has size == 2
|
||||
MatchersRanges.tests.cpp:<line number>: passed: empty_vec, SizeIs(Lt(2)) for: { } size matches is less than 2
|
||||
@ -2855,6 +2851,6 @@ InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
test cases: 419 | 313 passed | 86 failed | 6 skipped | 14 failed as expected
|
||||
assertions: 2269 | 2087 passed | 147 failed | 35 failed as expected
|
||||
assertions: 2265 | 2083 passed | 147 failed | 35 failed as expected
|
||||
|
||||
|
||||
|
@ -2277,8 +2277,6 @@ MatchersRanges.tests.cpp:<line number>: passed: vector_a, RangeEquals( vector_a_
|
||||
MatchersRanges.tests.cpp:<line number>: passed: vector_a, !RangeEquals( vector_b, close_enough ) for: { 1, 2, 3 } not elements are { 3, 3, 4 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: needs_adl1, RangeEquals( needs_adl2 ) for: { 1, 2, 3, 4, 5 } elements are { 1, 2, 3, 4, 5 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: needs_adl1, RangeEquals( needs_adl3, []( int l, int r ) { return l + 1 == r; } ) for: { 1, 2, 3, 4, 5 } elements are { 2, 3, 4, 5, 6 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: array_a, RangeEquals( { 1, 2, 3 } ) for: { 1, 2, 3 } elements are { 1, 2, 3 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: array_a, RangeEquals( { 2, 4, 6 }, []( int l, int r ) { return l * 2 == r; } ) for: { 1, 2, 3 } elements are { 2, 4, 6 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: mocked1, !RangeEquals( arr ) for: { 1, 2, 3, 4 } not elements are { 1, 2, 4, 4 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: mocked1.m_derefed[0] for: true
|
||||
MatchersRanges.tests.cpp:<line number>: passed: mocked1.m_derefed[1] for: true
|
||||
@ -2299,8 +2297,6 @@ MatchersRanges.tests.cpp:<line number>: passed: vector_a, !UnorderedRangeEquals(
|
||||
MatchersRanges.tests.cpp:<line number>: passed: vector_a, UnorderedRangeEquals( vector_a_plus_1, close_enough ) for: { 1, 10, 20 } unordered elements are { 11, 21, 2 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: vector_a, !UnorderedRangeEquals( vector_b, close_enough ) for: { 1, 10, 21 } not unordered elements are { 11, 21, 3 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: needs_adl1, UnorderedRangeEquals( needs_adl2 ) for: { 1, 2, 3, 4, 5 } unordered elements are { 1, 2, 3, 4, 5 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: array_a, UnorderedRangeEquals( { 10, 20, 1 } ) for: { 1, 10, 20 } unordered elements are { 10, 20, 1 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: array_a, UnorderedRangeEquals( { 11, 21, 2 }, []( int l, int r ) { return std::abs( l - r ) <= 1; } ) for: { 1, 10, 20 } unordered elements are { 11, 21, 2 }
|
||||
MatchersRanges.tests.cpp:<line number>: passed: empty_vec, SizeIs(0) for: { } has size == 0
|
||||
MatchersRanges.tests.cpp:<line number>: passed: empty_vec, !SizeIs(2) for: { } not has size == 2
|
||||
MatchersRanges.tests.cpp:<line number>: passed: empty_vec, SizeIs(Lt(2)) for: { } size matches is less than 2
|
||||
@ -2844,6 +2840,6 @@ InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
Misc.tests.cpp:<line number>: passed:
|
||||
test cases: 419 | 313 passed | 86 failed | 6 skipped | 14 failed as expected
|
||||
assertions: 2269 | 2087 passed | 147 failed | 35 failed as expected
|
||||
assertions: 2265 | 2083 passed | 147 failed | 35 failed as expected
|
||||
|
||||
|
||||
|
@ -1611,5 +1611,5 @@ due to unexpected exception with message:
|
||||
|
||||
===============================================================================
|
||||
test cases: 419 | 327 passed | 71 failed | 7 skipped | 14 failed as expected
|
||||
assertions: 2252 | 2087 passed | 130 failed | 35 failed as expected
|
||||
assertions: 2248 | 2083 passed | 130 failed | 35 failed as expected
|
||||
|
||||
|
@ -4083,7 +4083,7 @@ with expansion:
|
||||
insensitive)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
-------------------------------------------------------------------------------
|
||||
EnumToString.tests.cpp:<line number>
|
||||
...............................................................................
|
||||
@ -4117,7 +4117,7 @@ with expansion:
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Enums in namespaces can quickly have stringification enabled using
|
||||
CATCH_REGISTER_ENUM
|
||||
REGISTER_ENUM
|
||||
-------------------------------------------------------------------------------
|
||||
EnumToString.tests.cpp:<line number>
|
||||
...............................................................................
|
||||
@ -14981,23 +14981,6 @@ MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
with expansion:
|
||||
{ 1, 2, 3, 4, 5 } elements are { 2, 3, 4, 5, 6 }
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Usage of RangeEquals range matcher
|
||||
Compare against std::initializer_list
|
||||
-------------------------------------------------------------------------------
|
||||
MatchersRanges.tests.cpp:<line number>
|
||||
...............................................................................
|
||||
|
||||
MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE_THAT( array_a, RangeEquals( { 1, 2, 3 } ) )
|
||||
with expansion:
|
||||
{ 1, 2, 3 } elements are { 1, 2, 3 }
|
||||
|
||||
MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE_THAT( array_a, RangeEquals( { 2, 4, 6 }, []( int l, int r ) { return l * 2 == r; } ) )
|
||||
with expansion:
|
||||
{ 1, 2, 3 } elements are { 2, 4, 6 }
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Usage of RangeEquals range matcher
|
||||
Check short-circuiting behaviour
|
||||
@ -15185,23 +15168,6 @@ MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
with expansion:
|
||||
{ 1, 2, 3, 4, 5 } unordered elements are { 1, 2, 3, 4, 5 }
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Usage of UnorderedRangeEquals range matcher
|
||||
Compare against std::initializer_list
|
||||
-------------------------------------------------------------------------------
|
||||
MatchersRanges.tests.cpp:<line number>
|
||||
...............................................................................
|
||||
|
||||
MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE_THAT( array_a, UnorderedRangeEquals( { 10, 20, 1 } ) )
|
||||
with expansion:
|
||||
{ 1, 10, 20 } unordered elements are { 10, 20, 1 }
|
||||
|
||||
MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE_THAT( array_a, UnorderedRangeEquals( { 11, 21, 2 }, []( int l, int r ) { return std::abs( l - r ) <= 1; } ) )
|
||||
with expansion:
|
||||
{ 1, 10, 20 } unordered elements are { 11, 21, 2 }
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Usage of the SizeIs range matcher
|
||||
Some with stdlib containers
|
||||
@ -19013,5 +18979,5 @@ Misc.tests.cpp:<line number>: PASSED:
|
||||
|
||||
===============================================================================
|
||||
test cases: 419 | 313 passed | 86 failed | 6 skipped | 14 failed as expected
|
||||
assertions: 2269 | 2087 passed | 147 failed | 35 failed as expected
|
||||
assertions: 2265 | 2083 passed | 147 failed | 35 failed as expected
|
||||
|
||||
|
@ -4081,7 +4081,7 @@ with expansion:
|
||||
insensitive)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
-------------------------------------------------------------------------------
|
||||
EnumToString.tests.cpp:<line number>
|
||||
...............................................................................
|
||||
@ -4115,7 +4115,7 @@ with expansion:
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Enums in namespaces can quickly have stringification enabled using
|
||||
CATCH_REGISTER_ENUM
|
||||
REGISTER_ENUM
|
||||
-------------------------------------------------------------------------------
|
||||
EnumToString.tests.cpp:<line number>
|
||||
...............................................................................
|
||||
@ -14974,23 +14974,6 @@ MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
with expansion:
|
||||
{ 1, 2, 3, 4, 5 } elements are { 2, 3, 4, 5, 6 }
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Usage of RangeEquals range matcher
|
||||
Compare against std::initializer_list
|
||||
-------------------------------------------------------------------------------
|
||||
MatchersRanges.tests.cpp:<line number>
|
||||
...............................................................................
|
||||
|
||||
MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE_THAT( array_a, RangeEquals( { 1, 2, 3 } ) )
|
||||
with expansion:
|
||||
{ 1, 2, 3 } elements are { 1, 2, 3 }
|
||||
|
||||
MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE_THAT( array_a, RangeEquals( { 2, 4, 6 }, []( int l, int r ) { return l * 2 == r; } ) )
|
||||
with expansion:
|
||||
{ 1, 2, 3 } elements are { 2, 4, 6 }
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Usage of RangeEquals range matcher
|
||||
Check short-circuiting behaviour
|
||||
@ -15178,23 +15161,6 @@ MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
with expansion:
|
||||
{ 1, 2, 3, 4, 5 } unordered elements are { 1, 2, 3, 4, 5 }
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Usage of UnorderedRangeEquals range matcher
|
||||
Compare against std::initializer_list
|
||||
-------------------------------------------------------------------------------
|
||||
MatchersRanges.tests.cpp:<line number>
|
||||
...............................................................................
|
||||
|
||||
MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE_THAT( array_a, UnorderedRangeEquals( { 10, 20, 1 } ) )
|
||||
with expansion:
|
||||
{ 1, 10, 20 } unordered elements are { 10, 20, 1 }
|
||||
|
||||
MatchersRanges.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE_THAT( array_a, UnorderedRangeEquals( { 11, 21, 2 }, []( int l, int r ) { return std::abs( l - r ) <= 1; } ) )
|
||||
with expansion:
|
||||
{ 1, 10, 20 } unordered elements are { 11, 21, 2 }
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Usage of the SizeIs range matcher
|
||||
Some with stdlib containers
|
||||
@ -19002,5 +18968,5 @@ Misc.tests.cpp:<line number>: PASSED:
|
||||
|
||||
===============================================================================
|
||||
test cases: 419 | 313 passed | 86 failed | 6 skipped | 14 failed as expected
|
||||
assertions: 2269 | 2087 passed | 147 failed | 35 failed as expected
|
||||
assertions: 2265 | 2083 passed | 147 failed | 35 failed as expected
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuitesloose text artifact
|
||||
>
|
||||
<testsuite name="<exe-name>" errors="17" failures="130" skipped="12" tests="2281" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||
<testsuite name="<exe-name>" errors="17" failures="130" skipped="12" tests="2277" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||
<properties>
|
||||
<property name="random-seed" value="1"/>
|
||||
<property name="filters" value=""*" ~[!nonportable] ~[!benchmark] ~[approvals]"/>
|
||||
@ -521,8 +521,8 @@ with expansion:
|
||||
at Matchers.tests.cpp:<line number>
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase classname="<exe-name>.global" name="Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Enums can quickly have stringification enabled using REGISTER_ENUM" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Epsilon only applies to Approx's value" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Equality checks that should fail" time="{duration}" status="run">
|
||||
<skipped message="TEST_CASE tagged with !mayfail"/>
|
||||
@ -1652,7 +1652,6 @@ at Exception.tests.cpp:<line number>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Ranges that need ADL begin/end" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Compare against std::initializer_list" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Check short-circuiting behaviour" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/Check short-circuits on failure" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/All elements are checked on success" time="{duration}" status="run"/>
|
||||
@ -1668,7 +1667,6 @@ at Exception.tests.cpp:<line number>
|
||||
<testcase classname="<exe-name>.global" name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of UnorderedRangeEquals range matcher/Ranges that need ADL begin/end" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of UnorderedRangeEquals range matcher/Compare against std::initializer_list" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of the SizeIs range matcher" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of the SizeIs range matcher/Some with stdlib containers" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of the SizeIs range matcher/Type requires ADL found size free function" time="{duration}" status="run"/>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuites>
|
||||
<testsuite name="<exe-name>" errors="17" failures="130" skipped="12" tests="2281" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||
<testsuite name="<exe-name>" errors="17" failures="130" skipped="12" tests="2277" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||
<properties>
|
||||
<property name="random-seed" value="1"/>
|
||||
<property name="filters" value=""*" ~[!nonportable] ~[!benchmark] ~[approvals]"/>
|
||||
@ -520,8 +520,8 @@ with expansion:
|
||||
at Matchers.tests.cpp:<line number>
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase classname="<exe-name>.global" name="Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Enums can quickly have stringification enabled using REGISTER_ENUM" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Epsilon only applies to Approx's value" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Equality checks that should fail" time="{duration}" status="run">
|
||||
<skipped message="TEST_CASE tagged with !mayfail"/>
|
||||
@ -1651,7 +1651,6 @@ at Exception.tests.cpp:<line number>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Ranges that need ADL begin/end" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Compare against std::initializer_list" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Check short-circuiting behaviour" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/Check short-circuits on failure" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/All elements are checked on success" time="{duration}" status="run"/>
|
||||
@ -1667,7 +1666,6 @@ at Exception.tests.cpp:<line number>
|
||||
<testcase classname="<exe-name>.global" name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of UnorderedRangeEquals range matcher/Ranges that need ADL begin/end" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of UnorderedRangeEquals range matcher/Compare against std::initializer_list" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of the SizeIs range matcher" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of the SizeIs range matcher/Some with stdlib containers" time="{duration}" status="run"/>
|
||||
<testcase classname="<exe-name>.global" name="Usage of the SizeIs range matcher/Type requires ADL found size free function" time="{duration}" status="run"/>
|
||||
|
@ -998,8 +998,8 @@ at Decomposition.tests.cpp:<line number>
|
||||
</testCase>
|
||||
</file>
|
||||
<file path="tests/<exe-name>/UsageTests/EnumToString.tests.cpp">
|
||||
<testCase name="Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM" duration="{duration}"/>
|
||||
<testCase name="Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM" duration="{duration}"/>
|
||||
<testCase name="Enums can quickly have stringification enabled using REGISTER_ENUM" duration="{duration}"/>
|
||||
<testCase name="Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM" duration="{duration}"/>
|
||||
<testCase name="toString(enum class w/operator<<)" duration="{duration}"/>
|
||||
<testCase name="toString(enum class)" duration="{duration}"/>
|
||||
<testCase name="toString(enum w/operator<<)" duration="{duration}"/>
|
||||
@ -1607,7 +1607,6 @@ at Matchers.tests.cpp:<line number>
|
||||
<testCase name="Usage of RangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Ranges that need ADL begin/end" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Compare against std::initializer_list" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/Check short-circuits on failure" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/All elements are checked on success" duration="{duration}"/>
|
||||
@ -1623,7 +1622,6 @@ at Matchers.tests.cpp:<line number>
|
||||
<testCase name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" duration="{duration}"/>
|
||||
<testCase name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" duration="{duration}"/>
|
||||
<testCase name="Usage of UnorderedRangeEquals range matcher/Ranges that need ADL begin/end" duration="{duration}"/>
|
||||
<testCase name="Usage of UnorderedRangeEquals range matcher/Compare against std::initializer_list" duration="{duration}"/>
|
||||
<testCase name="Usage of the SizeIs range matcher" duration="{duration}"/>
|
||||
<testCase name="Usage of the SizeIs range matcher/Some with stdlib containers" duration="{duration}"/>
|
||||
<testCase name="Usage of the SizeIs range matcher/Type requires ADL found size free function" duration="{duration}"/>
|
||||
|
@ -997,8 +997,8 @@ at Decomposition.tests.cpp:<line number>
|
||||
</testCase>
|
||||
</file>
|
||||
<file path="tests/<exe-name>/UsageTests/EnumToString.tests.cpp">
|
||||
<testCase name="Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM" duration="{duration}"/>
|
||||
<testCase name="Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM" duration="{duration}"/>
|
||||
<testCase name="Enums can quickly have stringification enabled using REGISTER_ENUM" duration="{duration}"/>
|
||||
<testCase name="Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM" duration="{duration}"/>
|
||||
<testCase name="toString(enum class w/operator<<)" duration="{duration}"/>
|
||||
<testCase name="toString(enum class)" duration="{duration}"/>
|
||||
<testCase name="toString(enum w/operator<<)" duration="{duration}"/>
|
||||
@ -1606,7 +1606,6 @@ at Matchers.tests.cpp:<line number>
|
||||
<testCase name="Usage of RangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Ranges that need ADL begin/end" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Compare against std::initializer_list" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/Check short-circuits on failure" duration="{duration}"/>
|
||||
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/All elements are checked on success" duration="{duration}"/>
|
||||
@ -1622,7 +1621,6 @@ at Matchers.tests.cpp:<line number>
|
||||
<testCase name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" duration="{duration}"/>
|
||||
<testCase name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" duration="{duration}"/>
|
||||
<testCase name="Usage of UnorderedRangeEquals range matcher/Ranges that need ADL begin/end" duration="{duration}"/>
|
||||
<testCase name="Usage of UnorderedRangeEquals range matcher/Compare against std::initializer_list" duration="{duration}"/>
|
||||
<testCase name="Usage of the SizeIs range matcher" duration="{duration}"/>
|
||||
<testCase name="Usage of the SizeIs range matcher/Some with stdlib containers" duration="{duration}"/>
|
||||
<testCase name="Usage of the SizeIs range matcher/Type requires ADL found size free function" duration="{duration}"/>
|
||||
|
@ -1004,19 +1004,19 @@ ok {test-number} - Catch::makeStream( "" )->isConsole() for: true
|
||||
not ok {test-number} - testStringForMatching(), EndsWith( "Substring" ) for: "this string contains 'abc' as a substring" ends with: "Substring"
|
||||
# EndsWith string matcher
|
||||
not ok {test-number} - testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" ends with: "this" (case insensitive)
|
||||
# Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( EnumClass3::Value1 ) == "Value1" for: "Value1" == "Value1"
|
||||
# Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( EnumClass3::Value2 ) == "Value2" for: "Value2" == "Value2"
|
||||
# Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( EnumClass3::Value3 ) == "Value3" for: "Value3" == "Value3"
|
||||
# Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( EnumClass3::Value4 ) == "{** unexpected enum value **}" for: "{** unexpected enum value **}" == "{** unexpected enum value **}"
|
||||
# Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( ec3 ) == "Value2" for: "Value2" == "Value2"
|
||||
# Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( Bikeshed::Colours::Red ) == "Red" for: "Red" == "Red"
|
||||
# Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( Bikeshed::Colours::Blue ) == "Blue" for: "Blue" == "Blue"
|
||||
# Epsilon only applies to Approx's value
|
||||
ok {test-number} - 101.01 != Approx(100).epsilon(0.01) for: 101.01000000000000512 != Approx( 100.0 )
|
||||
@ -3580,10 +3580,6 @@ ok {test-number} - needs_adl1, RangeEquals( needs_adl2 ) for: { 1, 2, 3, 4, 5 }
|
||||
# Usage of RangeEquals range matcher
|
||||
ok {test-number} - needs_adl1, RangeEquals( needs_adl3, []( int l, int r ) { return l + 1 == r; } ) for: { 1, 2, 3, 4, 5 } elements are { 2, 3, 4, 5, 6 }
|
||||
# Usage of RangeEquals range matcher
|
||||
ok {test-number} - array_a, RangeEquals( { 1, 2, 3 } ) for: { 1, 2, 3 } elements are { 1, 2, 3 }
|
||||
# Usage of RangeEquals range matcher
|
||||
ok {test-number} - array_a, RangeEquals( { 2, 4, 6 }, []( int l, int r ) { return l * 2 == r; } ) for: { 1, 2, 3 } elements are { 2, 4, 6 }
|
||||
# Usage of RangeEquals range matcher
|
||||
ok {test-number} - mocked1, !RangeEquals( arr ) for: { 1, 2, 3, 4 } not elements are { 1, 2, 4, 4 }
|
||||
# Usage of RangeEquals range matcher
|
||||
ok {test-number} - mocked1.m_derefed[0] for: true
|
||||
@ -3623,10 +3619,6 @@ ok {test-number} - vector_a, UnorderedRangeEquals( vector_a_plus_1, close_enough
|
||||
ok {test-number} - vector_a, !UnorderedRangeEquals( vector_b, close_enough ) for: { 1, 10, 21 } not unordered elements are { 11, 21, 3 }
|
||||
# Usage of UnorderedRangeEquals range matcher
|
||||
ok {test-number} - needs_adl1, UnorderedRangeEquals( needs_adl2 ) for: { 1, 2, 3, 4, 5 } unordered elements are { 1, 2, 3, 4, 5 }
|
||||
# Usage of UnorderedRangeEquals range matcher
|
||||
ok {test-number} - array_a, UnorderedRangeEquals( { 10, 20, 1 } ) for: { 1, 10, 20 } unordered elements are { 10, 20, 1 }
|
||||
# Usage of UnorderedRangeEquals range matcher
|
||||
ok {test-number} - array_a, UnorderedRangeEquals( { 11, 21, 2 }, []( int l, int r ) { return std::abs( l - r ) <= 1; } ) for: { 1, 10, 20 } unordered elements are { 11, 21, 2 }
|
||||
# Usage of the SizeIs range matcher
|
||||
ok {test-number} - empty_vec, SizeIs(0) for: { } has size == 0
|
||||
# Usage of the SizeIs range matcher
|
||||
@ -4567,5 +4559,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
|
||||
ok {test-number} -
|
||||
# xmlentitycheck
|
||||
ok {test-number} -
|
||||
1..2281
|
||||
1..2277
|
||||
|
||||
|
@ -1002,19 +1002,19 @@ ok {test-number} - Catch::makeStream( "" )->isConsole() for: true
|
||||
not ok {test-number} - testStringForMatching(), EndsWith( "Substring" ) for: "this string contains 'abc' as a substring" ends with: "Substring"
|
||||
# EndsWith string matcher
|
||||
not ok {test-number} - testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" ends with: "this" (case insensitive)
|
||||
# Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( EnumClass3::Value1 ) == "Value1" for: "Value1" == "Value1"
|
||||
# Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( EnumClass3::Value2 ) == "Value2" for: "Value2" == "Value2"
|
||||
# Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( EnumClass3::Value3 ) == "Value3" for: "Value3" == "Value3"
|
||||
# Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( EnumClass3::Value4 ) == "{** unexpected enum value **}" for: "{** unexpected enum value **}" == "{** unexpected enum value **}"
|
||||
# Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( ec3 ) == "Value2" for: "Value2" == "Value2"
|
||||
# Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( Bikeshed::Colours::Red ) == "Red" for: "Red" == "Red"
|
||||
# Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM
|
||||
# Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM
|
||||
ok {test-number} - stringify( Bikeshed::Colours::Blue ) == "Blue" for: "Blue" == "Blue"
|
||||
# Epsilon only applies to Approx's value
|
||||
ok {test-number} - 101.01 != Approx(100).epsilon(0.01) for: 101.01000000000000512 != Approx( 100.0 )
|
||||
@ -3573,10 +3573,6 @@ ok {test-number} - needs_adl1, RangeEquals( needs_adl2 ) for: { 1, 2, 3, 4, 5 }
|
||||
# Usage of RangeEquals range matcher
|
||||
ok {test-number} - needs_adl1, RangeEquals( needs_adl3, []( int l, int r ) { return l + 1 == r; } ) for: { 1, 2, 3, 4, 5 } elements are { 2, 3, 4, 5, 6 }
|
||||
# Usage of RangeEquals range matcher
|
||||
ok {test-number} - array_a, RangeEquals( { 1, 2, 3 } ) for: { 1, 2, 3 } elements are { 1, 2, 3 }
|
||||
# Usage of RangeEquals range matcher
|
||||
ok {test-number} - array_a, RangeEquals( { 2, 4, 6 }, []( int l, int r ) { return l * 2 == r; } ) for: { 1, 2, 3 } elements are { 2, 4, 6 }
|
||||
# Usage of RangeEquals range matcher
|
||||
ok {test-number} - mocked1, !RangeEquals( arr ) for: { 1, 2, 3, 4 } not elements are { 1, 2, 4, 4 }
|
||||
# Usage of RangeEquals range matcher
|
||||
ok {test-number} - mocked1.m_derefed[0] for: true
|
||||
@ -3616,10 +3612,6 @@ ok {test-number} - vector_a, UnorderedRangeEquals( vector_a_plus_1, close_enough
|
||||
ok {test-number} - vector_a, !UnorderedRangeEquals( vector_b, close_enough ) for: { 1, 10, 21 } not unordered elements are { 11, 21, 3 }
|
||||
# Usage of UnorderedRangeEquals range matcher
|
||||
ok {test-number} - needs_adl1, UnorderedRangeEquals( needs_adl2 ) for: { 1, 2, 3, 4, 5 } unordered elements are { 1, 2, 3, 4, 5 }
|
||||
# Usage of UnorderedRangeEquals range matcher
|
||||
ok {test-number} - array_a, UnorderedRangeEquals( { 10, 20, 1 } ) for: { 1, 10, 20 } unordered elements are { 10, 20, 1 }
|
||||
# Usage of UnorderedRangeEquals range matcher
|
||||
ok {test-number} - array_a, UnorderedRangeEquals( { 11, 21, 2 }, []( int l, int r ) { return std::abs( l - r ) <= 1; } ) for: { 1, 10, 20 } unordered elements are { 11, 21, 2 }
|
||||
# Usage of the SizeIs range matcher
|
||||
ok {test-number} - empty_vec, SizeIs(0) for: { } has size == 0
|
||||
# Usage of the SizeIs range matcher
|
||||
@ -4556,5 +4548,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
|
||||
ok {test-number} -
|
||||
# xmlentitycheck
|
||||
ok {test-number} -
|
||||
1..2281
|
||||
1..2277
|
||||
|
||||
|
@ -315,10 +315,10 @@
|
||||
##teamcity[testFailed name='EndsWith string matcher' message='Matchers.tests.cpp:<line number>|n...............................................................................|n|nMatchers.tests.cpp:<line number>|nexpression failed|n CHECK_THAT( testStringForMatching(), EndsWith( "Substring" ) )|nwith expansion:|n "this string contains |'abc|' as a substring" ends with: "Substring"|n']
|
||||
##teamcity[testFailed name='EndsWith string matcher' message='Matchers.tests.cpp:<line number>|nexpression failed|n CHECK_THAT( testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) )|nwith expansion:|n "this string contains |'abc|' as a substring" ends with: "this" (case insensitive)|n']
|
||||
##teamcity[testFinished name='EndsWith string matcher' duration="{duration}"]
|
||||
##teamcity[testStarted name='Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM']
|
||||
##teamcity[testFinished name='Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM' duration="{duration}"]
|
||||
##teamcity[testStarted name='Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM']
|
||||
##teamcity[testFinished name='Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM' duration="{duration}"]
|
||||
##teamcity[testStarted name='Enums can quickly have stringification enabled using REGISTER_ENUM']
|
||||
##teamcity[testFinished name='Enums can quickly have stringification enabled using REGISTER_ENUM' duration="{duration}"]
|
||||
##teamcity[testStarted name='Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM']
|
||||
##teamcity[testFinished name='Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM' duration="{duration}"]
|
||||
##teamcity[testStarted name='Epsilon only applies to Approx|'s value']
|
||||
##teamcity[testFinished name='Epsilon only applies to Approx|'s value' duration="{duration}"]
|
||||
##teamcity[testStarted name='Equality checks that should fail']
|
||||
|
@ -315,10 +315,10 @@
|
||||
##teamcity[testFailed name='EndsWith string matcher' message='Matchers.tests.cpp:<line number>|n...............................................................................|n|nMatchers.tests.cpp:<line number>|nexpression failed|n CHECK_THAT( testStringForMatching(), EndsWith( "Substring" ) )|nwith expansion:|n "this string contains |'abc|' as a substring" ends with: "Substring"|n']
|
||||
##teamcity[testFailed name='EndsWith string matcher' message='Matchers.tests.cpp:<line number>|nexpression failed|n CHECK_THAT( testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) )|nwith expansion:|n "this string contains |'abc|' as a substring" ends with: "this" (case insensitive)|n']
|
||||
##teamcity[testFinished name='EndsWith string matcher' duration="{duration}"]
|
||||
##teamcity[testStarted name='Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM']
|
||||
##teamcity[testFinished name='Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM' duration="{duration}"]
|
||||
##teamcity[testStarted name='Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM']
|
||||
##teamcity[testFinished name='Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM' duration="{duration}"]
|
||||
##teamcity[testStarted name='Enums can quickly have stringification enabled using REGISTER_ENUM']
|
||||
##teamcity[testFinished name='Enums can quickly have stringification enabled using REGISTER_ENUM' duration="{duration}"]
|
||||
##teamcity[testStarted name='Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM']
|
||||
##teamcity[testFinished name='Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM' duration="{duration}"]
|
||||
##teamcity[testStarted name='Epsilon only applies to Approx|'s value']
|
||||
##teamcity[testFinished name='Epsilon only applies to Approx|'s value' duration="{duration}"]
|
||||
##teamcity[testStarted name='Equality checks that should fail']
|
||||
|
@ -4493,7 +4493,7 @@ C
|
||||
</Expression>
|
||||
<OverallResult success="false" skips="0"/>
|
||||
</TestCase>
|
||||
<TestCase name="Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<TestCase name="Enums can quickly have stringification enabled using REGISTER_ENUM" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<Original>
|
||||
stringify( EnumClass3::Value1 ) == "Value1"
|
||||
@ -4538,7 +4538,7 @@ C
|
||||
</Expression>
|
||||
<OverallResult success="true" skips="0"/>
|
||||
</TestCase>
|
||||
<TestCase name="Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<TestCase name="Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<Original>
|
||||
stringify( Bikeshed::Colours::Red ) == "Red"
|
||||
@ -17383,25 +17383,6 @@ There is no extra whitespace here
|
||||
</Expression>
|
||||
<OverallResults successes="2" failures="0" expectedFailures="0" skipped="false"/>
|
||||
</Section>
|
||||
<Section name="Compare against std::initializer_list" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Original>
|
||||
array_a, RangeEquals( { 1, 2, 3 } )
|
||||
</Original>
|
||||
<Expanded>
|
||||
{ 1, 2, 3 } elements are { 1, 2, 3 }
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Original>
|
||||
array_a, RangeEquals( { 2, 4, 6 }, []( int l, int r ) { return l * 2 == r; } )
|
||||
</Original>
|
||||
<Expanded>
|
||||
{ 1, 2, 3 } elements are { 2, 4, 6 }
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<OverallResults successes="2" failures="0" expectedFailures="0" skipped="false"/>
|
||||
</Section>
|
||||
<Section name="Check short-circuiting behaviour" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Section name="Check short-circuits on failure" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
@ -17628,25 +17609,6 @@ There is no extra whitespace here
|
||||
</Expression>
|
||||
<OverallResults successes="1" failures="0" expectedFailures="0" skipped="false"/>
|
||||
</Section>
|
||||
<Section name="Compare against std::initializer_list" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Original>
|
||||
array_a, UnorderedRangeEquals( { 10, 20, 1 } )
|
||||
</Original>
|
||||
<Expanded>
|
||||
{ 1, 10, 20 } unordered elements are { 10, 20, 1 }
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Original>
|
||||
array_a, UnorderedRangeEquals( { 11, 21, 2 }, []( int l, int r ) { return std::abs( l - r ) <= 1; } )
|
||||
</Original>
|
||||
<Expanded>
|
||||
{ 1, 10, 20 } unordered elements are { 11, 21, 2 }
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<OverallResults successes="2" failures="0" expectedFailures="0" skipped="false"/>
|
||||
</Section>
|
||||
<OverallResult success="true" skips="0"/>
|
||||
</TestCase>
|
||||
<TestCase name="Usage of the SizeIs range matcher" tags="[matchers][size][templated]" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
@ -21971,6 +21933,6 @@ Approx( -1.95996398454005449 )
|
||||
</Section>
|
||||
<OverallResult success="true" skips="0"/>
|
||||
</TestCase>
|
||||
<OverallResults successes="2087" failures="147" expectedFailures="35" skips="12"/>
|
||||
<OverallResults successes="2083" failures="147" expectedFailures="35" skips="12"/>
|
||||
<OverallResultsCases successes="313" failures="86" expectedFailures="14" skips="6"/>
|
||||
</Catch2TestRun>
|
||||
|
@ -4493,7 +4493,7 @@ C
|
||||
</Expression>
|
||||
<OverallResult success="false" skips="0"/>
|
||||
</TestCase>
|
||||
<TestCase name="Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<TestCase name="Enums can quickly have stringification enabled using REGISTER_ENUM" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<Original>
|
||||
stringify( EnumClass3::Value1 ) == "Value1"
|
||||
@ -4538,7 +4538,7 @@ C
|
||||
</Expression>
|
||||
<OverallResult success="true" skips="0"/>
|
||||
</TestCase>
|
||||
<TestCase name="Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<TestCase name="Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/UsageTests/EnumToString.tests.cpp" >
|
||||
<Original>
|
||||
stringify( Bikeshed::Colours::Red ) == "Red"
|
||||
@ -17383,25 +17383,6 @@ There is no extra whitespace here
|
||||
</Expression>
|
||||
<OverallResults successes="2" failures="0" expectedFailures="0" skipped="false"/>
|
||||
</Section>
|
||||
<Section name="Compare against std::initializer_list" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Original>
|
||||
array_a, RangeEquals( { 1, 2, 3 } )
|
||||
</Original>
|
||||
<Expanded>
|
||||
{ 1, 2, 3 } elements are { 1, 2, 3 }
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Original>
|
||||
array_a, RangeEquals( { 2, 4, 6 }, []( int l, int r ) { return l * 2 == r; } )
|
||||
</Original>
|
||||
<Expanded>
|
||||
{ 1, 2, 3 } elements are { 2, 4, 6 }
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<OverallResults successes="2" failures="0" expectedFailures="0" skipped="false"/>
|
||||
</Section>
|
||||
<Section name="Check short-circuiting behaviour" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Section name="Check short-circuits on failure" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
@ -17628,25 +17609,6 @@ There is no extra whitespace here
|
||||
</Expression>
|
||||
<OverallResults successes="1" failures="0" expectedFailures="0" skipped="false"/>
|
||||
</Section>
|
||||
<Section name="Compare against std::initializer_list" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Original>
|
||||
array_a, UnorderedRangeEquals( { 10, 20, 1 } )
|
||||
</Original>
|
||||
<Expanded>
|
||||
{ 1, 10, 20 } unordered elements are { 10, 20, 1 }
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
<Original>
|
||||
array_a, UnorderedRangeEquals( { 11, 21, 2 }, []( int l, int r ) { return std::abs( l - r ) <= 1; } )
|
||||
</Original>
|
||||
<Expanded>
|
||||
{ 1, 10, 20 } unordered elements are { 11, 21, 2 }
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<OverallResults successes="2" failures="0" expectedFailures="0" skipped="false"/>
|
||||
</Section>
|
||||
<OverallResult success="true" skips="0"/>
|
||||
</TestCase>
|
||||
<TestCase name="Usage of the SizeIs range matcher" tags="[matchers][size][templated]" filename="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp" >
|
||||
@ -21970,6 +21932,6 @@ Approx( -1.95996398454005449 )
|
||||
</Section>
|
||||
<OverallResult success="true" skips="0"/>
|
||||
</TestCase>
|
||||
<OverallResults successes="2087" failures="147" expectedFailures="35" skips="12"/>
|
||||
<OverallResults successes="2083" failures="147" expectedFailures="35" skips="12"/>
|
||||
<OverallResultsCases successes="313" failures="86" expectedFailures="14" skips="6"/>
|
||||
</Catch2TestRun>
|
||||
|
@ -7,13 +7,10 @@
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
|
||||
#include <catch2/internal/catch_enum_values_registry.hpp>
|
||||
#include <catch2/matchers/catch_matchers_string.hpp>
|
||||
#include <catch2/matchers/catch_matchers_vector.hpp>
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
#include <catch2/catch_template_test_macros.hpp>
|
||||
|
||||
#include <chrono>
|
||||
|
||||
enum class EnumClass3 { Value1, Value2, Value3, Value4 };
|
||||
|
||||
struct UsesSentinel {
|
||||
@ -98,23 +95,3 @@ TEMPLATE_TEST_CASE( "Stringifying char arrays with statically known sizes",
|
||||
TestType no_null_terminator[3] = { 'a', 'b', 'c' };
|
||||
CHECK( ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s );
|
||||
}
|
||||
|
||||
TEST_CASE( "#2944 - Stringifying dates before 1970 should not crash", "[.approvals]" ) {
|
||||
using Catch::Matchers::Equals;
|
||||
using Days = std::chrono::duration<int32_t, std::ratio<86400>>;
|
||||
using SysDays = std::chrono::time_point<std::chrono::system_clock, Days>;
|
||||
Catch::StringMaker<std::chrono::system_clock::time_point> sm;
|
||||
|
||||
// Check simple date first
|
||||
const SysDays post1970{ Days{ 1 } };
|
||||
auto converted_post = sm.convert( post1970 );
|
||||
REQUIRE( converted_post == "1970-01-02T00:00:00Z" );
|
||||
|
||||
const SysDays pre1970{ Days{ -1 } };
|
||||
auto converted_pre = sm.convert( pre1970 );
|
||||
REQUIRE_THAT(
|
||||
converted_pre,
|
||||
Equals( "1969-12-31T00:00:00Z" ) ||
|
||||
Equals( "gmtime from provided timepoint has failed. This "
|
||||
"happens e.g. with pre-1970 dates using Microsoft libc" ) );
|
||||
}
|
||||
|
@ -8,7 +8,6 @@
|
||||
|
||||
#include <helpers/type_with_lit_0_comparisons.hpp>
|
||||
|
||||
#include <array>
|
||||
#include <type_traits>
|
||||
|
||||
// Setup for #1403 -- look for global overloads of operator << for classes
|
||||
@ -35,7 +34,6 @@ static std::ostream& operator<<(std::ostream& out, foo::helper_1403 const&) {
|
||||
///////////////////////////////
|
||||
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
#include <catch2/generators/catch_generators_range.hpp>
|
||||
#include <catch2/matchers/catch_matchers_string.hpp>
|
||||
|
||||
#include <cstring>
|
||||
@ -469,57 +467,3 @@ TEST_CASE( "Comparing const std::weak_ordering instances must compile",
|
||||
REQUIRE( plain_ordering_1 == const_ordering_1 );
|
||||
}
|
||||
#endif
|
||||
|
||||
// Reproduce issue with yaml-cpp iterators, where the `const_iterator`
|
||||
// for Node type has `const T` as the value_type. This is wrong for
|
||||
// multitude of reasons, but there might be other libraries in the wild
|
||||
// that share this issue, and the workaround needed to support
|
||||
// `from_range(iter, iter)` helper with those libraries is easy enough.
|
||||
class HasBadIterator {
|
||||
std::array<int, 10> m_arr{};
|
||||
|
||||
public:
|
||||
class iterator {
|
||||
const int* m_ptr = nullptr;
|
||||
|
||||
public:
|
||||
iterator( const int* ptr ): m_ptr( ptr ) {}
|
||||
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using value_type = const int;
|
||||
using pointer = const int*;
|
||||
using reference = const int&;
|
||||
using iterator_category = std::input_iterator_tag;
|
||||
|
||||
iterator& operator++() {
|
||||
++m_ptr;
|
||||
return *this;
|
||||
}
|
||||
|
||||
iterator operator++( int ) {
|
||||
auto ret( *this );
|
||||
++( *this );
|
||||
return ret;
|
||||
}
|
||||
|
||||
friend bool operator==( iterator lhs, iterator rhs ) {
|
||||
return lhs.m_ptr == rhs.m_ptr;
|
||||
}
|
||||
friend bool operator!=( iterator lhs, iterator rhs ) {
|
||||
return !( lhs == rhs );
|
||||
}
|
||||
|
||||
int operator*() const { return *m_ptr; }
|
||||
};
|
||||
|
||||
iterator cbegin() const { return { m_arr.data() }; }
|
||||
iterator cend() const { return { m_arr.data() + m_arr.size() }; }
|
||||
};
|
||||
|
||||
TEST_CASE("from_range(iter, iter) supports const_iterators", "[generators][from-range][approvals]") {
|
||||
using namespace Catch::Generators;
|
||||
|
||||
HasBadIterator data;
|
||||
auto gen = from_range(data.cbegin(), data.cend());
|
||||
(void)gen;
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ enum class EnumClass3 { Value1, Value2, Value3, Value4 };
|
||||
CATCH_REGISTER_ENUM( EnumClass3, EnumClass3::Value1, EnumClass3::Value2, EnumClass3::Value3 )
|
||||
|
||||
|
||||
TEST_CASE( "Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM" ) {
|
||||
TEST_CASE( "Enums can quickly have stringification enabled using REGISTER_ENUM" ) {
|
||||
using Catch::Detail::stringify;
|
||||
REQUIRE( stringify( EnumClass3::Value1 ) == "Value1" );
|
||||
REQUIRE( stringify( EnumClass3::Value2 ) == "Value2" );
|
||||
@ -101,7 +101,7 @@ CATCH_REGISTER_ENUM( Bikeshed::Colours,
|
||||
Bikeshed::Colours::Green,
|
||||
Bikeshed::Colours::Blue )
|
||||
|
||||
TEST_CASE( "Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM" ) {
|
||||
TEST_CASE( "Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM" ) {
|
||||
using Catch::Detail::stringify;
|
||||
REQUIRE( stringify( Bikeshed::Colours::Red ) == "Red" );
|
||||
REQUIRE( stringify( Bikeshed::Colours::Blue ) == "Blue" );
|
||||
|
@ -727,15 +727,6 @@ TEST_CASE( "Usage of RangeEquals range matcher", "[matchers][templated][quantifi
|
||||
} ) );
|
||||
}
|
||||
|
||||
SECTION( "Compare against std::initializer_list" ) {
|
||||
const std::array<int, 3> array_a{ { 1, 2, 3 } };
|
||||
|
||||
REQUIRE_THAT( array_a, RangeEquals( { 1, 2, 3 } ) );
|
||||
REQUIRE_THAT( array_a, RangeEquals( { 2, 4, 6 }, []( int l, int r ) {
|
||||
return l * 2 == r;
|
||||
} ) );
|
||||
}
|
||||
|
||||
SECTION("Check short-circuiting behaviour") {
|
||||
with_mocked_iterator_access<int> const mocked1{ 1, 2, 3, 4 };
|
||||
|
||||
@ -829,16 +820,6 @@ TEST_CASE( "Usage of UnorderedRangeEquals range matcher",
|
||||
|
||||
REQUIRE_THAT( needs_adl1, UnorderedRangeEquals( needs_adl2 ) );
|
||||
}
|
||||
|
||||
SECTION( "Compare against std::initializer_list" ) {
|
||||
const std::array<int, 3> array_a{ { 1, 10, 20 } };
|
||||
|
||||
REQUIRE_THAT( array_a, UnorderedRangeEquals( { 10, 20, 1 } ) );
|
||||
REQUIRE_THAT( array_a,
|
||||
UnorderedRangeEquals( { 11, 21, 2 }, []( int l, int r ) {
|
||||
return std::abs( l - r ) <= 1;
|
||||
} ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -15,7 +15,7 @@ import subprocess
|
||||
def configure_and_build(source_path: str, project_path: str, options: List[Tuple[str, str]]):
|
||||
base_configure_cmd = ['cmake',
|
||||
'-B{}'.format(project_path),
|
||||
'-S{}'.format(source_path),
|
||||
'-H{}'.format(source_path),
|
||||
'-DCMAKE_BUILD_TYPE=Debug',
|
||||
'-DCATCH_DEVELOPMENT_BUILD=ON']
|
||||
for option, value in options:
|
||||
|
@ -1,7 +1,13 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(discover-tests-test LANGUAGES CXX)
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
project(discover-tests-test
|
||||
LANGUAGES CXX
|
||||
)
|
||||
|
||||
add_executable(tests
|
||||
register-tests.cpp
|
||||
)
|
||||
|
||||
add_executable(tests register-tests.cpp)
|
||||
add_subdirectory(${CATCH2_PATH} catch2-build)
|
||||
target_link_libraries(tests PRIVATE Catch2::Catch2WithMain)
|
||||
|
||||
@ -13,11 +19,4 @@ if(CMAKE_VERSION GREATER_EQUAL 3.27)
|
||||
DL_PATHS "${CMAKE_CURRENT_LIST_DIR};${CMAKE_CURRENT_LIST_DIR}/.."
|
||||
)
|
||||
endif ()
|
||||
catch_discover_tests(
|
||||
tests
|
||||
ADD_TAGS_AS_LABELS
|
||||
DISCOVERY_MODE PRE_TEST
|
||||
${extra_args}
|
||||
)
|
||||
|
||||
# DISCOVERY_MODE <POST_BUILD|PRE_TEST>
|
||||
catch_discover_tests(tests ${extra_args})
|
||||
|
@ -12,10 +12,6 @@ import subprocess
|
||||
import sys
|
||||
import re
|
||||
import json
|
||||
from collections import namedtuple
|
||||
from typing import List
|
||||
|
||||
TestInfo = namedtuple('TestInfo', ['name', 'tags'])
|
||||
|
||||
cmake_version_regex = re.compile('cmake version (\d+)\.(\d+)\.(\d+)')
|
||||
|
||||
@ -65,7 +61,7 @@ def build_project(sources_dir, output_base_path, catch2_path):
|
||||
|
||||
|
||||
|
||||
def get_test_names(build_path: str) -> List[TestInfo]:
|
||||
def get_test_names(build_path):
|
||||
# For now we assume that Windows builds are done using MSBuild under
|
||||
# Debug configuration. This means that we need to add "Debug" folder
|
||||
# to the path when constructing it. On Linux, we don't add anything.
|
||||
@ -73,23 +69,15 @@ def get_test_names(build_path: str) -> List[TestInfo]:
|
||||
full_path = os.path.join(build_path, config_path, 'tests')
|
||||
|
||||
|
||||
cmd = [full_path, '--reporter', 'json', '--list-tests']
|
||||
cmd = [full_path, '--reporter', 'xml', '--list-tests']
|
||||
result = subprocess.run(cmd,
|
||||
capture_output = True,
|
||||
check = True,
|
||||
text = True)
|
||||
|
||||
test_listing = json.loads(result.stdout)
|
||||
|
||||
assert test_listing['version'] == 1
|
||||
|
||||
tests = []
|
||||
for test in test_listing['listings']['tests']:
|
||||
test_name = test['name']
|
||||
tags = test['tags']
|
||||
tests.append(TestInfo(test_name, tags))
|
||||
|
||||
return tests
|
||||
import xml.etree.ElementTree as ET
|
||||
root = ET.fromstring(result.stdout)
|
||||
return [tc.text for tc in root.findall('TestCase/Name')]
|
||||
|
||||
def get_ctest_listing(build_path):
|
||||
old_path = os.getcwd()
|
||||
@ -103,25 +91,20 @@ def get_ctest_listing(build_path):
|
||||
os.chdir(old_path)
|
||||
return result.stdout
|
||||
|
||||
def extract_tests_from_ctest(ctest_output) -> List[TestInfo]:
|
||||
def extract_tests_from_ctest(ctest_output):
|
||||
ctest_response = json.loads(ctest_output)
|
||||
tests = ctest_response['tests']
|
||||
test_infos = []
|
||||
test_names = []
|
||||
for test in tests:
|
||||
test_command = test['command']
|
||||
# First part of the command is the binary, second is the filter.
|
||||
# If there are less, registration has failed. If there are more,
|
||||
# registration has changed and the script needs updating.
|
||||
assert len(test_command) == 2
|
||||
test_names.append(test_command[1])
|
||||
test_name = test_command[1]
|
||||
labels = []
|
||||
for prop in test['properties']:
|
||||
if prop['name'] == 'LABELS':
|
||||
labels = prop['value']
|
||||
|
||||
test_infos.append(TestInfo(test_name, labels))
|
||||
|
||||
return test_infos
|
||||
return test_names
|
||||
|
||||
def check_DL_PATHS(ctest_output):
|
||||
ctest_response = json.loads(ctest_output)
|
||||
@ -132,14 +115,10 @@ def check_DL_PATHS(ctest_output):
|
||||
if property['name'] == 'ENVIRONMENT_MODIFICATION':
|
||||
assert len(property['value']) == 2, f"The test provides 2 arguments to DL_PATHS, but instead found {len(property['value'])}"
|
||||
|
||||
def escape_catch2_test_names(infos: List[TestInfo]):
|
||||
escaped = []
|
||||
for info in infos:
|
||||
name = info.name
|
||||
def escape_catch2_test_name(name):
|
||||
for char in ('\\', ',', '[', ']'):
|
||||
name = name.replace(char, f"\\{char}")
|
||||
escaped.append(TestInfo(name, info.tags))
|
||||
return escaped
|
||||
return name
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 3:
|
||||
@ -151,7 +130,7 @@ if __name__ == '__main__':
|
||||
|
||||
build_path = build_project(sources_dir, output_base_path, catch2_path)
|
||||
|
||||
catch_test_names = escape_catch2_test_names(get_test_names(build_path))
|
||||
catch_test_names = [escape_catch2_test_name(name) for name in get_test_names(build_path)]
|
||||
ctest_output = get_ctest_listing(build_path)
|
||||
ctest_test_names = extract_tests_from_ctest(ctest_output)
|
||||
|
||||
@ -168,7 +147,6 @@ if __name__ == '__main__':
|
||||
if mismatched:
|
||||
print(f"Found {mismatched} mismatched tests catch test names and ctest test commands!")
|
||||
exit(1)
|
||||
print(f"{len(catch_test_names)} tests matched")
|
||||
|
||||
cmake_version = get_cmake_version()
|
||||
if cmake_version >= (3, 27):
|
||||
|
@ -14,10 +14,3 @@ TEST_CASE( "Let's have a test case with a long name. Longer. No, even longer. "
|
||||
"Really looooooooooooong. Even longer than that. Multiple lines "
|
||||
"worth of test name. Yep, like this." ) {}
|
||||
TEST_CASE( "And now a test case with weird tags.", "[tl;dr][tl;dw][foo,bar]" ) {}
|
||||
// Also check that we handle tests on class, which have name in output as 'class-name', not 'name'.
|
||||
class TestCaseFixture {
|
||||
public:
|
||||
int m_a;
|
||||
};
|
||||
|
||||
TEST_CASE_METHOD(TestCaseFixture, "A test case as method", "[tagstagstags]") {}
|
||||
|
@ -1,5 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(CatchCoverageHelper LANGUAGES CXX)
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
|
||||
project(CatchCoverageHelper)
|
||||
|
||||
add_executable(CoverageHelper coverage-helper.cpp)
|
||||
set_property(TARGET CoverageHelper PROPERTY CXX_STANDARD 11)
|
||||
|
@ -8,14 +8,14 @@ SETLOCAL EnableDelayedExpansion
|
||||
if "%CONFIGURATION%"=="Debug" (
|
||||
if "%coverage%"=="1" (
|
||||
@REM # coverage needs to build the special helper as well as the main
|
||||
cmake -Stools/misc -Bbuild-misc -A%PLATFORM% || exit /b !ERRORLEVEL!
|
||||
cmake -Htools/misc -Bbuild-misc -A%PLATFORM% || exit /b !ERRORLEVEL!
|
||||
cmake --build build-misc || exit /b !ERRORLEVEL!
|
||||
cmake -S. -BBuild -A%PLATFORM% -DCATCH_TEST_USE_WMAIN=%wmain% -DMEMORYCHECK_COMMAND=build-misc\Debug\CoverageHelper.exe -DMEMORYCHECK_COMMAND_OPTIONS=--sep-- -DMEMORYCHECK_TYPE=Valgrind -DCATCH_BUILD_EXAMPLES=%examples% -DCATCH_BUILD_EXTRA_TESTS=%examples% -DCATCH_ENABLE_CONFIGURE_TESTS=%configure_tests% -DCATCH_DEVELOPMENT_BUILD=ON || exit /b !ERRORLEVEL!
|
||||
cmake -H. -BBuild -A%PLATFORM% -DCATCH_TEST_USE_WMAIN=%wmain% -DMEMORYCHECK_COMMAND=build-misc\Debug\CoverageHelper.exe -DMEMORYCHECK_COMMAND_OPTIONS=--sep-- -DMEMORYCHECK_TYPE=Valgrind -DCATCH_BUILD_EXAMPLES=%examples% -DCATCH_BUILD_EXTRA_TESTS=%examples% -DCATCH_ENABLE_CONFIGURE_TESTS=%configure_tests% -DCATCH_DEVELOPMENT_BUILD=ON || exit /b !ERRORLEVEL!
|
||||
) else (
|
||||
@REM # We know that coverage is 0
|
||||
cmake -S. -BBuild -A%PLATFORM% -DCATCH_TEST_USE_WMAIN=%wmain% -DCATCH_BUILD_EXAMPLES=%examples% -DCATCH_BUILD_EXTRA_TESTS=%examples% -DCATCH_BUILD_SURROGATES=%surrogates% -DCATCH_DEVELOPMENT_BUILD=ON -DCATCH_ENABLE_CONFIGURE_TESTS=%configure_tests% || exit /b !ERRORLEVEL!
|
||||
cmake -H. -BBuild -A%PLATFORM% -DCATCH_TEST_USE_WMAIN=%wmain% -DCATCH_BUILD_EXAMPLES=%examples% -DCATCH_BUILD_EXTRA_TESTS=%examples% -DCATCH_BUILD_SURROGATES=%surrogates% -DCATCH_DEVELOPMENT_BUILD=ON -DCATCH_ENABLE_CONFIGURE_TESTS=%configure_tests% || exit /b !ERRORLEVEL!
|
||||
)
|
||||
)
|
||||
if "%CONFIGURATION%"=="Release" (
|
||||
cmake -S. -BBuild -A%PLATFORM% -DCATCH_TEST_USE_WMAIN=%wmain% -DCATCH_DEVELOPMENT_BUILD=ON || exit /b !ERRORLEVEL!
|
||||
cmake -H. -BBuild -A%PLATFORM% -DCATCH_TEST_USE_WMAIN=%wmain% -DCATCH_DEVELOPMENT_BUILD=ON || exit /b !ERRORLEVEL!
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user