diff options
| author | Martin Hořeňovský | 2025-09-23 17:17:29 +0200 |
|---|---|---|
| committer | Martin Hořeňovský | 2025-09-23 17:17:33 +0200 |
| commit | b626e4c7aedb953e79784265e12283a62d5e94d3 (patch) | |
| tree | c06dad7bffdb4aed3104f4aa3cad790534864b11 /benchmarks | |
| parent | 434bf55d4727ab1d1aef244ef16823a0ed1e6b4a (diff) | |
| download | catch3-b626e4c7aedb953e79784265e12283a62d5e94d3.tar.gz | |
Add simple runtime benchmarks
For now we add just two binaries, one with assertions taking the
fast path, one with assertions taking the slow path, and the ability
to run 1 of `REQUIRE(true)`, `REQUIRE_NOTHROW`, `REQUIRE_THROWS`
in a loop.
I also split off a CMake preset which enables more tests than the
basic `simple-tests` preset, but does not enable the most expensive
tests which force recompilation of Catch2 multiple times.
Diffstat (limited to 'benchmarks')
| -rw-r--r-- | benchmarks/CMakeLists.txt | 16 | ||||
| -rw-r--r-- | benchmarks/assertion_listener.cpp | 28 | ||||
| -rw-r--r-- | benchmarks/runtime_assertion_benches.cpp | 27 |
3 files changed, 71 insertions, 0 deletions
diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt new file mode 100644 index 00000000..68837783 --- /dev/null +++ b/benchmarks/CMakeLists.txt @@ -0,0 +1,16 @@ +include(CatchMiscFunctions) + +add_executable(AssertionsFastPath + runtime_assertion_benches.cpp +) + +add_executable(AssertionsSlowPath + runtime_assertion_benches.cpp + assertion_listener.cpp +) + +target_link_libraries(AssertionsFastPath PRIVATE Catch2::Catch2WithMain) +target_link_libraries(AssertionsSlowPath PRIVATE Catch2::Catch2WithMain) + +list(APPEND CATCH_TEST_TARGETS AssertionsFastPath AssertionsSlowPath) +set(CATCH_TEST_TARGETS ${CATCH_TEST_TARGETS} PARENT_SCOPE) diff --git a/benchmarks/assertion_listener.cpp b/benchmarks/assertion_listener.cpp new file mode 100644 index 00000000..2aa65b45 --- /dev/null +++ b/benchmarks/assertion_listener.cpp @@ -0,0 +1,28 @@ + +// Copyright Catch2 Authors +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) + +// SPDX-License-Identifier: BSL-1.0 + +#include <catch2/reporters/catch_reporter_event_listener.hpp> +#include <catch2/reporters/catch_reporter_registrars.hpp> + +/** + * Event listener that listens to all assertions, forcing assertion slow path + */ +class AssertionSlowPathListener : public Catch::EventListenerBase { +public: + static std::string getDescription() { + return "Validates ordering of Catch2's listener events"; + } + + AssertionSlowPathListener(Catch::IConfig const* config) : + EventListenerBase(config) { + m_preferences.shouldReportAllAssertions = true; + m_preferences.shouldReportAllAssertionStarts = true; + } +}; + +CATCH_REGISTER_LISTENER( AssertionSlowPathListener ) diff --git a/benchmarks/runtime_assertion_benches.cpp b/benchmarks/runtime_assertion_benches.cpp new file mode 100644 index 00000000..6a28e3fa --- /dev/null +++ b/benchmarks/runtime_assertion_benches.cpp @@ -0,0 +1,27 @@ + +// Copyright Catch2 Authors +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) + +// SPDX-License-Identifier: BSL-1.0 + +#include <catch2/catch_test_macros.hpp> + +TEST_CASE("Simple REQUIRE - 10M") { + for (size_t i = 0; i < 10'000'000; ++i) { + REQUIRE(true); + } +} + +TEST_CASE("Simple NOTHROW - 10M") { + for (size_t i = 0; i < 10'000'000; ++i) { + REQUIRE_NOTHROW([](){}()); + } +} + +TEST_CASE("Simple THROWS - 10M") { + for (size_t i = 0; i < 10'000'000; ++i) { + REQUIRE_THROWS([]() { throw 1; }()); + } +} |