mirror of
https://github.com/catchorg/Catch2.git
synced 2026-05-11 23:48:41 -04:00
9f0120a5e9
To make this all work, I had to remove the stringification cache from matchers. In theory, this can cause performance penalty in cases where single matcher instance is stringified multiple times, but in practice this does not happen much, and the difference is surprisingly small anyway, because the performance of stringification is already horrible and full of allocating strings just to throw them away. The matcher combinators need P2738 from C++26 to be `constexpr`. TODO: close related issues
84 lines
2.3 KiB
C++
84 lines
2.3 KiB
C++
|
|
// 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
|
|
|
|
/**\file
|
|
* Test that CATCH_CONFIG_DISABLE turns off TEST_CASE autoregistration
|
|
* and expressions in assertion macros are not run.
|
|
*/
|
|
|
|
#include <catch2/benchmark/catch_benchmark.hpp>
|
|
#include <catch2/catch_test_macros.hpp>
|
|
#include <catch2/matchers/catch_matchers.hpp>
|
|
#include <catch2/matchers/catch_matchers_predicate.hpp>
|
|
|
|
#include <iostream>
|
|
|
|
struct foo {
|
|
foo() { REQUIRE_NOTHROW( print() ); }
|
|
void print() const { std::cout << "This should not happen\n"; }
|
|
};
|
|
|
|
#if defined( __clang__ )
|
|
# pragma clang diagnostic push
|
|
# pragma clang diagnostic ignored "-Wglobal-constructors"
|
|
#endif
|
|
// Construct foo, but `foo::print` should not be run
|
|
static foo f;
|
|
|
|
#if defined( __clang__ )
|
|
// The test is unused since the registration is disabled
|
|
# pragma clang diagnostic ignored "-Wunused-function"
|
|
#endif
|
|
|
|
// This test should not be run, because it won't be registered
|
|
TEST_CASE( "Disabled Macros" ) {
|
|
CHECK( 1 == 2 );
|
|
REQUIRE( 1 == 2 );
|
|
std::cout << "This should not happen\n";
|
|
FAIL();
|
|
|
|
// Test that static assertions don't fire when macros are disabled
|
|
STATIC_CHECK( 0 == 1 );
|
|
STATIC_REQUIRE( !true );
|
|
|
|
CAPTURE( 1 );
|
|
CAPTURE( 1, "captured" );
|
|
UNSCOPED_CAPTURE( 3 );
|
|
|
|
REQUIRE_THAT( 1,
|
|
Catch::Matchers::Predicate( []( int ) { return false; } ) );
|
|
BENCHMARK( "Disabled benchmark" ) { REQUIRE( 1 == 2 ); };
|
|
|
|
STATIC_REQUIRE_THAT( 1, Catch::Matchers::Predicate( []( int ) { return false; } ) );
|
|
}
|
|
|
|
struct DisabledFixture {};
|
|
|
|
TEST_CASE_PERSISTENT_FIXTURE( DisabledFixture, "Disabled Persistent Fixture" ) {
|
|
CHECK( 1 == 2 );
|
|
REQUIRE( 1 == 2 );
|
|
std::cout << "This should not happen\n";
|
|
FAIL();
|
|
|
|
// Test that static assertions don't fire when macros are disabled
|
|
STATIC_CHECK( 0 == 1 );
|
|
STATIC_REQUIRE( !true );
|
|
|
|
CAPTURE( 1 );
|
|
CAPTURE( 1, "captured" );
|
|
UNSCOPED_CAPTURE( 3 );
|
|
|
|
REQUIRE_THAT( 1,
|
|
Catch::Matchers::Predicate( []( int ) { return false; } ) );
|
|
BENCHMARK( "Disabled benchmark" ) { REQUIRE( 1 == 2 ); };
|
|
}
|
|
|
|
#if defined( __clang__ )
|
|
# pragma clang diagnostic pop
|
|
#endif
|