diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9c92cb89..b6578f8b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -24,10 +24,7 @@ set(BENCHMARK_HEADERS ${SOURCES_DIR}/benchmark/detail/catch_timing.hpp ) set(BENCHMARK_SOURCES - ${SOURCES_DIR}/benchmark/catch_chronometer.cpp - ${SOURCES_DIR}/benchmark/detail/catch_benchmark_function.cpp - ${SOURCES_DIR}/benchmark/detail/catch_complete_invoke.cpp - ${SOURCES_DIR}/benchmark/detail/catch_run_for_at_least.cpp + ${SOURCES_DIR}/benchmark/internal/catch_benchmark_combined_tu.cpp ${SOURCES_DIR}/benchmark/detail/catch_stats.cpp ) @@ -134,7 +131,7 @@ set(IMPL_SOURCES ${SOURCES_DIR}/catch_approx.cpp ${SOURCES_DIR}/internal/catch_assertionhandler.cpp ${SOURCES_DIR}/catch_assertion_result.cpp - ${SOURCES_DIR}/matchers/internal/catch_matchers_impl.cpp + ${SOURCES_DIR}/matchers/internal/catch_matchers_combined_tu.cpp ${SOURCES_DIR}/internal/catch_commandline.cpp ${SOURCES_DIR}/internal/catch_common.cpp ${SOURCES_DIR}/catch_config.cpp @@ -142,34 +139,21 @@ set(IMPL_SOURCES ${SOURCES_DIR}/internal/catch_context.cpp ${SOURCES_DIR}/internal/catch_debug_console.cpp ${SOURCES_DIR}/internal/catch_debugger.cpp - ${SOURCES_DIR}/internal/catch_decomposer.cpp ${SOURCES_DIR}/internal/catch_enforce.cpp ${SOURCES_DIR}/internal/catch_enum_values_registry.cpp - ${SOURCES_DIR}/internal/catch_errno_guard.cpp ${SOURCES_DIR}/internal/catch_exception_translator_registry.cpp ${SOURCES_DIR}/internal/catch_fatal_condition_handler.cpp - ${SOURCES_DIR}/generators/catch_generator_exception.cpp - ${SOURCES_DIR}/generators/catch_generators.cpp - ${SOURCES_DIR}/interfaces/catch_interfaces_capture.cpp - ${SOURCES_DIR}/interfaces/catch_interfaces_config.cpp - ${SOURCES_DIR}/interfaces/catch_interfaces_exception.cpp - ${SOURCES_DIR}/interfaces/catch_interfaces_registry_hub.cpp + ${SOURCES_DIR}/generators/internal/catch_generators_combined_tu.cpp + ${SOURCES_DIR}/interfaces/catch_interfaces_combined_tu.cpp ${SOURCES_DIR}/interfaces/catch_interfaces_reporter.cpp - ${SOURCES_DIR}/interfaces/catch_interfaces_runner.cpp - ${SOURCES_DIR}/interfaces/catch_interfaces_testcase.cpp ${SOURCES_DIR}/internal/catch_list.cpp - ${SOURCES_DIR}/internal/catch_leak_detector.cpp - ${SOURCES_DIR}/matchers/catch_matchers.cpp - ${SOURCES_DIR}/matchers/catch_matchers_container_properties.cpp - ${SOURCES_DIR}/matchers/catch_matchers_exception.cpp ${SOURCES_DIR}/matchers/catch_matchers_floating.cpp - ${SOURCES_DIR}/matchers/catch_matchers_predicate.cpp ${SOURCES_DIR}/matchers/catch_matchers_string.cpp ${SOURCES_DIR}/matchers/catch_matchers_templated.cpp ${SOURCES_DIR}/catch_message.cpp ${SOURCES_DIR}/internal/catch_output_redirect.cpp ${SOURCES_DIR}/catch_registry_hub.cpp - ${SOURCES_DIR}/internal/catch_polyfills.cpp + ${SOURCES_DIR}/internal/catch_combined_tu.cpp ${SOURCES_DIR}/internal/catch_random_number_generator.cpp ${SOURCES_DIR}/internal/catch_reporter_registry.cpp ${SOURCES_DIR}/internal/catch_result_type.cpp @@ -177,11 +161,9 @@ set(IMPL_SOURCES ${SOURCES_DIR}/internal/catch_section.cpp ${SOURCES_DIR}/catch_session.cpp ${SOURCES_DIR}/internal/catch_singletons.cpp - ${SOURCES_DIR}/internal/catch_startup_exception_registry.cpp ${SOURCES_DIR}/internal/catch_stream.cpp ${SOURCES_DIR}/internal/catch_stringref.cpp ${SOURCES_DIR}/internal/catch_string_manip.cpp - ${SOURCES_DIR}/catch_tag_alias_autoregistrar.cpp ${SOURCES_DIR}/internal/catch_tag_alias_registry.cpp ${SOURCES_DIR}/catch_test_case_info.cpp ${SOURCES_DIR}/internal/catch_test_case_registry_impl.cpp @@ -192,7 +174,6 @@ set(IMPL_SOURCES ${SOURCES_DIR}/catch_timer.cpp ${SOURCES_DIR}/catch_tostring.cpp ${SOURCES_DIR}/catch_totals.cpp - ${SOURCES_DIR}/internal/catch_uncaught_exceptions.cpp ${SOURCES_DIR}/catch_version.cpp ${SOURCES_DIR}/internal/catch_wildcard_pattern.cpp ${SOURCES_DIR}/internal/catch_xmlwriter.cpp diff --git a/src/catch2/benchmark/catch_chronometer.cpp b/src/catch2/benchmark/catch_chronometer.cpp deleted file mode 100644 index 737c3e13..00000000 --- a/src/catch2/benchmark/catch_chronometer.cpp +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - ChronometerConcept::~ChronometerConcept() = default; - } // namespace Detail - } // namespace Benchmark -} // namespace Catch diff --git a/src/catch2/benchmark/detail/catch_benchmark_function.cpp b/src/catch2/benchmark/detail/catch_benchmark_function.cpp deleted file mode 100644 index a2f3029e..00000000 --- a/src/catch2/benchmark/detail/catch_benchmark_function.cpp +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - BenchmarkFunction::callable::~callable() = default; - } // namespace Detail - } // namespace Benchmark -} // namespace Catch diff --git a/src/catch2/benchmark/detail/catch_complete_invoke.cpp b/src/catch2/benchmark/detail/catch_complete_invoke.cpp deleted file mode 100644 index 8fd43d12..00000000 --- a/src/catch2/benchmark/detail/catch_complete_invoke.cpp +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - CATCH_INTERNAL_START_WARNINGS_SUPPRESSION - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS - const std::string benchmarkErrorMsg = "a benchmark failed to run successfully"; - CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION - } // namespace Detail - } // namespace Benchmark -} // namespace Catch diff --git a/src/catch2/benchmark/detail/catch_run_for_at_least.cpp b/src/catch2/benchmark/detail/catch_run_for_at_least.cpp deleted file mode 100644 index f1dcbaba..00000000 --- a/src/catch2/benchmark/detail/catch_run_for_at_least.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -// Run a function for a minimum amount of time -#include - -#include -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - struct optimized_away_error : std::exception { - const char* what() const noexcept override; - }; - - const char* optimized_away_error::what() const noexcept { - return "could not measure benchmark, maybe it was optimized away"; - } - - void throw_optimized_away_error() { - Catch::throw_exception(optimized_away_error{}); - } - - } // namespace Detail - } // namespace Benchmark -} // namespace Catch diff --git a/src/catch2/benchmark/internal/catch_benchmark_combined_tu.cpp b/src/catch2/benchmark/internal/catch_benchmark_combined_tu.cpp new file mode 100644 index 00000000..02a2855b --- /dev/null +++ b/src/catch2/benchmark/internal/catch_benchmark_combined_tu.cpp @@ -0,0 +1,88 @@ +/** \file + * This is a special TU that combines what would otherwise be a very + * small benchmarking-related TUs into one bigger TU. + * + * The reason for this is compilation performance improvements by + * avoiding reparsing headers for many small TUs, instead having this + * one TU include bit more, but having it all parsed only once. + * + * To avoid heavy-tail problem with compilation times, each "subpart" + * of Catch2 has its own combined TU like this. + */ + +//////////////////////////////////////////// +// vvv formerly catch_chronometer.cpp vvv // +//////////////////////////////////////////// + +#include + +namespace Catch { + namespace Benchmark { + namespace Detail { + ChronometerConcept::~ChronometerConcept() = default; + } // namespace Detail + } // namespace Benchmark +} // namespace Catch + + +/////////////////////////////////////////////////// +// vvv formerly catch_benchmark_function.cpp vvv // +/////////////////////////////////////////////////// + +#include + +namespace Catch { + namespace Benchmark { + namespace Detail { + BenchmarkFunction::callable::~callable() = default; + } // namespace Detail + } // namespace Benchmark +} // namespace Catch + + +//////////////////////////////////////////////// +// vvv formerly catch_complete_invoke.cpp vvv // +//////////////////////////////////////////////// + +#include + +namespace Catch { + namespace Benchmark { + namespace Detail { + CATCH_INTERNAL_START_WARNINGS_SUPPRESSION + CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS + const std::string benchmarkErrorMsg = "a benchmark failed to run successfully"; + CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION + } // namespace Detail + } // namespace Benchmark +} // namespace Catch + + + + +///////////////////////////////////////////////// +// vvv formerly catch_run_for_at_least.cpp vvv // +///////////////////////////////////////////////// + +#include +#include +#include + +namespace Catch { + namespace Benchmark { + namespace Detail { + struct optimized_away_error : std::exception { + const char* what() const noexcept override; + }; + + const char* optimized_away_error::what() const noexcept { + return "could not measure benchmark, maybe it was optimized away"; + } + + void throw_optimized_away_error() { + Catch::throw_exception(optimized_away_error{}); + } + + } // namespace Detail + } // namespace Benchmark +} // namespace Catch diff --git a/src/catch2/catch_tag_alias_autoregistrar.cpp b/src/catch2/catch_tag_alias_autoregistrar.cpp deleted file mode 100644 index ea0e27b0..00000000 --- a/src/catch2/catch_tag_alias_autoregistrar.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include - -namespace Catch { - - RegistrarForTagAliases::RegistrarForTagAliases(char const* alias, char const* tag, SourceLineInfo const& lineInfo) { - CATCH_TRY { - getMutableRegistryHub().registerTagAlias(alias, tag, lineInfo); - } CATCH_CATCH_ALL { - // Do not throw when constructing global objects, instead register the exception to be processed later - getMutableRegistryHub().registerStartupException(); - } - } - -} diff --git a/src/catch2/generators/catch_generator_exception.cpp b/src/catch2/generators/catch_generator_exception.cpp deleted file mode 100644 index 446c732a..00000000 --- a/src/catch2/generators/catch_generator_exception.cpp +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include - -namespace Catch { - - const char* GeneratorException::what() const noexcept { - return m_msg; - } - -} // end namespace Catch diff --git a/src/catch2/generators/catch_generators.cpp b/src/catch2/generators/catch_generators.cpp deleted file mode 100644 index d0c759c4..00000000 --- a/src/catch2/generators/catch_generators.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Created by Phil Nash on 15/6/2018. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include -#include -#include -#include - -#include -#include - -namespace Catch { - -IGeneratorTracker::~IGeneratorTracker() {} - -namespace Generators { - -namespace Detail { - - [[noreturn]] - void throw_generator_exception(char const* msg) { - Catch::throw_exception(GeneratorException{ msg }); - } -} // end namespace Detail - - GeneratorUntypedBase::~GeneratorUntypedBase() {} - - auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& { - return getResultCapture().acquireGeneratorTracker( lineInfo ); - } - -} // namespace Generators -} // namespace Catch diff --git a/src/catch2/generators/catch_generators.hpp b/src/catch2/generators/catch_generators.hpp index 60ab4b4f..b1eacd50 100644 --- a/src/catch2/generators/catch_generators.hpp +++ b/src/catch2/generators/catch_generators.hpp @@ -12,7 +12,6 @@ #include #include -#include #include #include diff --git a/src/catch2/generators/internal/catch_generators_combined_tu.cpp b/src/catch2/generators/internal/catch_generators_combined_tu.cpp new file mode 100644 index 00000000..84cf3707 --- /dev/null +++ b/src/catch2/generators/internal/catch_generators_combined_tu.cpp @@ -0,0 +1,58 @@ +/** \file + * This is a special TU that combines what would otherwise be a very + * small generator-related TUs into one bigger TU. + * + * The reason for this is compilation performance improvements by + * avoiding reparsing headers for many small TUs, instead having this + * one TU include bit more, but having it all parsed only once. + * + * To avoid heavy-tail problem with compilation times, each "subpart" + * of Catch2 has its own combined TU like this. + */ + +//////////////////////////////////////////////////// +// vvv formerly catch_generator_exception.cpp vvv // +//////////////////////////////////////////////////// + +#include + +namespace Catch { + + const char* GeneratorException::what() const noexcept { + return m_msg; + } + +} // end namespace Catch + + +/////////////////////////////////////////// +// vvv formerly catch_generators.cpp vvv // +/////////////////////////////////////////// + +#include +#include +#include +#include + +namespace Catch { + +IGeneratorTracker::~IGeneratorTracker() {} + +namespace Generators { + +namespace Detail { + + [[noreturn]] + void throw_generator_exception(char const* msg) { + Catch::throw_exception(GeneratorException{ msg }); + } +} // end namespace Detail + + GeneratorUntypedBase::~GeneratorUntypedBase() {} + + auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& { + return getResultCapture().acquireGeneratorTracker( lineInfo ); + } + +} // namespace Generators +} // namespace Catch diff --git a/src/catch2/interfaces/catch_interfaces_capture.cpp b/src/catch2/interfaces/catch_interfaces_capture.cpp deleted file mode 100644 index f49626e0..00000000 --- a/src/catch2/interfaces/catch_interfaces_capture.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include - -namespace Catch { - IResultCapture::~IResultCapture() = default; -} diff --git a/src/catch2/interfaces/catch_interfaces_combined_tu.cpp b/src/catch2/interfaces/catch_interfaces_combined_tu.cpp new file mode 100644 index 00000000..e35b865e --- /dev/null +++ b/src/catch2/interfaces/catch_interfaces_combined_tu.cpp @@ -0,0 +1,79 @@ +/** \file + * This is a special TU that combines what would otherwise be a very + * small interfaces-related TUs into one bigger TU. + * + * The reason for this is compilation performance improvements by + * avoiding reparsing headers for many small TUs, instead having this + * one TU include bit more, but having it all parsed only once. + * + * To avoid heavy-tail problem with compilation times, each "subpart" + * of Catch2 has its own combined TU like this. + */ + +/////////////////////////////////////////////////// +// vvv formerly catch_interfaces_capture.cpp vvv // +/////////////////////////////////////////////////// + +#include + +namespace Catch { + IResultCapture::~IResultCapture() = default; +} + + +////////////////////////////////////////////////// +// vvv formerly catch_interfaces_config.cpp vvv // +////////////////////////////////////////////////// + +#include + +namespace Catch { + IConfig::~IConfig() = default; +} + + +///////////////////////////////////////////////////// +// vvv formerly catch_interfaces_exception.cpp vvv // +///////////////////////////////////////////////////// + +#include + +namespace Catch { + IExceptionTranslator::~IExceptionTranslator() = default; + IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() = default; +} + + +//////////////////////////////////////////////////////// +// vvv formerly catch_interfaces_registry_hub.cpp vvv // +//////////////////////////////////////////////////////// + +#include + +namespace Catch { + IRegistryHub::~IRegistryHub() = default; + IMutableRegistryHub::~IMutableRegistryHub() = default; +} + + +////////////////////////////////////////////////// +// vvv formerly catch_interfaces_runner.cpp vvv // +////////////////////////////////////////////////// + +#include + +namespace Catch { + IRunner::~IRunner() = default; +} + + +//////////////////////////////////////////////////// +// vvv formerly catch_interfaces_testcase.cpp vvv // +//////////////////////////////////////////////////// + +#include + +namespace Catch { + ITestInvoker::~ITestInvoker() = default; + ITestCaseRegistry::~ITestCaseRegistry() = default; +} diff --git a/src/catch2/interfaces/catch_interfaces_config.cpp b/src/catch2/interfaces/catch_interfaces_config.cpp deleted file mode 100644 index b451278c..00000000 --- a/src/catch2/interfaces/catch_interfaces_config.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include - -namespace Catch { - IConfig::~IConfig() = default; -} diff --git a/src/catch2/interfaces/catch_interfaces_exception.cpp b/src/catch2/interfaces/catch_interfaces_exception.cpp deleted file mode 100644 index 6d6db336..00000000 --- a/src/catch2/interfaces/catch_interfaces_exception.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include - -namespace Catch { - IExceptionTranslator::~IExceptionTranslator() = default; - IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() = default; -} diff --git a/src/catch2/interfaces/catch_interfaces_registry_hub.cpp b/src/catch2/interfaces/catch_interfaces_registry_hub.cpp deleted file mode 100644 index 1dfd0f6f..00000000 --- a/src/catch2/interfaces/catch_interfaces_registry_hub.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include - -namespace Catch { - IRegistryHub::~IRegistryHub() = default; - IMutableRegistryHub::~IMutableRegistryHub() = default; -} diff --git a/src/catch2/interfaces/catch_interfaces_runner.cpp b/src/catch2/interfaces/catch_interfaces_runner.cpp deleted file mode 100644 index a624b639..00000000 --- a/src/catch2/interfaces/catch_interfaces_runner.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include - -namespace Catch { - IRunner::~IRunner() = default; -} diff --git a/src/catch2/interfaces/catch_interfaces_testcase.cpp b/src/catch2/interfaces/catch_interfaces_testcase.cpp deleted file mode 100644 index b43d05c9..00000000 --- a/src/catch2/interfaces/catch_interfaces_testcase.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include - -namespace Catch { - ITestInvoker::~ITestInvoker() = default; - ITestCaseRegistry::~ITestCaseRegistry() = default; -} diff --git a/src/catch2/internal/catch_combined_tu.cpp b/src/catch2/internal/catch_combined_tu.cpp new file mode 100644 index 00000000..c6819362 --- /dev/null +++ b/src/catch2/internal/catch_combined_tu.cpp @@ -0,0 +1,173 @@ +/** \file + * This is a special TU that combines what would otherwise be a very + * small top-level TUs into one bigger TU. + * + * The reason for this is compilation performance improvements by + * avoiding reparsing headers for many small TUs, instead having this + * one TU include bit more, but having it all parsed only once. + * + * To avoid heavy-tail problem with compilation times, each "subpart" + * of Catch2 has its own combined TU like this. + */ + + +//////////////////////////////////////////////////////// +// vvv formerly catch_tag_alias_autoregistrar.cpp vvv // +//////////////////////////////////////////////////////// + +#include +#include +#include + +namespace Catch { + + RegistrarForTagAliases::RegistrarForTagAliases(char const* alias, char const* tag, SourceLineInfo const& lineInfo) { + CATCH_TRY { + getMutableRegistryHub().registerTagAlias(alias, tag, lineInfo); + } CATCH_CATCH_ALL { + // Do not throw when constructing global objects, instead register the exception to be processed later + getMutableRegistryHub().registerStartupException(); + } + } + +} + + +////////////////////////////////////////// +// vvv formerly catch_polyfills.cpp vvv // +////////////////////////////////////////// + +#include +#include +#include + +namespace Catch { + +#if !defined(CATCH_CONFIG_POLYFILL_ISNAN) + bool isnan(float f) { + return std::isnan(f); + } + bool isnan(double d) { + return std::isnan(d); + } +#else + // For now we only use this for embarcadero + bool isnan(float f) { + return std::_isnan(f); + } + bool isnan(double d) { + return std::_isnan(d); + } +#endif + +} // end namespace Catch + + +//////////////////////////////////////////////////// +// vvv formerly catch_uncaught_exceptions.cpp vvv // +//////////////////////////////////////////////////// + +#include +#include +#include + +namespace Catch { + bool uncaught_exceptions() { +#if defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) || (defined(__cpp_lib_uncaught_exceptions) && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS)) + return std::uncaught_exceptions() > 0; +#else + return std::uncaught_exception(); +#endif + } +} // end namespace Catch + + +//////////////////////////////////////////// +// vvv formerly catch_errno_guard.cpp vvv // +//////////////////////////////////////////// +#include + +#include + +namespace Catch { + ErrnoGuard::ErrnoGuard():m_oldErrno(errno){} + ErrnoGuard::~ErrnoGuard() { errno = m_oldErrno; } +} + + +/////////////////////////////////////////// +// vvv formerly catch_decomposer.cpp vvv // +/////////////////////////////////////////// +#include + +namespace Catch { + + ITransientExpression::~ITransientExpression() = default; + + void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs ) { + if( lhs.size() + rhs.size() < 40 && + lhs.find('\n') == std::string::npos && + rhs.find('\n') == std::string::npos ) + os << lhs << ' ' << op << ' ' << rhs; + else + os << lhs << '\n' << op << '\n' << rhs; + } +} + + +/////////////////////////////////////////////////////////// +// vvv formerly catch_startup_exception_registry.cpp vvv // +/////////////////////////////////////////////////////////// +#include +#include + +namespace Catch { +void StartupExceptionRegistry::add( std::exception_ptr const& exception ) noexcept { + CATCH_TRY { + m_exceptions.push_back(exception); + } CATCH_CATCH_ALL { + // If we run out of memory during start-up there's really not a lot more we can do about it + std::terminate(); + } + } + + std::vector const& StartupExceptionRegistry::getExceptions() const noexcept { + return m_exceptions; + } + +} // end namespace Catch + + +////////////////////////////////////////////// +// vvv formerly catch_leak_detector.cpp vvv // +////////////////////////////////////////////// + #include + #include + + +#ifdef CATCH_CONFIG_WINDOWS_CRTDBG +#include + +namespace Catch { + + LeakDetector::LeakDetector() { + int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); + flag |= _CRTDBG_LEAK_CHECK_DF; + flag |= _CRTDBG_ALLOC_MEM_DF; + _CrtSetDbgFlag(flag); + _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); + _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); + // Change this to leaking allocation's number to break there + _CrtSetBreakAlloc(-1); + } +} + +#else // ^^ Windows crt debug heap enabled // Windows crt debug heap disabled vv + + Catch::LeakDetector::LeakDetector() {} + +#endif // CATCH_CONFIG_WINDOWS_CRTDBG + +Catch::LeakDetector::~LeakDetector() { + Catch::cleanUp(); +} diff --git a/src/catch2/internal/catch_decomposer.cpp b/src/catch2/internal/catch_decomposer.cpp deleted file mode 100644 index e1018cd6..00000000 --- a/src/catch2/internal/catch_decomposer.cpp +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Created by Phil Nash on 8/8/2017. - * Copyright 2017 Two Blue Cubes Ltd. All rights reserved. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include -#include - -namespace Catch { - - ITransientExpression::~ITransientExpression() = default; - - void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs ) { - if( lhs.size() + rhs.size() < 40 && - lhs.find('\n') == std::string::npos && - rhs.find('\n') == std::string::npos ) - os << lhs << ' ' << op << ' ' << rhs; - else - os << lhs << '\n' << op << '\n' << rhs; - } -} diff --git a/src/catch2/internal/catch_errno_guard.cpp b/src/catch2/internal/catch_errno_guard.cpp deleted file mode 100644 index 3cc3697c..00000000 --- a/src/catch2/internal/catch_errno_guard.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Created by Martin on 06/03/2017. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include - -#include - -namespace Catch { - ErrnoGuard::ErrnoGuard():m_oldErrno(errno){} - ErrnoGuard::~ErrnoGuard() { errno = m_oldErrno; } -} diff --git a/src/catch2/internal/catch_leak_detector.cpp b/src/catch2/internal/catch_leak_detector.cpp deleted file mode 100644 index 0f3ad29d..00000000 --- a/src/catch2/internal/catch_leak_detector.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Created by Martin on 12/07/2017. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - - #include - #include - - -#ifdef CATCH_CONFIG_WINDOWS_CRTDBG -#include - -namespace Catch { - - LeakDetector::LeakDetector() { - int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); - flag |= _CRTDBG_LEAK_CHECK_DF; - flag |= _CRTDBG_ALLOC_MEM_DF; - _CrtSetDbgFlag(flag); - _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); - _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); - // Change this to leaking allocation's number to break there - _CrtSetBreakAlloc(-1); - } -} - -#else - - Catch::LeakDetector::LeakDetector() {} - -#endif - -Catch::LeakDetector::~LeakDetector() { - Catch::cleanUp(); -} diff --git a/src/catch2/internal/catch_polyfills.cpp b/src/catch2/internal/catch_polyfills.cpp deleted file mode 100644 index a4d54ea8..00000000 --- a/src/catch2/internal/catch_polyfills.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Created by Martin on 17/11/2017. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include - -#include - -namespace Catch { - -#if !defined(CATCH_CONFIG_POLYFILL_ISNAN) - bool isnan(float f) { - return std::isnan(f); - } - bool isnan(double d) { - return std::isnan(d); - } -#else - // For now we only use this for embarcadero - bool isnan(float f) { - return std::_isnan(f); - } - bool isnan(double d) { - return std::_isnan(d); - } -#endif - -} // end namespace Catch diff --git a/src/catch2/internal/catch_startup_exception_registry.cpp b/src/catch2/internal/catch_startup_exception_registry.cpp deleted file mode 100644 index 8fd7034b..00000000 --- a/src/catch2/internal/catch_startup_exception_registry.cpp +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Created by Martin on 04/06/2017. - * Copyright 2017 Two Blue Cubes Ltd. All rights reserved. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include -#include - -namespace Catch { -void StartupExceptionRegistry::add( std::exception_ptr const& exception ) noexcept { - CATCH_TRY { - m_exceptions.push_back(exception); - } CATCH_CATCH_ALL { - // If we run out of memory during start-up there's really not a lot more we can do about it - std::terminate(); - } - } - - std::vector const& StartupExceptionRegistry::getExceptions() const noexcept { - return m_exceptions; - } - -} // end namespace Catch diff --git a/src/catch2/internal/catch_uncaught_exceptions.cpp b/src/catch2/internal/catch_uncaught_exceptions.cpp deleted file mode 100644 index 1aa863ad..00000000 --- a/src/catch2/internal/catch_uncaught_exceptions.cpp +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Created by Josh on 1/2/2018. - * Copyright 2018 Two Blue Cubes Ltd. All rights reserved. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include -#include -#include - -namespace Catch { - bool uncaught_exceptions() { -#if defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) || (defined(__cpp_lib_uncaught_exceptions) && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS)) - return std::uncaught_exceptions() > 0; -#else - return std::uncaught_exception(); -#endif - } -} // end namespace Catch diff --git a/src/catch2/matchers/catch_matchers.cpp b/src/catch2/matchers/catch_matchers.cpp deleted file mode 100644 index 20d1ef92..00000000 --- a/src/catch2/matchers/catch_matchers.cpp +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include - -namespace Catch { - - namespace Matchers { - - std::string MatcherUntypedBase::toString() const { - if (m_cachedToString.empty()) - m_cachedToString = describe(); - return m_cachedToString; - } - - MatcherUntypedBase::~MatcherUntypedBase() = default; - - } // namespace Matchers - -} // namespace Catch diff --git a/src/catch2/matchers/catch_matchers_container_properties.cpp b/src/catch2/matchers/catch_matchers_container_properties.cpp deleted file mode 100644 index 72b7b3df..00000000 --- a/src/catch2/matchers/catch_matchers_container_properties.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#include - -#include - -namespace Catch { -namespace Matchers { - - std::string IsEmptyMatcher::describe() const { - return "is empty"; - } - - std::string HasSizeMatcher::describe() const { - ReusableStringStream sstr; - sstr << "has size == " << m_target_size; - return sstr.str(); - } - - IsEmptyMatcher IsEmpty() { - return {}; - } - - HasSizeMatcher SizeIs(std::size_t sz) { - return HasSizeMatcher{ sz }; - } - -} // end namespace Matchers -} // end namespace Catch diff --git a/src/catch2/matchers/catch_matchers_exception.cpp b/src/catch2/matchers/catch_matchers_exception.cpp deleted file mode 100644 index c8e8110d..00000000 --- a/src/catch2/matchers/catch_matchers_exception.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Created by Martin Hořeňovský on 13/10/2019. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include - - -namespace Catch { -namespace Matchers { - -bool ExceptionMessageMatcher::match(std::exception const& ex) const { - return ex.what() == m_message; -} - -std::string ExceptionMessageMatcher::describe() const { - return "exception message matches \"" + m_message + "\""; -} - -ExceptionMessageMatcher Message(std::string const& message) { - return ExceptionMessageMatcher(message); -} - -} // namespace Matchers -} // namespace Catch diff --git a/src/catch2/matchers/catch_matchers_predicate.cpp b/src/catch2/matchers/catch_matchers_predicate.cpp deleted file mode 100644 index fce37373..00000000 --- a/src/catch2/matchers/catch_matchers_predicate.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include - -std::string Catch::Matchers::Detail::finalizeDescription(const std::string& desc) { - if (desc.empty()) { - return "matches undescribed predicate"; - } else { - return "matches predicate: \"" + desc + '"'; - } -} diff --git a/src/catch2/matchers/internal/catch_matchers_combined_tu.cpp b/src/catch2/matchers/internal/catch_matchers_combined_tu.cpp new file mode 100644 index 00000000..7a406a6d --- /dev/null +++ b/src/catch2/matchers/internal/catch_matchers_combined_tu.cpp @@ -0,0 +1,127 @@ +/** \file + * This is a special TU that combines what would otherwise be a very + * small matcher-related TUs into one bigger TU. + * + * The reason for this is compilation performance improvements by + * avoiding reparsing headers for many small TUs, instead having this + * one TU include bit more, but having it all parsed only once. + * + * To avoid heavy-tail problem with compilation times, each "subpart" + * of Catch2 has its own combined TU like this. + */ + +////////////////////////////////////////////// +// vvv formerly catch_matchers_impl.cpp vvv // +////////////////////////////////////////////// +#include +#include +#include + +namespace Catch { + + // This is the general overload that takes a any string matcher + // There is another overload, in catch_assertionhandler.h/.cpp, that only takes a string and infers + // the Equals matcher (so the header does not mention matchers) + void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef const& matcherString ) { + std::string exceptionMessage = Catch::translateActiveException(); + MatchExpr expr( std::move(exceptionMessage), matcher, matcherString ); + handler.handleExpr( expr ); + } + +} // namespace Catch + + +////////////////////////////////////////////////////////////// +// vvv formerly catch_matchers_container_properties.cpp vvv // +////////////////////////////////////////////////////////////// +#include +#include + +namespace Catch { +namespace Matchers { + + std::string IsEmptyMatcher::describe() const { + return "is empty"; + } + + std::string HasSizeMatcher::describe() const { + ReusableStringStream sstr; + sstr << "has size == " << m_target_size; + return sstr.str(); + } + + IsEmptyMatcher IsEmpty() { + return {}; + } + + HasSizeMatcher SizeIs(std::size_t sz) { + return HasSizeMatcher{ sz }; + } + +} // end namespace Matchers +} // end namespace Catch + + + +///////////////////////////////////////// +// vvv formerly catch_matchers.cpp vvv // +///////////////////////////////////////// + +#include + +namespace Catch { +namespace Matchers { + + std::string MatcherUntypedBase::toString() const { + if (m_cachedToString.empty()) { + m_cachedToString = describe(); + } + return m_cachedToString; + } + + MatcherUntypedBase::~MatcherUntypedBase() = default; + +} // namespace Matchers +} // namespace Catch + + + +/////////////////////////////////////////////////// +// vvv formerly catch_matchers_predicate.cpp vvv // +/////////////////////////////////////////////////// +#include + +std::string Catch::Matchers::Detail::finalizeDescription(const std::string& desc) { + if (desc.empty()) { + return "matches undescribed predicate"; + } else { + return "matches predicate: \"" + desc + '"'; + } +} + + + + + +/////////////////////////////////////////////////// +// vvv formerly catch_matchers_exception.cpp vvv // +/////////////////////////////////////////////////// +#include + +namespace Catch { +namespace Matchers { + +bool ExceptionMessageMatcher::match(std::exception const& ex) const { + return ex.what() == m_message; +} + +std::string ExceptionMessageMatcher::describe() const { + return "exception message matches \"" + m_message + "\""; +} + +ExceptionMessageMatcher Message(std::string const& message) { + return ExceptionMessageMatcher(message); +} + +} // namespace Matchers +} // namespace Catch diff --git a/src/catch2/matchers/internal/catch_matchers_impl.cpp b/src/catch2/matchers/internal/catch_matchers_impl.cpp deleted file mode 100644 index 6ebab591..00000000 --- a/src/catch2/matchers/internal/catch_matchers_impl.cpp +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ -#include -#include -#include - -namespace Catch { - - // This is the general overload that takes a any string matcher - // There is another overload, in catch_assertionhandler.h/.cpp, that only takes a string and infers - // the Equals matcher (so the header does not mention matchers) - void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef const& matcherString ) { - std::string exceptionMessage = Catch::translateActiveException(); - MatchExpr expr( std::move(exceptionMessage), matcher, matcherString ); - handler.handleExpr( expr ); - } - -} // namespace Catch