diff --git a/lib/Catch2/.gitignore b/lib/Catch2/.gitignore deleted file mode 100644 index 27f6bc0..0000000 --- a/lib/Catch2/.gitignore +++ /dev/null @@ -1,37 +0,0 @@ -*.build -!meson.build -*.pbxuser -*.mode1v3 -*.ncb -*.suo -Debug -Release -*.user -*.xcuserstate -.DS_Store -xcuserdata -CatchSelfTest.xcscheme -Breakpoints.xcbkptlist -UpgradeLog.XML -Resources/DWARF -projects/Generated -*.pyc -DerivedData -*.xccheckout -Build -.idea -.vs -.vscode -cmake-build-* -benchmark-dir -.conan/test_package/build -bazel-* -build-fuzzers -debug-build -.vscode -msvc-sln* -# Currently we use Doxygen for dep graphs and the full docs are only slowly -# being filled in, so we definitely do not want git to deal with the docs. -docs/doxygen -*.cache -compile_commands.json diff --git a/lib/Catch2/LICENSE.txt b/lib/Catch2/LICENSE.txt deleted file mode 100644 index 36b7cd9..0000000 --- a/lib/Catch2/LICENSE.txt +++ /dev/null @@ -1,23 +0,0 @@ -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/lib/Catch2/src/CMakeLists.txt b/lib/Catch2/src/CMakeLists.txt deleted file mode 100644 index e81d9b6..0000000 --- a/lib/Catch2/src/CMakeLists.txt +++ /dev/null @@ -1,506 +0,0 @@ -include(CatchMiscFunctions) - -# CMake derives a Visual Studio project GUID from the file path but can be overridden via a property -# (see https://gitlab.kitware.com/cmake/cmake/-/commit/c85367f4). Using a non-constant GUID -# can cause problems if other projects/repos want to reference the vcxproj file, -# so we force a constant GUID here. -set(Catch2_GUID_CMAKE "8d538cbe-01bf-4a2e-a98a-6c368fdf13d7" CACHE INTERNAL "Project GUID") -set(Catch2WithMain_GUID_CMAKE "8bd3552a-2cfb-4a59-ab15-2031b97ada1e" CACHE INTERNAL "Project GUID") - -set(BENCHMARK_HEADERS - ${SOURCES_DIR}/benchmark/catch_benchmark.hpp - ${SOURCES_DIR}/benchmark/catch_benchmark_all.hpp - ${SOURCES_DIR}/benchmark/catch_chronometer.hpp - ${SOURCES_DIR}/benchmark/catch_clock.hpp - ${SOURCES_DIR}/benchmark/catch_constructor.hpp - ${SOURCES_DIR}/benchmark/catch_environment.hpp - ${SOURCES_DIR}/benchmark/catch_estimate.hpp - ${SOURCES_DIR}/benchmark/catch_execution_plan.hpp - ${SOURCES_DIR}/benchmark/catch_optimizer.hpp - ${SOURCES_DIR}/benchmark/catch_outlier_classification.hpp - ${SOURCES_DIR}/benchmark/catch_sample_analysis.hpp - ${SOURCES_DIR}/benchmark/detail/catch_analyse.hpp - ${SOURCES_DIR}/benchmark/detail/catch_benchmark_function.hpp - ${SOURCES_DIR}/benchmark/detail/catch_complete_invoke.hpp - ${SOURCES_DIR}/benchmark/detail/catch_estimate_clock.hpp - ${SOURCES_DIR}/benchmark/detail/catch_measure.hpp - ${SOURCES_DIR}/benchmark/detail/catch_repeat.hpp - ${SOURCES_DIR}/benchmark/detail/catch_run_for_at_least.hpp - ${SOURCES_DIR}/benchmark/detail/catch_stats.hpp - ${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_run_for_at_least.cpp - ${SOURCES_DIR}/benchmark/detail/catch_stats.cpp -) -set(BENCHMARK_FILES ${BENCHMARK_HEADERS} ${BENCHMARK_SOURCES}) - - -set(IMPL_HEADERS - "${CMAKE_BINARY_DIR}/generated-includes/catch2/catch_user_config.hpp" - ${SOURCES_DIR}/catch_user_config.hpp.in - ${SOURCES_DIR}/catch_all.hpp - ${SOURCES_DIR}/catch_approx.hpp - ${SOURCES_DIR}/catch_assertion_info.hpp - ${SOURCES_DIR}/catch_assertion_result.hpp - ${SOURCES_DIR}/catch_config.hpp - ${SOURCES_DIR}/catch_get_random_seed.hpp - ${SOURCES_DIR}/catch_message.hpp - ${SOURCES_DIR}/catch_section_info.hpp - ${SOURCES_DIR}/catch_session.hpp - ${SOURCES_DIR}/catch_tag_alias.hpp - ${SOURCES_DIR}/catch_tag_alias_autoregistrar.hpp - ${SOURCES_DIR}/catch_template_test_macros.hpp - ${SOURCES_DIR}/catch_test_case_info.hpp - ${SOURCES_DIR}/catch_test_macros.hpp - ${SOURCES_DIR}/catch_test_spec.hpp - ${SOURCES_DIR}/catch_timer.hpp - ${SOURCES_DIR}/catch_tostring.hpp - ${SOURCES_DIR}/catch_totals.hpp - ${SOURCES_DIR}/catch_translate_exception.hpp - ${SOURCES_DIR}/catch_version.hpp - ${SOURCES_DIR}/catch_version_macros.hpp - ${SOURCES_DIR}/internal/catch_assertion_handler.hpp - ${SOURCES_DIR}/internal/catch_case_insensitive_comparisons.hpp - ${SOURCES_DIR}/internal/catch_case_sensitive.hpp - ${SOURCES_DIR}/internal/catch_clara.hpp - ${SOURCES_DIR}/internal/catch_commandline.hpp - ${SOURCES_DIR}/internal/catch_compare_traits.hpp - ${SOURCES_DIR}/internal/catch_compiler_capabilities.hpp - ${SOURCES_DIR}/internal/catch_config_android_logwrite.hpp - ${SOURCES_DIR}/internal/catch_config_counter.hpp - ${SOURCES_DIR}/internal/catch_config_uncaught_exceptions.hpp - ${SOURCES_DIR}/internal/catch_config_wchar.hpp - ${SOURCES_DIR}/internal/catch_console_colour.hpp - ${SOURCES_DIR}/internal/catch_console_width.hpp - ${SOURCES_DIR}/internal/catch_container_nonmembers.hpp - ${SOURCES_DIR}/internal/catch_context.hpp - ${SOURCES_DIR}/internal/catch_debug_console.hpp - ${SOURCES_DIR}/internal/catch_debugger.hpp - ${SOURCES_DIR}/internal/catch_decomposer.hpp - ${SOURCES_DIR}/internal/catch_enforce.hpp - ${SOURCES_DIR}/internal/catch_enum_values_registry.hpp - ${SOURCES_DIR}/internal/catch_errno_guard.hpp - ${SOURCES_DIR}/internal/catch_exception_translator_registry.hpp - ${SOURCES_DIR}/internal/catch_fatal_condition_handler.hpp - ${SOURCES_DIR}/internal/catch_floating_point_helpers.hpp - ${SOURCES_DIR}/internal/catch_getenv.hpp - ${SOURCES_DIR}/internal/catch_istream.hpp - ${SOURCES_DIR}/internal/catch_lazy_expr.hpp - ${SOURCES_DIR}/internal/catch_leak_detector.hpp - ${SOURCES_DIR}/internal/catch_list.hpp - ${SOURCES_DIR}/internal/catch_message_info.hpp - ${SOURCES_DIR}/internal/catch_meta.hpp - ${SOURCES_DIR}/internal/catch_move_and_forward.hpp - ${SOURCES_DIR}/internal/catch_noncopyable.hpp - ${SOURCES_DIR}/internal/catch_optional.hpp - ${SOURCES_DIR}/internal/catch_output_redirect.hpp - ${SOURCES_DIR}/internal/catch_parse_numbers.hpp - ${SOURCES_DIR}/internal/catch_platform.hpp - ${SOURCES_DIR}/internal/catch_polyfills.hpp - ${SOURCES_DIR}/internal/catch_preprocessor.hpp - ${SOURCES_DIR}/internal/catch_preprocessor_remove_parens.hpp - ${SOURCES_DIR}/internal/catch_random_number_generator.hpp - ${SOURCES_DIR}/internal/catch_random_seed_generation.hpp - ${SOURCES_DIR}/internal/catch_reporter_registry.hpp - ${SOURCES_DIR}/internal/catch_reporter_spec_parser.hpp - ${SOURCES_DIR}/internal/catch_result_type.hpp - ${SOURCES_DIR}/internal/catch_reusable_string_stream.hpp - ${SOURCES_DIR}/internal/catch_run_context.hpp - ${SOURCES_DIR}/internal/catch_section.hpp - ${SOURCES_DIR}/internal/catch_sharding.hpp - ${SOURCES_DIR}/internal/catch_singletons.hpp - ${SOURCES_DIR}/internal/catch_source_line_info.hpp - ${SOURCES_DIR}/internal/catch_startup_exception_registry.hpp - ${SOURCES_DIR}/internal/catch_stdstreams.hpp - ${SOURCES_DIR}/internal/catch_stream_end_stop.hpp - ${SOURCES_DIR}/internal/catch_string_manip.hpp - ${SOURCES_DIR}/internal/catch_stringref.hpp - ${SOURCES_DIR}/internal/catch_tag_alias_registry.hpp - ${SOURCES_DIR}/internal/catch_template_test_registry.hpp - ${SOURCES_DIR}/internal/catch_test_case_info_hasher.hpp - ${SOURCES_DIR}/internal/catch_test_case_registry_impl.hpp - ${SOURCES_DIR}/internal/catch_test_case_tracker.hpp - ${SOURCES_DIR}/internal/catch_test_failure_exception.hpp - ${SOURCES_DIR}/internal/catch_test_macro_impl.hpp - ${SOURCES_DIR}/internal/catch_test_registry.hpp - ${SOURCES_DIR}/internal/catch_test_spec_parser.hpp - ${SOURCES_DIR}/internal/catch_textflow.hpp - ${SOURCES_DIR}/internal/catch_to_string.hpp - ${SOURCES_DIR}/internal/catch_uncaught_exceptions.hpp - ${SOURCES_DIR}/internal/catch_unique_name.hpp - ${SOURCES_DIR}/internal/catch_unique_ptr.hpp - ${SOURCES_DIR}/internal/catch_void_type.hpp - ${SOURCES_DIR}/internal/catch_wildcard_pattern.hpp - ${SOURCES_DIR}/internal/catch_windows_h_proxy.hpp - ${SOURCES_DIR}/internal/catch_xmlwriter.hpp -) -set(IMPL_SOURCES - ${SOURCES_DIR}/catch_approx.cpp - ${SOURCES_DIR}/catch_assertion_result.cpp - ${SOURCES_DIR}/catch_config.cpp - ${SOURCES_DIR}/catch_get_random_seed.cpp - ${SOURCES_DIR}/catch_message.cpp - ${SOURCES_DIR}/catch_registry_hub.cpp - ${SOURCES_DIR}/catch_session.cpp - ${SOURCES_DIR}/catch_tag_alias_autoregistrar.cpp - ${SOURCES_DIR}/catch_test_case_info.cpp - ${SOURCES_DIR}/catch_test_spec.cpp - ${SOURCES_DIR}/catch_timer.cpp - ${SOURCES_DIR}/catch_tostring.cpp - ${SOURCES_DIR}/catch_totals.cpp - ${SOURCES_DIR}/catch_version.cpp - ${SOURCES_DIR}/internal/catch_assertion_handler.cpp - ${SOURCES_DIR}/internal/catch_case_insensitive_comparisons.cpp - ${SOURCES_DIR}/internal/catch_clara.cpp - ${SOURCES_DIR}/internal/catch_commandline.cpp - ${SOURCES_DIR}/internal/catch_console_colour.cpp - ${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}/internal/catch_floating_point_helpers.cpp - ${SOURCES_DIR}/internal/catch_getenv.cpp - ${SOURCES_DIR}/internal/catch_istream.cpp - ${SOURCES_DIR}/internal/catch_lazy_expr.cpp - ${SOURCES_DIR}/internal/catch_leak_detector.cpp - ${SOURCES_DIR}/internal/catch_list.cpp - ${SOURCES_DIR}/internal/catch_message_info.cpp - ${SOURCES_DIR}/internal/catch_output_redirect.cpp - ${SOURCES_DIR}/internal/catch_parse_numbers.cpp - ${SOURCES_DIR}/internal/catch_polyfills.cpp - ${SOURCES_DIR}/internal/catch_random_number_generator.cpp - ${SOURCES_DIR}/internal/catch_random_seed_generation.cpp - ${SOURCES_DIR}/internal/catch_reporter_registry.cpp - ${SOURCES_DIR}/internal/catch_reporter_spec_parser.cpp - ${SOURCES_DIR}/internal/catch_result_type.cpp - ${SOURCES_DIR}/internal/catch_reusable_string_stream.cpp - ${SOURCES_DIR}/internal/catch_run_context.cpp - ${SOURCES_DIR}/internal/catch_section.cpp - ${SOURCES_DIR}/internal/catch_singletons.cpp - ${SOURCES_DIR}/internal/catch_source_line_info.cpp - ${SOURCES_DIR}/internal/catch_startup_exception_registry.cpp - ${SOURCES_DIR}/internal/catch_stdstreams.cpp - ${SOURCES_DIR}/internal/catch_string_manip.cpp - ${SOURCES_DIR}/internal/catch_stringref.cpp - ${SOURCES_DIR}/internal/catch_tag_alias_registry.cpp - ${SOURCES_DIR}/internal/catch_test_case_info_hasher.cpp - ${SOURCES_DIR}/internal/catch_test_case_registry_impl.cpp - ${SOURCES_DIR}/internal/catch_test_case_tracker.cpp - ${SOURCES_DIR}/internal/catch_test_failure_exception.cpp - ${SOURCES_DIR}/internal/catch_test_registry.cpp - ${SOURCES_DIR}/internal/catch_test_spec_parser.cpp - ${SOURCES_DIR}/internal/catch_textflow.cpp - ${SOURCES_DIR}/internal/catch_uncaught_exceptions.cpp - ${SOURCES_DIR}/internal/catch_wildcard_pattern.cpp - ${SOURCES_DIR}/internal/catch_xmlwriter.cpp -) -set(INTERNAL_FILES ${IMPL_SOURCES} ${IMPL_HEADERS}) - -set(INTERFACE_HEADERS - ${SOURCES_DIR}/interfaces/catch_interfaces_all.hpp - ${SOURCES_DIR}/interfaces/catch_interfaces_capture.hpp - ${SOURCES_DIR}/interfaces/catch_interfaces_config.hpp - ${SOURCES_DIR}/interfaces/catch_interfaces_enum_values_registry.hpp - ${SOURCES_DIR}/interfaces/catch_interfaces_exception.hpp - ${SOURCES_DIR}/interfaces/catch_interfaces_generatortracker.hpp - ${SOURCES_DIR}/interfaces/catch_interfaces_registry_hub.hpp - ${SOURCES_DIR}/interfaces/catch_interfaces_reporter.hpp - ${SOURCES_DIR}/interfaces/catch_interfaces_reporter_factory.hpp - ${SOURCES_DIR}/interfaces/catch_interfaces_reporter_registry.hpp - ${SOURCES_DIR}/interfaces/catch_interfaces_tag_alias_registry.hpp - ${SOURCES_DIR}/interfaces/catch_interfaces_testcase.hpp -) -set(INTERFACE_SOURCES - ${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_generatortracker.cpp - ${SOURCES_DIR}/interfaces/catch_interfaces_registry_hub.cpp - ${SOURCES_DIR}/interfaces/catch_interfaces_reporter.cpp - ${SOURCES_DIR}/interfaces/catch_interfaces_reporter_factory.cpp - ${SOURCES_DIR}/interfaces/catch_interfaces_reporter_registry.cpp - ${SOURCES_DIR}/interfaces/catch_interfaces_testcase.cpp -) -set(INTERFACE_FILES ${INTERFACE_HEADERS} ${INTERFACE_SOURCES}) - -set(GENERATOR_HEADERS - ${SOURCES_DIR}/generators/catch_generator_exception.hpp - ${SOURCES_DIR}/generators/catch_generators.hpp - ${SOURCES_DIR}/generators/catch_generators_adapters.hpp - ${SOURCES_DIR}/generators/catch_generators_all.hpp - ${SOURCES_DIR}/generators/catch_generators_random.hpp - ${SOURCES_DIR}/generators/catch_generators_range.hpp -) -set(GENERATOR_SOURCES - ${SOURCES_DIR}/generators/catch_generator_exception.cpp - ${SOURCES_DIR}/generators/catch_generators.cpp - ${SOURCES_DIR}/generators/catch_generators_random.cpp -) -set(GENERATOR_FILES ${GENERATOR_HEADERS} ${GENERATOR_SOURCES}) - -set(MATCHER_HEADERS - ${SOURCES_DIR}/matchers/catch_matchers.hpp - ${SOURCES_DIR}/matchers/catch_matchers_all.hpp - ${SOURCES_DIR}/matchers/catch_matchers_container_properties.hpp - ${SOURCES_DIR}/matchers/catch_matchers_contains.hpp - ${SOURCES_DIR}/matchers/catch_matchers_exception.hpp - ${SOURCES_DIR}/matchers/catch_matchers_floating_point.hpp - ${SOURCES_DIR}/matchers/catch_matchers_predicate.hpp - ${SOURCES_DIR}/matchers/catch_matchers_quantifiers.hpp - ${SOURCES_DIR}/matchers/catch_matchers_string.hpp - ${SOURCES_DIR}/matchers/catch_matchers_templated.hpp - ${SOURCES_DIR}/matchers/catch_matchers_vector.hpp - ${SOURCES_DIR}/matchers/internal/catch_matchers_impl.hpp -) -set(MATCHER_SOURCES - ${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_point.cpp - ${SOURCES_DIR}/matchers/catch_matchers_predicate.cpp - ${SOURCES_DIR}/matchers/catch_matchers_quantifiers.cpp - ${SOURCES_DIR}/matchers/catch_matchers_string.cpp - ${SOURCES_DIR}/matchers/catch_matchers_templated.cpp - ${SOURCES_DIR}/matchers/internal/catch_matchers_impl.cpp -) -set(MATCHER_FILES ${MATCHER_HEADERS} ${MATCHER_SOURCES}) - -set(REPORTER_HEADERS - ${SOURCES_DIR}/reporters/catch_reporter_automake.hpp - ${SOURCES_DIR}/reporters/catch_reporter_common_base.hpp - ${SOURCES_DIR}/reporters/catch_reporter_compact.hpp - ${SOURCES_DIR}/reporters/catch_reporter_console.hpp - ${SOURCES_DIR}/reporters/catch_reporter_cumulative_base.hpp - ${SOURCES_DIR}/reporters/catch_reporter_event_listener.hpp - ${SOURCES_DIR}/reporters/catch_reporter_helpers.hpp - ${SOURCES_DIR}/reporters/catch_reporter_junit.hpp - ${SOURCES_DIR}/reporters/catch_reporter_multi.hpp - ${SOURCES_DIR}/reporters/catch_reporter_registrars.hpp - ${SOURCES_DIR}/reporters/catch_reporter_sonarqube.hpp - ${SOURCES_DIR}/reporters/catch_reporter_streaming_base.hpp - ${SOURCES_DIR}/reporters/catch_reporter_tap.hpp - ${SOURCES_DIR}/reporters/catch_reporter_teamcity.hpp - ${SOURCES_DIR}/reporters/catch_reporter_xml.hpp - ${SOURCES_DIR}/reporters/catch_reporters_all.hpp -) -set(REPORTER_SOURCES - ${SOURCES_DIR}/reporters/catch_reporter_automake.cpp - ${SOURCES_DIR}/reporters/catch_reporter_common_base.cpp - ${SOURCES_DIR}/reporters/catch_reporter_compact.cpp - ${SOURCES_DIR}/reporters/catch_reporter_console.cpp - ${SOURCES_DIR}/reporters/catch_reporter_cumulative_base.cpp - ${SOURCES_DIR}/reporters/catch_reporter_event_listener.cpp - ${SOURCES_DIR}/reporters/catch_reporter_helpers.cpp - ${SOURCES_DIR}/reporters/catch_reporter_junit.cpp - ${SOURCES_DIR}/reporters/catch_reporter_multi.cpp - ${SOURCES_DIR}/reporters/catch_reporter_registrars.cpp - ${SOURCES_DIR}/reporters/catch_reporter_sonarqube.cpp - ${SOURCES_DIR}/reporters/catch_reporter_streaming_base.cpp - ${SOURCES_DIR}/reporters/catch_reporter_tap.cpp - ${SOURCES_DIR}/reporters/catch_reporter_teamcity.cpp - ${SOURCES_DIR}/reporters/catch_reporter_xml.cpp -) -set(REPORTER_FILES ${REPORTER_HEADERS} ${REPORTER_SOURCES}) - -set(ALL_FILES - ${BENCHMARK_FILES} - ${GENERATOR_FILES} - ${REPORTER_FILES} - ${INTERFACE_FILES} - ${INTERNAL_FILES} - ${MATCHER_FILES} -) - -set(FILTERED_FILES ${ALL_FILES}) -list(REMOVE_ITEM FILTERED_FILES "${CMAKE_BINARY_DIR}/generated-includes/catch2/catch_user_config.hpp") -source_group( - TREE ${SOURCES_DIR} - PREFIX sources - FILES ${FILTERED_FILES} -) -source_group("generated headers" - FILES - "${CMAKE_BINARY_DIR}/generated-includes/catch2/catch_user_config.hpp" -) - -add_library(Catch2 ${ALL_FILES}) -add_build_reproducibility_settings(Catch2) -add_library(Catch2::Catch2 ALIAS Catch2) - -if (ANDROID) - target_link_libraries(Catch2 INTERFACE log) -endif() - -set_target_properties(Catch2 PROPERTIES - DEBUG_POSTFIX "d" - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_VERSION}) - -# depend on bunch of C++11 and C++14 features to have C++14 enabled by default -target_compile_features(Catch2 - PUBLIC - cxx_alignas - cxx_alignof - cxx_attributes - cxx_auto_type - cxx_constexpr - cxx_defaulted_functions - cxx_deleted_functions - cxx_final - cxx_lambdas - cxx_noexcept - cxx_override - cxx_range_for - cxx_rvalue_references - cxx_static_assert - cxx_strong_enums - cxx_trailing_return_types - cxx_unicode_literals - cxx_user_literals - cxx_variable_templates - cxx_variadic_macros -) - -configure_file( - "${SOURCES_DIR}/catch_user_config.hpp.in" - "${CMAKE_BINARY_DIR}/generated-includes/catch2/catch_user_config.hpp" -) - -target_include_directories(Catch2 - PUBLIC - $ - $ - $ -) - - -add_library(Catch2WithMain - ${SOURCES_DIR}/internal/catch_main.cpp -) -add_build_reproducibility_settings(Catch2WithMain) -add_library(Catch2::Catch2WithMain ALIAS Catch2WithMain) -target_link_libraries(Catch2WithMain PUBLIC Catch2) -set_target_properties(Catch2WithMain - PROPERTIES - OUTPUT_NAME "Catch2Main" - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_VERSION} -) -set_target_properties(Catch2WithMain PROPERTIES DEBUG_POSTFIX "d") - -if (NOT_SUBPROJECT) - # create and install an export set for catch target as Catch2::Catch - install( - TARGETS - Catch2 - Catch2WithMain - EXPORT - Catch2Targets - LIBRARY DESTINATION - ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION - ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION - ${CMAKE_INSTALL_BINDIR} - ) - - - install( - EXPORT - Catch2Targets - NAMESPACE - Catch2:: - DESTINATION - ${CATCH_CMAKE_CONFIG_DESTINATION} - ) - # Install the headers - install( - DIRECTORY - "${SOURCES_DIR}" - "${CMAKE_BINARY_DIR}/generated-includes/catch2" # Also install the generated header - DESTINATION - "${CMAKE_INSTALL_INCLUDEDIR}" - FILES_MATCHING - PATTERN "*.hpp" - ) -endif() - -# Some tests require a full recompilation of Catch2 lib with different -# compilation flags. They can link against this target to recompile all -# the sources into the binary. -if (CATCH_BUILD_EXAMPLES OR CATCH_BUILD_EXTRA_TESTS) - add_library(Catch2_buildall_interface INTERFACE) - target_sources(Catch2_buildall_interface INTERFACE - ${ALL_FILES} - # Also include main entry point - ${SOURCES_DIR}/internal/catch_main.cpp - ) - target_include_directories(Catch2_buildall_interface - INTERFACE - $ - $ - $ - ) - target_compile_definitions(Catch2_buildall_interface - INTERFACE - CATCH_CONFIG_STATIC - ) - target_compile_features(Catch2_buildall_interface - INTERFACE - cxx_alignas - cxx_alignof - cxx_attributes - cxx_auto_type - cxx_constexpr - cxx_defaulted_functions - cxx_deleted_functions - cxx_final - cxx_lambdas - cxx_noexcept - cxx_override - cxx_range_for - cxx_rvalue_references - cxx_static_assert - cxx_strong_enums - cxx_trailing_return_types - cxx_unicode_literals - cxx_user_literals - cxx_variable_templates - cxx_variadic_macros - ) -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. -if (BUILD_SHARED_LIBS) - if (MSVC) - set_target_properties(Catch2 Catch2WithMain - PROPERTIES - WINDOWS_EXPORT_ALL_SYMBOLS ON - ) - endif() - - get_target_property(_VisPreset Catch2 CXX_VISIBILITY_PRESET) - if (NOT MSVC AND _VisPreset STREQUAL "hidden") - set_target_properties(Catch2 Catch2WithMain - PROPERTIES - CXX_VISIBILITY_PRESET "default" - VISIBILITY_INLINES_HIDDEN OFF - ) - message(WARNING "Setting Catch2's visibility to default." - " Hidden visibility is not supported.") - endif() -endif() diff --git a/lib/Catch2/src/catch2/benchmark/catch_benchmark.hpp b/lib/Catch2/src/catch2/benchmark/catch_benchmark.hpp deleted file mode 100644 index a2d5c3e..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_benchmark.hpp +++ /dev/null @@ -1,144 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_BENCHMARK_HPP_INCLUDED -#define CATCH_BENCHMARK_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -namespace Catch { - namespace Benchmark { - struct Benchmark { - Benchmark(std::string&& benchmarkName) - : name(CATCH_MOVE(benchmarkName)) {} - - template - Benchmark(std::string&& benchmarkName , FUN &&func) - : fun(CATCH_MOVE(func)), name(CATCH_MOVE(benchmarkName)) {} - - template - ExecutionPlan> prepare(const IConfig &cfg, Environment> env) const { - auto min_time = env.clock_resolution.mean * Detail::minimum_ticks; - auto run_time = std::max(min_time, std::chrono::duration_cast(cfg.benchmarkWarmupTime())); - auto&& test = Detail::run_for_at_least(std::chrono::duration_cast>(run_time), 1, fun); - int new_iters = static_cast(std::ceil(min_time * test.iterations / test.elapsed)); - return { new_iters, test.elapsed / test.iterations * new_iters * cfg.benchmarkSamples(), fun, std::chrono::duration_cast>(cfg.benchmarkWarmupTime()), Detail::warmup_iterations }; - } - - template - void run() { - auto const* cfg = getCurrentContext().getConfig(); - - auto env = Detail::measure_environment(); - - getResultCapture().benchmarkPreparing(name); - CATCH_TRY{ - auto plan = user_code([&] { - return prepare(*cfg, env); - }); - - BenchmarkInfo info { - name, - plan.estimated_duration.count(), - plan.iterations_per_sample, - cfg->benchmarkSamples(), - cfg->benchmarkResamples(), - env.clock_resolution.mean.count(), - env.clock_cost.mean.count() - }; - - getResultCapture().benchmarkStarting(info); - - auto samples = user_code([&] { - return plan.template run(*cfg, env); - }); - - auto analysis = Detail::analyse(*cfg, env, samples.begin(), samples.end()); - BenchmarkStats> stats{ info, analysis.samples, analysis.mean, analysis.standard_deviation, analysis.outliers, analysis.outlier_variance }; - getResultCapture().benchmarkEnded(stats); - } CATCH_CATCH_ANON (TestFailureException) { - getResultCapture().benchmarkFailed("Benchmark failed due to failed assertion"_sr); - } CATCH_CATCH_ALL{ - getResultCapture().benchmarkFailed(translateActiveException()); - // We let the exception go further up so that the - // test case is marked as failed. - std::rethrow_exception(std::current_exception()); - } - } - - // sets lambda to be used in fun *and* executes benchmark! - template ::value, int> = 0> - Benchmark & operator=(Fun func) { - auto const* cfg = getCurrentContext().getConfig(); - if (!cfg->skipBenchmarks()) { - fun = Detail::BenchmarkFunction(func); - run(); - } - return *this; - } - - explicit operator bool() { - return true; - } - - private: - Detail::BenchmarkFunction fun; - std::string name; - }; - } -} // namespace Catch - -#define INTERNAL_CATCH_GET_1_ARG(arg1, arg2, ...) arg1 -#define INTERNAL_CATCH_GET_2_ARG(arg1, arg2, ...) arg2 - -#define INTERNAL_CATCH_BENCHMARK(BenchmarkName, name, benchmarkIndex)\ - if( Catch::Benchmark::Benchmark BenchmarkName{name} ) \ - BenchmarkName = [&](int benchmarkIndex) - -#define INTERNAL_CATCH_BENCHMARK_ADVANCED(BenchmarkName, name)\ - if( Catch::Benchmark::Benchmark BenchmarkName{name} ) \ - BenchmarkName = [&] - -#if defined(CATCH_CONFIG_PREFIX_ALL) - -#define CATCH_BENCHMARK(...) \ - INTERNAL_CATCH_BENCHMARK(INTERNAL_CATCH_UNIQUE_NAME(CATCH2_INTERNAL_BENCHMARK_), INTERNAL_CATCH_GET_1_ARG(__VA_ARGS__,,), INTERNAL_CATCH_GET_2_ARG(__VA_ARGS__,,)) -#define CATCH_BENCHMARK_ADVANCED(name) \ - INTERNAL_CATCH_BENCHMARK_ADVANCED(INTERNAL_CATCH_UNIQUE_NAME(CATCH2_INTERNAL_BENCHMARK_), name) - -#else - -#define BENCHMARK(...) \ - INTERNAL_CATCH_BENCHMARK(INTERNAL_CATCH_UNIQUE_NAME(CATCH2_INTERNAL_BENCHMARK_), INTERNAL_CATCH_GET_1_ARG(__VA_ARGS__,,), INTERNAL_CATCH_GET_2_ARG(__VA_ARGS__,,)) -#define BENCHMARK_ADVANCED(name) \ - INTERNAL_CATCH_BENCHMARK_ADVANCED(INTERNAL_CATCH_UNIQUE_NAME(CATCH2_INTERNAL_BENCHMARK_), name) - -#endif - -#endif // CATCH_BENCHMARK_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/catch_benchmark_all.hpp b/lib/Catch2/src/catch2/benchmark/catch_benchmark_all.hpp deleted file mode 100644 index eb81f23..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_benchmark_all.hpp +++ /dev/null @@ -1,44 +0,0 @@ - -// 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 - * This is a convenience header for Catch2's benchmarking. It includes - * **all** of Catch2 headers related to benchmarking. - * - * Generally the Catch2 users should use specific includes they need, - * but this header can be used instead for ease-of-experimentation, or - * just plain convenience, at the cost of (significantly) increased - * compilation times. - * - * When a new header is added to either the `benchmark` folder, or to - * the corresponding internal (detail) subfolder, it should be added here. - */ - -#ifndef CATCH_BENCHMARK_ALL_HPP_INCLUDED -#define CATCH_BENCHMARK_ALL_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#endif // CATCH_BENCHMARK_ALL_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/catch_chronometer.cpp b/lib/Catch2/src/catch2/benchmark/catch_chronometer.cpp deleted file mode 100644 index 92f03c9..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_chronometer.cpp +++ /dev/null @@ -1,17 +0,0 @@ - -// 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 - -namespace Catch { - namespace Benchmark { - namespace Detail { - ChronometerConcept::~ChronometerConcept() = default; - } // namespace Detail - } // namespace Benchmark -} // namespace Catch diff --git a/lib/Catch2/src/catch2/benchmark/catch_chronometer.hpp b/lib/Catch2/src/catch2/benchmark/catch_chronometer.hpp deleted file mode 100644 index bce2406..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_chronometer.hpp +++ /dev/null @@ -1,75 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_CHRONOMETER_HPP_INCLUDED -#define CATCH_CHRONOMETER_HPP_INCLUDED - -#include -#include -#include -#include -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - struct ChronometerConcept { - virtual void start() = 0; - virtual void finish() = 0; - virtual ~ChronometerConcept(); // = default; - - ChronometerConcept() = default; - ChronometerConcept(ChronometerConcept const&) = default; - ChronometerConcept& operator=(ChronometerConcept const&) = default; - }; - template - struct ChronometerModel final : public ChronometerConcept { - void start() override { started = Clock::now(); } - void finish() override { finished = Clock::now(); } - - ClockDuration elapsed() const { return finished - started; } - - TimePoint started; - TimePoint finished; - }; - } // namespace Detail - - struct Chronometer { - public: - template - void measure(Fun&& fun) { measure(CATCH_FORWARD(fun), is_callable()); } - - int runs() const { return repeats; } - - Chronometer(Detail::ChronometerConcept& meter, int repeats_) - : impl(&meter) - , repeats(repeats_) {} - - private: - template - void measure(Fun&& fun, std::false_type) { - measure([&fun](int) { return fun(); }, std::true_type()); - } - - template - void measure(Fun&& fun, std::true_type) { - Detail::optimizer_barrier(); - impl->start(); - for (int i = 0; i < repeats; ++i) invoke_deoptimized(fun, i); - impl->finish(); - Detail::optimizer_barrier(); - } - - Detail::ChronometerConcept* impl; - int repeats; - }; - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_CHRONOMETER_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/catch_clock.hpp b/lib/Catch2/src/catch2/benchmark/catch_clock.hpp deleted file mode 100644 index cee4609..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_clock.hpp +++ /dev/null @@ -1,39 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_CLOCK_HPP_INCLUDED -#define CATCH_CLOCK_HPP_INCLUDED - -#include -#include - -namespace Catch { - namespace Benchmark { - template - using ClockDuration = typename Clock::duration; - template - using FloatDuration = std::chrono::duration; - - template - using TimePoint = typename Clock::time_point; - - using default_clock = std::chrono::steady_clock; - - template - struct now { - TimePoint operator()() const { - return Clock::now(); - } - }; - - using fp_seconds = std::chrono::duration>; - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_CLOCK_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/catch_constructor.hpp b/lib/Catch2/src/catch2/benchmark/catch_constructor.hpp deleted file mode 100644 index 853bd6c..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_constructor.hpp +++ /dev/null @@ -1,82 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_CONSTRUCTOR_HPP_INCLUDED -#define CATCH_CONSTRUCTOR_HPP_INCLUDED - -#include - -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - template - struct ObjectStorage - { - ObjectStorage() = default; - - ObjectStorage(const ObjectStorage& other) - { - new(&data) T(other.stored_object()); - } - - ObjectStorage(ObjectStorage&& other) - { - new(data) T(CATCH_MOVE(other.stored_object())); - } - - ~ObjectStorage() { destruct_on_exit(); } - - template - void construct(Args&&... args) - { - new (data) T(CATCH_FORWARD(args)...); - } - - template - std::enable_if_t destruct() - { - stored_object().~T(); - } - - private: - // If this is a constructor benchmark, destruct the underlying object - template - void destruct_on_exit(std::enable_if_t* = nullptr) { destruct(); } - // Otherwise, don't - template - void destruct_on_exit(std::enable_if_t* = nullptr) { } - -#if defined( __GNUC__ ) && __GNUC__ <= 6 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif - T& stored_object() { return *reinterpret_cast( data ); } - - T const& stored_object() const { - return *reinterpret_cast( data ); - } -#if defined( __GNUC__ ) && __GNUC__ <= 6 -# pragma GCC diagnostic pop -#endif - - alignas( T ) unsigned char data[sizeof( T )]{}; - }; - } // namespace Detail - - template - using storage_for = Detail::ObjectStorage; - - template - using destructable_object = Detail::ObjectStorage; - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_CONSTRUCTOR_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/catch_environment.hpp b/lib/Catch2/src/catch2/benchmark/catch_environment.hpp deleted file mode 100644 index de4d77d..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_environment.hpp +++ /dev/null @@ -1,37 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_ENVIRONMENT_HPP_INCLUDED -#define CATCH_ENVIRONMENT_HPP_INCLUDED - -#include -#include - -namespace Catch { - namespace Benchmark { - template - struct EnvironmentEstimate { - Duration mean; - OutlierClassification outliers; - - template - operator EnvironmentEstimate() const { - return { mean, outliers }; - } - }; - template - struct Environment { - using clock_type = Clock; - EnvironmentEstimate> clock_resolution; - EnvironmentEstimate> clock_cost; - }; - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_ENVIRONMENT_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/catch_estimate.hpp b/lib/Catch2/src/catch2/benchmark/catch_estimate.hpp deleted file mode 100644 index be594a1..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_estimate.hpp +++ /dev/null @@ -1,30 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_ESTIMATE_HPP_INCLUDED -#define CATCH_ESTIMATE_HPP_INCLUDED - -namespace Catch { - namespace Benchmark { - template - struct Estimate { - Duration point; - Duration lower_bound; - Duration upper_bound; - double confidence_interval; - - template - operator Estimate() const { - return { point, lower_bound, upper_bound, confidence_interval }; - } - }; - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_ESTIMATE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/catch_execution_plan.hpp b/lib/Catch2/src/catch2/benchmark/catch_execution_plan.hpp deleted file mode 100644 index 039de7e..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_execution_plan.hpp +++ /dev/null @@ -1,58 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_EXECUTION_PLAN_HPP_INCLUDED -#define CATCH_EXECUTION_PLAN_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace Catch { - namespace Benchmark { - template - struct ExecutionPlan { - int iterations_per_sample; - Duration estimated_duration; - Detail::BenchmarkFunction benchmark; - Duration warmup_time; - int warmup_iterations; - - template - operator ExecutionPlan() const { - return { iterations_per_sample, estimated_duration, benchmark, warmup_time, warmup_iterations }; - } - - template - std::vector> run(const IConfig &cfg, Environment> env) const { - // warmup a bit - Detail::run_for_at_least(std::chrono::duration_cast>(warmup_time), warmup_iterations, Detail::repeat(now{})); - - std::vector> times; - times.reserve(cfg.benchmarkSamples()); - std::generate_n(std::back_inserter(times), cfg.benchmarkSamples(), [this, env] { - Detail::ChronometerModel model; - this->benchmark(Chronometer(model, iterations_per_sample)); - auto sample_time = model.elapsed() - env.clock_cost.mean; - if (sample_time < FloatDuration::zero()) sample_time = FloatDuration::zero(); - return sample_time / iterations_per_sample; - }); - return times; - } - }; - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_EXECUTION_PLAN_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/catch_optimizer.hpp b/lib/Catch2/src/catch2/benchmark/catch_optimizer.hpp deleted file mode 100644 index 0dbfc14..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_optimizer.hpp +++ /dev/null @@ -1,71 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_OPTIMIZER_HPP_INCLUDED -#define CATCH_OPTIMIZER_HPP_INCLUDED - -#if defined(_MSC_VER) -# include // atomic_thread_fence -#endif - -#include - -#include - -namespace Catch { - namespace Benchmark { -#if defined(__GNUC__) || defined(__clang__) - template - inline void keep_memory(T* p) { - asm volatile("" : : "g"(p) : "memory"); - } - inline void keep_memory() { - asm volatile("" : : : "memory"); - } - - namespace Detail { - inline void optimizer_barrier() { keep_memory(); } - } // namespace Detail -#elif defined(_MSC_VER) - -#pragma optimize("", off) - template - inline void keep_memory(T* p) { - // thanks @milleniumbug - *reinterpret_cast(p) = *reinterpret_cast(p); - } - // TODO equivalent keep_memory() -#pragma optimize("", on) - - namespace Detail { - inline void optimizer_barrier() { - std::atomic_thread_fence(std::memory_order_seq_cst); - } - } // namespace Detail - -#endif - - template - inline void deoptimize_value(T&& x) { - keep_memory(&x); - } - - template - inline auto invoke_deoptimized(Fn&& fn, Args&&... args) -> std::enable_if_t::value> { - deoptimize_value(CATCH_FORWARD(fn) (CATCH_FORWARD(args)...)); - } - - template - inline auto invoke_deoptimized(Fn&& fn, Args&&... args) -> std::enable_if_t::value> { - CATCH_FORWARD(fn) (CATCH_FORWARD(args)...); - } - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_OPTIMIZER_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/catch_outlier_classification.hpp b/lib/Catch2/src/catch2/benchmark/catch_outlier_classification.hpp deleted file mode 100644 index e31d65d..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_outlier_classification.hpp +++ /dev/null @@ -1,29 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_OUTLIER_CLASSIFICATION_HPP_INCLUDED -#define CATCH_OUTLIER_CLASSIFICATION_HPP_INCLUDED - -namespace Catch { - namespace Benchmark { - struct OutlierClassification { - int samples_seen = 0; - int low_severe = 0; // more than 3 times IQR below Q1 - int low_mild = 0; // 1.5 to 3 times IQR below Q1 - int high_mild = 0; // 1.5 to 3 times IQR above Q3 - int high_severe = 0; // more than 3 times IQR above Q3 - - int total() const { - return low_severe + low_mild + high_mild + high_severe; - } - }; - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_OUTLIERS_CLASSIFICATION_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/catch_sample_analysis.hpp b/lib/Catch2/src/catch2/benchmark/catch_sample_analysis.hpp deleted file mode 100644 index d849d24..0000000 --- a/lib/Catch2/src/catch2/benchmark/catch_sample_analysis.hpp +++ /dev/null @@ -1,49 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_SAMPLE_ANALYSIS_HPP_INCLUDED -#define CATCH_SAMPLE_ANALYSIS_HPP_INCLUDED - -#include -#include -#include -#include - -#include -#include -#include - -namespace Catch { - namespace Benchmark { - template - struct SampleAnalysis { - std::vector samples; - Estimate mean; - Estimate standard_deviation; - OutlierClassification outliers; - double outlier_variance; - - template - operator SampleAnalysis() const { - std::vector samples2; - samples2.reserve(samples.size()); - std::transform(samples.begin(), samples.end(), std::back_inserter(samples2), [](Duration d) { return Duration2(d); }); - return { - CATCH_MOVE(samples2), - mean, - standard_deviation, - outliers, - outlier_variance, - }; - } - }; - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_SAMPLE_ANALYSIS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/detail/catch_analyse.hpp b/lib/Catch2/src/catch2/benchmark/detail/catch_analyse.hpp deleted file mode 100644 index 77b0a9d..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_analyse.hpp +++ /dev/null @@ -1,80 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_ANALYSE_HPP_INCLUDED -#define CATCH_ANALYSE_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - template - SampleAnalysis analyse(const IConfig &cfg, Environment, Iterator first, Iterator last) { - if (!cfg.benchmarkNoAnalysis()) { - std::vector samples; - samples.reserve(static_cast(last - first)); - std::transform(first, last, std::back_inserter(samples), [](Duration d) { return d.count(); }); - - auto analysis = Catch::Benchmark::Detail::analyse_samples(cfg.benchmarkConfidenceInterval(), cfg.benchmarkResamples(), samples.begin(), samples.end()); - auto outliers = Catch::Benchmark::Detail::classify_outliers(samples.begin(), samples.end()); - - auto wrap_estimate = [](Estimate e) { - return Estimate { - Duration(e.point), - Duration(e.lower_bound), - Duration(e.upper_bound), - e.confidence_interval, - }; - }; - std::vector samples2; - samples2.reserve(samples.size()); - std::transform(samples.begin(), samples.end(), std::back_inserter(samples2), [](double d) { return Duration(d); }); - return { - CATCH_MOVE(samples2), - wrap_estimate(analysis.mean), - wrap_estimate(analysis.standard_deviation), - outliers, - analysis.outlier_variance, - }; - } else { - std::vector samples; - samples.reserve(static_cast(last - first)); - - Duration mean = Duration(0); - int i = 0; - for (auto it = first; it < last; ++it, ++i) { - samples.push_back(Duration(*it)); - mean += Duration(*it); - } - mean /= i; - - return { - CATCH_MOVE(samples), - Estimate{mean, mean, mean, 0.0}, - Estimate{Duration(0), Duration(0), Duration(0), 0.0}, - OutlierClassification{}, - 0.0 - }; - } - } - } // namespace Detail - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_ANALYSE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/detail/catch_benchmark_function.cpp b/lib/Catch2/src/catch2/benchmark/detail/catch_benchmark_function.cpp deleted file mode 100644 index b437d04..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_benchmark_function.cpp +++ /dev/null @@ -1,17 +0,0 @@ - -// 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 - -namespace Catch { - namespace Benchmark { - namespace Detail { - BenchmarkFunction::callable::~callable() = default; - } // namespace Detail - } // namespace Benchmark -} // namespace Catch diff --git a/lib/Catch2/src/catch2/benchmark/detail/catch_benchmark_function.hpp b/lib/Catch2/src/catch2/benchmark/detail/catch_benchmark_function.hpp deleted file mode 100644 index 1529825..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_benchmark_function.hpp +++ /dev/null @@ -1,108 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_BENCHMARK_FUNCTION_HPP_INCLUDED -#define CATCH_BENCHMARK_FUNCTION_HPP_INCLUDED - -#include -#include -#include -#include -#include - -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - template - struct is_related - : std::is_same, std::decay_t> {}; - - /// We need to reinvent std::function because every piece of code that might add overhead - /// in a measurement context needs to have consistent performance characteristics so that we - /// can account for it in the measurement. - /// Implementations of std::function with optimizations that aren't always applicable, like - /// small buffer optimizations, are not uncommon. - /// This is effectively an implementation of std::function without any such optimizations; - /// it may be slow, but it is consistently slow. - struct BenchmarkFunction { - private: - struct callable { - virtual void call(Chronometer meter) const = 0; - virtual Catch::Detail::unique_ptr clone() const = 0; - virtual ~callable(); // = default; - - callable() = default; - callable(callable const&) = default; - callable& operator=(callable const&) = default; - }; - template - struct model : public callable { - model(Fun&& fun_) : fun(CATCH_MOVE(fun_)) {} - model(Fun const& fun_) : fun(fun_) {} - - Catch::Detail::unique_ptr clone() const override { - return Catch::Detail::make_unique>( *this ); - } - - void call(Chronometer meter) const override { - call(meter, is_callable()); - } - void call(Chronometer meter, std::true_type) const { - fun(meter); - } - void call(Chronometer meter, std::false_type) const { - meter.measure(fun); - } - - Fun fun; - }; - - struct do_nothing { void operator()() const {} }; - - template - BenchmarkFunction(model* c) : f(c) {} - - public: - BenchmarkFunction() - : f(new model{ {} }) {} - - template ::value, int> = 0> - BenchmarkFunction(Fun&& fun) - : f(new model>(CATCH_FORWARD(fun))) {} - - BenchmarkFunction( BenchmarkFunction&& that ) noexcept: - f( CATCH_MOVE( that.f ) ) {} - - BenchmarkFunction(BenchmarkFunction const& that) - : f(that.f->clone()) {} - - BenchmarkFunction& - operator=( BenchmarkFunction&& that ) noexcept { - f = CATCH_MOVE( that.f ); - return *this; - } - - BenchmarkFunction& operator=(BenchmarkFunction const& that) { - f = that.f->clone(); - return *this; - } - - void operator()(Chronometer meter) const { f->call(meter); } - - private: - Catch::Detail::unique_ptr f; - }; - } // namespace Detail - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_BENCHMARK_FUNCTION_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/detail/catch_complete_invoke.hpp b/lib/Catch2/src/catch2/benchmark/detail/catch_complete_invoke.hpp deleted file mode 100644 index 49db413..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_complete_invoke.hpp +++ /dev/null @@ -1,63 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_COMPLETE_INVOKE_HPP_INCLUDED -#define CATCH_COMPLETE_INVOKE_HPP_INCLUDED - -#include -#include -#include -#include -#include - -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - template - struct CompleteType { using type = T; }; - template <> - struct CompleteType { struct type {}; }; - - template - using CompleteType_t = typename CompleteType::type; - - template - struct CompleteInvoker { - template - static Result invoke(Fun&& fun, Args&&... args) { - return CATCH_FORWARD(fun)(CATCH_FORWARD(args)...); - } - }; - template <> - struct CompleteInvoker { - template - static CompleteType_t invoke(Fun&& fun, Args&&... args) { - CATCH_FORWARD(fun)(CATCH_FORWARD(args)...); - return {}; - } - }; - - // invoke and not return void :( - template - CompleteType_t> complete_invoke(Fun&& fun, Args&&... args) { - return CompleteInvoker>::invoke(CATCH_FORWARD(fun), CATCH_FORWARD(args)...); - } - - } // namespace Detail - - template - Detail::CompleteType_t> user_code(Fun&& fun) { - return Detail::complete_invoke(CATCH_FORWARD(fun)); - } - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_COMPLETE_INVOKE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/detail/catch_estimate_clock.hpp b/lib/Catch2/src/catch2/benchmark/detail/catch_estimate_clock.hpp deleted file mode 100644 index 907773f..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_estimate_clock.hpp +++ /dev/null @@ -1,121 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_ESTIMATE_CLOCK_HPP_INCLUDED -#define CATCH_ESTIMATE_CLOCK_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - template - std::vector resolution(int k) { - std::vector> times; - times.reserve(static_cast(k + 1)); - std::generate_n(std::back_inserter(times), k + 1, now{}); - - std::vector deltas; - deltas.reserve(static_cast(k)); - std::transform(std::next(times.begin()), times.end(), times.begin(), - std::back_inserter(deltas), - [](TimePoint a, TimePoint b) { return static_cast((a - b).count()); }); - - return deltas; - } - - const auto warmup_iterations = 10000; - const auto warmup_time = std::chrono::milliseconds(100); - const auto minimum_ticks = 1000; - const auto warmup_seed = 10000; - const auto clock_resolution_estimation_time = std::chrono::milliseconds(500); - const auto clock_cost_estimation_time_limit = std::chrono::seconds(1); - const auto clock_cost_estimation_tick_limit = 100000; - const auto clock_cost_estimation_time = std::chrono::milliseconds(10); - const auto clock_cost_estimation_iterations = 10000; - - template - int warmup() { - return run_for_at_least(std::chrono::duration_cast>(warmup_time), warmup_seed, &resolution) - .iterations; - } - template - EnvironmentEstimate> estimate_clock_resolution(int iterations) { - auto r = run_for_at_least(std::chrono::duration_cast>(clock_resolution_estimation_time), iterations, &resolution) - .result; - return { - FloatDuration(mean(r.begin(), r.end())), - classify_outliers(r.begin(), r.end()), - }; - } - template - EnvironmentEstimate> estimate_clock_cost(FloatDuration resolution) { - auto time_limit = (std::min)( - resolution * clock_cost_estimation_tick_limit, - FloatDuration(clock_cost_estimation_time_limit)); - auto time_clock = [](int k) { - return Detail::measure([k] { - for (int i = 0; i < k; ++i) { - volatile auto ignored = Clock::now(); - (void)ignored; - } - }).elapsed; - }; - time_clock(1); - int iters = clock_cost_estimation_iterations; - auto&& r = run_for_at_least(std::chrono::duration_cast>(clock_cost_estimation_time), iters, time_clock); - std::vector times; - int nsamples = static_cast(std::ceil(time_limit / r.elapsed)); - times.reserve(static_cast(nsamples)); - std::generate_n(std::back_inserter(times), nsamples, [time_clock, &r] { - return static_cast((time_clock(r.iterations) / r.iterations).count()); - }); - return { - FloatDuration(mean(times.begin(), times.end())), - classify_outliers(times.begin(), times.end()), - }; - } - - template - Environment> measure_environment() { -#if defined(__clang__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wexit-time-destructors" -#endif - static Catch::Detail::unique_ptr>> env; -#if defined(__clang__) -# pragma clang diagnostic pop -#endif - if (env) { - return *env; - } - - auto iters = Detail::warmup(); - auto resolution = Detail::estimate_clock_resolution(iters); - auto cost = Detail::estimate_clock_cost(resolution.mean); - - env = Catch::Detail::make_unique>>( Environment>{resolution, cost} ); - return *env; - } - } // namespace Detail - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_ESTIMATE_CLOCK_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/detail/catch_measure.hpp b/lib/Catch2/src/catch2/benchmark/detail/catch_measure.hpp deleted file mode 100644 index 388814c..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_measure.hpp +++ /dev/null @@ -1,33 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_MEASURE_HPP_INCLUDED -#define CATCH_MEASURE_HPP_INCLUDED - -#include -#include -#include -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - template - TimingOf measure(Fun&& fun, Args&&... args) { - auto start = Clock::now(); - auto&& r = Detail::complete_invoke(fun, CATCH_FORWARD(args)...); - auto end = Clock::now(); - auto delta = end - start; - return { delta, CATCH_FORWARD(r), 1 }; - } - } // namespace Detail - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_MEASURE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/detail/catch_repeat.hpp b/lib/Catch2/src/catch2/benchmark/detail/catch_repeat.hpp deleted file mode 100644 index 08c0337..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_repeat.hpp +++ /dev/null @@ -1,36 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_REPEAT_HPP_INCLUDED -#define CATCH_REPEAT_HPP_INCLUDED - -#include -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - template - struct repeater { - void operator()(int k) const { - for (int i = 0; i < k; ++i) { - fun(); - } - } - Fun fun; - }; - template - repeater> repeat(Fun&& fun) { - return { CATCH_FORWARD(fun) }; - } - } // namespace Detail - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_REPEAT_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/detail/catch_run_for_at_least.cpp b/lib/Catch2/src/catch2/benchmark/detail/catch_run_for_at_least.cpp deleted file mode 100644 index 35778b2..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_run_for_at_least.cpp +++ /dev/null @@ -1,30 +0,0 @@ - -// 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 -#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/lib/Catch2/src/catch2/benchmark/detail/catch_run_for_at_least.hpp b/lib/Catch2/src/catch2/benchmark/detail/catch_run_for_at_least.hpp deleted file mode 100644 index 976a4b2..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_run_for_at_least.hpp +++ /dev/null @@ -1,65 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_RUN_FOR_AT_LEAST_HPP_INCLUDED -#define CATCH_RUN_FOR_AT_LEAST_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - template - TimingOf measure_one(Fun&& fun, int iters, std::false_type) { - return Detail::measure(fun, iters); - } - template - TimingOf measure_one(Fun&& fun, int iters, std::true_type) { - Detail::ChronometerModel meter; - auto&& result = Detail::complete_invoke(fun, Chronometer(meter, iters)); - - return { meter.elapsed(), CATCH_MOVE(result), iters }; - } - - template - using run_for_at_least_argument_t = std::conditional_t::value, Chronometer, int>; - - - [[noreturn]] - void throw_optimized_away_error(); - - template - TimingOf> - run_for_at_least(ClockDuration how_long, - const int initial_iterations, - Fun&& fun) { - auto iters = initial_iterations; - while (iters < (1 << 30)) { - auto&& Timing = measure_one(fun, iters, is_callable()); - - if (Timing.elapsed >= how_long) { - return { Timing.elapsed, CATCH_MOVE(Timing.result), iters }; - } - iters *= 2; - } - throw_optimized_away_error(); - } - } // namespace Detail - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_RUN_FOR_AT_LEAST_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/detail/catch_stats.cpp b/lib/Catch2/src/catch2/benchmark/detail/catch_stats.cpp deleted file mode 100644 index 514ed1f..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_stats.cpp +++ /dev/null @@ -1,257 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#include - -#include - -#include -#include -#include -#include - - -#if defined(CATCH_CONFIG_USE_ASYNC) -#include -#endif - -namespace { - -using Catch::Benchmark::Detail::sample; - - template - sample resample(URng& rng, unsigned int resamples, std::vector::iterator first, std::vector::iterator last, Estimator& estimator) { - auto n = static_cast(last - first); - std::uniform_int_distribution dist(0, n - 1); - - sample out; - out.reserve(resamples); - std::generate_n(std::back_inserter(out), resamples, [n, first, &estimator, &dist, &rng] { - std::vector resampled; - resampled.reserve(n); - std::generate_n(std::back_inserter(resampled), n, [first, &dist, &rng] { return first[static_cast(dist(rng))]; }); - return estimator(resampled.begin(), resampled.end()); - }); - std::sort(out.begin(), out.end()); - return out; - } - - - double erf_inv(double x) { - // Code accompanying the article "Approximating the erfinv function" in GPU Computing Gems, Volume 2 - double w, p; - - w = -log((1.0 - x) * (1.0 + x)); - - if (w < 6.250000) { - w = w - 3.125000; - p = -3.6444120640178196996e-21; - p = -1.685059138182016589e-19 + p * w; - p = 1.2858480715256400167e-18 + p * w; - p = 1.115787767802518096e-17 + p * w; - p = -1.333171662854620906e-16 + p * w; - p = 2.0972767875968561637e-17 + p * w; - p = 6.6376381343583238325e-15 + p * w; - p = -4.0545662729752068639e-14 + p * w; - p = -8.1519341976054721522e-14 + p * w; - p = 2.6335093153082322977e-12 + p * w; - p = -1.2975133253453532498e-11 + p * w; - p = -5.4154120542946279317e-11 + p * w; - p = 1.051212273321532285e-09 + p * w; - p = -4.1126339803469836976e-09 + p * w; - p = -2.9070369957882005086e-08 + p * w; - p = 4.2347877827932403518e-07 + p * w; - p = -1.3654692000834678645e-06 + p * w; - p = -1.3882523362786468719e-05 + p * w; - p = 0.0001867342080340571352 + p * w; - p = -0.00074070253416626697512 + p * w; - p = -0.0060336708714301490533 + p * w; - p = 0.24015818242558961693 + p * w; - p = 1.6536545626831027356 + p * w; - } else if (w < 16.000000) { - w = sqrt(w) - 3.250000; - p = 2.2137376921775787049e-09; - p = 9.0756561938885390979e-08 + p * w; - p = -2.7517406297064545428e-07 + p * w; - p = 1.8239629214389227755e-08 + p * w; - p = 1.5027403968909827627e-06 + p * w; - p = -4.013867526981545969e-06 + p * w; - p = 2.9234449089955446044e-06 + p * w; - p = 1.2475304481671778723e-05 + p * w; - p = -4.7318229009055733981e-05 + p * w; - p = 6.8284851459573175448e-05 + p * w; - p = 2.4031110387097893999e-05 + p * w; - p = -0.0003550375203628474796 + p * w; - p = 0.00095328937973738049703 + p * w; - p = -0.0016882755560235047313 + p * w; - p = 0.0024914420961078508066 + p * w; - p = -0.0037512085075692412107 + p * w; - p = 0.005370914553590063617 + p * w; - p = 1.0052589676941592334 + p * w; - p = 3.0838856104922207635 + p * w; - } else { - w = sqrt(w) - 5.000000; - p = -2.7109920616438573243e-11; - p = -2.5556418169965252055e-10 + p * w; - p = 1.5076572693500548083e-09 + p * w; - p = -3.7894654401267369937e-09 + p * w; - p = 7.6157012080783393804e-09 + p * w; - p = -1.4960026627149240478e-08 + p * w; - p = 2.9147953450901080826e-08 + p * w; - p = -6.7711997758452339498e-08 + p * w; - p = 2.2900482228026654717e-07 + p * w; - p = -9.9298272942317002539e-07 + p * w; - p = 4.5260625972231537039e-06 + p * w; - p = -1.9681778105531670567e-05 + p * w; - p = 7.5995277030017761139e-05 + p * w; - p = -0.00021503011930044477347 + p * w; - p = -0.00013871931833623122026 + p * w; - p = 1.0103004648645343977 + p * w; - p = 4.8499064014085844221 + p * w; - } - return p * x; - } - - double standard_deviation(std::vector::iterator first, std::vector::iterator last) { - auto m = Catch::Benchmark::Detail::mean(first, last); - double variance = std::accumulate( first, - last, - 0., - [m]( double a, double b ) { - double diff = b - m; - return a + diff * diff; - } ) / - ( last - first ); - return std::sqrt( variance ); - } - -} - -namespace Catch { - namespace Benchmark { - namespace Detail { - -#if defined( __GNUC__ ) || defined( __clang__ ) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wfloat-equal" -#endif - bool directCompare( double lhs, double rhs ) { return lhs == rhs; } -#if defined( __GNUC__ ) || defined( __clang__ ) -# pragma GCC diagnostic pop -#endif - - double weighted_average_quantile(int k, int q, std::vector::iterator first, std::vector::iterator last) { - auto count = last - first; - double idx = (count - 1) * k / static_cast(q); - int j = static_cast(idx); - double g = idx - j; - std::nth_element(first, first + j, last); - auto xj = first[j]; - if ( directCompare( g, 0 ) ) { - return xj; - } - - auto xj1 = *std::min_element(first + (j + 1), last); - return xj + g * (xj1 - xj); - } - - - double erfc_inv(double x) { - return erf_inv(1.0 - x); - } - - double normal_quantile(double p) { - static const double ROOT_TWO = std::sqrt(2.0); - - double result = 0.0; - assert(p >= 0 && p <= 1); - if (p < 0 || p > 1) { - return result; - } - - result = -erfc_inv(2.0 * p); - // result *= normal distribution standard deviation (1.0) * sqrt(2) - result *= /*sd * */ ROOT_TWO; - // result += normal disttribution mean (0) - return result; - } - - - double outlier_variance(Estimate mean, Estimate stddev, int n) { - double sb = stddev.point; - double mn = mean.point / n; - double mg_min = mn / 2.; - double sg = (std::min)(mg_min / 4., sb / std::sqrt(n)); - double sg2 = sg * sg; - double sb2 = sb * sb; - - auto c_max = [n, mn, sb2, sg2](double x) -> double { - double k = mn - x; - double d = k * k; - double nd = n * d; - double k0 = -n * nd; - double k1 = sb2 - n * sg2 + nd; - double det = k1 * k1 - 4 * sg2 * k0; - return static_cast(-2. * k0 / (k1 + std::sqrt(det))); - }; - - auto var_out = [n, sb2, sg2](double c) { - double nc = n - c; - return (nc / n) * (sb2 - nc * sg2); - }; - - return (std::min)(var_out(1), var_out((std::min)(c_max(0.), c_max(mg_min)))) / sb2; - } - - - bootstrap_analysis analyse_samples(double confidence_level, unsigned int n_resamples, std::vector::iterator first, std::vector::iterator last) { - CATCH_INTERNAL_START_WARNINGS_SUPPRESSION - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS - static std::random_device entropy; - CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION - - auto n = static_cast(last - first); // seriously, one can't use integral types without hell in C++ - - auto mean = &Detail::mean::iterator>; - auto stddev = &standard_deviation; - -#if defined(CATCH_CONFIG_USE_ASYNC) - auto Estimate = [=](double(*f)(std::vector::iterator, std::vector::iterator)) { - auto seed = entropy(); - return std::async(std::launch::async, [=] { - std::mt19937 rng(seed); - auto resampled = resample(rng, n_resamples, first, last, f); - return bootstrap(confidence_level, first, last, resampled, f); - }); - }; - - auto mean_future = Estimate(mean); - auto stddev_future = Estimate(stddev); - - auto mean_estimate = mean_future.get(); - auto stddev_estimate = stddev_future.get(); -#else - auto Estimate = [=](double(*f)(std::vector::iterator, std::vector::iterator)) { - auto seed = entropy(); - std::mt19937 rng(seed); - auto resampled = resample(rng, n_resamples, first, last, f); - return bootstrap(confidence_level, first, last, resampled, f); - }; - - auto mean_estimate = Estimate(mean); - auto stddev_estimate = Estimate(stddev); -#endif // CATCH_USE_ASYNC - - double outlier_variance = Detail::outlier_variance(mean_estimate, stddev_estimate, n); - - return { mean_estimate, stddev_estimate, outlier_variance }; - } - } // namespace Detail - } // namespace Benchmark -} // namespace Catch diff --git a/lib/Catch2/src/catch2/benchmark/detail/catch_stats.hpp b/lib/Catch2/src/catch2/benchmark/detail/catch_stats.hpp deleted file mode 100644 index 4c54ec5..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_stats.hpp +++ /dev/null @@ -1,144 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_STATS_HPP_INCLUDED -#define CATCH_STATS_HPP_INCLUDED - -#include -#include - -#include -#include -#include -#include -#include - -namespace Catch { - namespace Benchmark { - namespace Detail { - using sample = std::vector; - - // Used when we know we want == comparison of two doubles - // to centralize warning suppression - bool directCompare( double lhs, double rhs ); - - double weighted_average_quantile(int k, int q, std::vector::iterator first, std::vector::iterator last); - - template - OutlierClassification classify_outliers(Iterator first, Iterator last) { - std::vector copy(first, last); - - auto q1 = weighted_average_quantile(1, 4, copy.begin(), copy.end()); - auto q3 = weighted_average_quantile(3, 4, copy.begin(), copy.end()); - auto iqr = q3 - q1; - auto los = q1 - (iqr * 3.); - auto lom = q1 - (iqr * 1.5); - auto him = q3 + (iqr * 1.5); - auto his = q3 + (iqr * 3.); - - OutlierClassification o; - for (; first != last; ++first) { - auto&& t = *first; - if (t < los) ++o.low_severe; - else if (t < lom) ++o.low_mild; - else if (t > his) ++o.high_severe; - else if (t > him) ++o.high_mild; - ++o.samples_seen; - } - return o; - } - - template - double mean(Iterator first, Iterator last) { - auto count = last - first; - double sum = std::accumulate(first, last, 0.); - return sum / static_cast(count); - } - - template - sample jackknife(Estimator&& estimator, Iterator first, Iterator last) { - auto n = static_cast(last - first); - auto second = first; - ++second; - sample results; - results.reserve(n); - - for (auto it = first; it != last; ++it) { - std::iter_swap(it, first); - results.push_back(estimator(second, last)); - } - - return results; - } - - inline double normal_cdf(double x) { - return std::erfc(-x / std::sqrt(2.0)) / 2.0; - } - - double erfc_inv(double x); - - double normal_quantile(double p); - - template - Estimate bootstrap(double confidence_level, Iterator first, Iterator last, sample const& resample, Estimator&& estimator) { - auto n_samples = last - first; - - double point = estimator(first, last); - // Degenerate case with a single sample - if (n_samples == 1) return { point, point, point, confidence_level }; - - sample jack = jackknife(estimator, first, last); - double jack_mean = mean(jack.begin(), jack.end()); - double sum_squares, sum_cubes; - std::tie(sum_squares, sum_cubes) = std::accumulate(jack.begin(), jack.end(), std::make_pair(0., 0.), [jack_mean](std::pair sqcb, double x) -> std::pair { - auto d = jack_mean - x; - auto d2 = d * d; - auto d3 = d2 * d; - return { sqcb.first + d2, sqcb.second + d3 }; - }); - - double accel = sum_cubes / (6 * std::pow(sum_squares, 1.5)); - long n = static_cast(resample.size()); - double prob_n = std::count_if(resample.begin(), resample.end(), [point](double x) { return x < point; }) / static_cast(n); - // degenerate case with uniform samples - if ( directCompare( prob_n, 0. ) ) { - return { point, point, point, confidence_level }; - } - - double bias = normal_quantile(prob_n); - double z1 = normal_quantile((1. - confidence_level) / 2.); - - auto cumn = [n]( double x ) -> long { - return std::lround( normal_cdf( x ) * static_cast(n) ); - }; - auto a = [bias, accel](double b) { return bias + b / (1. - accel * b); }; - double b1 = bias + z1; - double b2 = bias - z1; - double a1 = a(b1); - double a2 = a(b2); - auto lo = static_cast((std::max)(cumn(a1), 0l)); - auto hi = static_cast((std::min)(cumn(a2), n - 1)); - - return { point, resample[lo], resample[hi], confidence_level }; - } - - double outlier_variance(Estimate mean, Estimate stddev, int n); - - struct bootstrap_analysis { - Estimate mean; - Estimate standard_deviation; - double outlier_variance; - }; - - bootstrap_analysis analyse_samples(double confidence_level, unsigned int n_resamples, std::vector::iterator first, std::vector::iterator last); - } // namespace Detail - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_STATS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/benchmark/detail/catch_timing.hpp b/lib/Catch2/src/catch2/benchmark/detail/catch_timing.hpp deleted file mode 100644 index f5c2557..0000000 --- a/lib/Catch2/src/catch2/benchmark/detail/catch_timing.hpp +++ /dev/null @@ -1,31 +0,0 @@ - -// 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 -// Adapted from donated nonius code. - -#ifndef CATCH_TIMING_HPP_INCLUDED -#define CATCH_TIMING_HPP_INCLUDED - -#include -#include - -#include - -namespace Catch { - namespace Benchmark { - template - struct Timing { - Duration elapsed; - Result result; - int iterations; - }; - template - using TimingOf = Timing, Detail::CompleteType_t>>; - } // namespace Benchmark -} // namespace Catch - -#endif // CATCH_TIMING_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_all.hpp b/lib/Catch2/src/catch2/catch_all.hpp deleted file mode 100644 index 1fc49ab..0000000 --- a/lib/Catch2/src/catch2/catch_all.hpp +++ /dev/null @@ -1,124 +0,0 @@ - -// 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 - * This is a convenience header for Catch2. It includes **all** of Catch2 headers. - * - * Generally the Catch2 users should use specific includes they need, - * but this header can be used instead for ease-of-experimentation, or - * just plain convenience, at the cost of (significantly) increased - * compilation times. - * - * When a new header is added to either the top level folder, or to the - * corresponding internal subfolder, it should be added here. Headers - * added to the various subparts (e.g. matchers, generators, etc...), - * should go their respective catch-all headers. - */ - -#ifndef CATCH_ALL_HPP_INCLUDED -#define CATCH_ALL_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#endif // CATCH_ALL_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_approx.cpp b/lib/Catch2/src/catch2/catch_approx.cpp deleted file mode 100644 index 407586d..0000000 --- a/lib/Catch2/src/catch2/catch_approx.cpp +++ /dev/null @@ -1,85 +0,0 @@ - -// 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 -#include -#include - -#include -#include - -namespace { - -// Performs equivalent check of std::fabs(lhs - rhs) <= margin -// But without the subtraction to allow for INFINITY in comparison -bool marginComparison(double lhs, double rhs, double margin) { - return (lhs + margin >= rhs) && (rhs + margin >= lhs); -} - -} - -namespace Catch { - - Approx::Approx ( double value ) - : m_epsilon( std::numeric_limits::epsilon()*100. ), - m_margin( 0.0 ), - m_scale( 0.0 ), - m_value( value ) - {} - - Approx Approx::custom() { - return Approx( 0 ); - } - - Approx Approx::operator-() const { - auto temp(*this); - temp.m_value = -temp.m_value; - return temp; - } - - - std::string Approx::toString() const { - ReusableStringStream rss; - rss << "Approx( " << ::Catch::Detail::stringify( m_value ) << " )"; - return rss.str(); - } - - bool Approx::equalityComparisonImpl(const double other) const { - // First try with fixed margin, then compute margin based on epsilon, scale and Approx's value - // Thanks to Richard Harris for his help refining the scaled margin value - return marginComparison(m_value, other, m_margin) - || marginComparison(m_value, other, m_epsilon * (m_scale + std::fabs(std::isinf(m_value)? 0 : m_value))); - } - - void Approx::setMargin(double newMargin) { - CATCH_ENFORCE(newMargin >= 0, - "Invalid Approx::margin: " << newMargin << '.' - << " Approx::Margin has to be non-negative."); - m_margin = newMargin; - } - - void Approx::setEpsilon(double newEpsilon) { - CATCH_ENFORCE(newEpsilon >= 0 && newEpsilon <= 1.0, - "Invalid Approx::epsilon: " << newEpsilon << '.' - << " Approx::epsilon has to be in [0, 1]"); - m_epsilon = newEpsilon; - } - -namespace literals { - Approx operator "" _a(long double val) { - return Approx(val); - } - Approx operator "" _a(unsigned long long val) { - return Approx(val); - } -} // end namespace literals - -std::string StringMaker::convert(Catch::Approx const& value) { - return value.toString(); -} - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/catch_approx.hpp b/lib/Catch2/src/catch2/catch_approx.hpp deleted file mode 100644 index de4d2ab..0000000 --- a/lib/Catch2/src/catch2/catch_approx.hpp +++ /dev/null @@ -1,128 +0,0 @@ - -// 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 -#ifndef CATCH_APPROX_HPP_INCLUDED -#define CATCH_APPROX_HPP_INCLUDED - -#include - -#include - -namespace Catch { - - class Approx { - private: - bool equalityComparisonImpl(double other) const; - // Sets and validates the new margin (margin >= 0) - void setMargin(double margin); - // Sets and validates the new epsilon (0 < epsilon < 1) - void setEpsilon(double epsilon); - - public: - explicit Approx ( double value ); - - static Approx custom(); - - Approx operator-() const; - - template ::value>> - Approx operator()( T const& value ) const { - Approx approx( static_cast(value) ); - approx.m_epsilon = m_epsilon; - approx.m_margin = m_margin; - approx.m_scale = m_scale; - return approx; - } - - template ::value>> - explicit Approx( T const& value ): Approx(static_cast(value)) - {} - - - template ::value>> - friend bool operator == ( const T& lhs, Approx const& rhs ) { - auto lhs_v = static_cast(lhs); - return rhs.equalityComparisonImpl(lhs_v); - } - - template ::value>> - friend bool operator == ( Approx const& lhs, const T& rhs ) { - return operator==( rhs, lhs ); - } - - template ::value>> - friend bool operator != ( T const& lhs, Approx const& rhs ) { - return !operator==( lhs, rhs ); - } - - template ::value>> - friend bool operator != ( Approx const& lhs, T const& rhs ) { - return !operator==( rhs, lhs ); - } - - template ::value>> - friend bool operator <= ( T const& lhs, Approx const& rhs ) { - return static_cast(lhs) < rhs.m_value || lhs == rhs; - } - - template ::value>> - friend bool operator <= ( Approx const& lhs, T const& rhs ) { - return lhs.m_value < static_cast(rhs) || lhs == rhs; - } - - template ::value>> - friend bool operator >= ( T const& lhs, Approx const& rhs ) { - return static_cast(lhs) > rhs.m_value || lhs == rhs; - } - - template ::value>> - friend bool operator >= ( Approx const& lhs, T const& rhs ) { - return lhs.m_value > static_cast(rhs) || lhs == rhs; - } - - template ::value>> - Approx& epsilon( T const& newEpsilon ) { - const auto epsilonAsDouble = static_cast(newEpsilon); - setEpsilon(epsilonAsDouble); - return *this; - } - - template ::value>> - Approx& margin( T const& newMargin ) { - const auto marginAsDouble = static_cast(newMargin); - setMargin(marginAsDouble); - return *this; - } - - template ::value>> - Approx& scale( T const& newScale ) { - m_scale = static_cast(newScale); - return *this; - } - - std::string toString() const; - - private: - double m_epsilon; - double m_margin; - double m_scale; - double m_value; - }; - -namespace literals { - Approx operator ""_a(long double val); - Approx operator ""_a(unsigned long long val); -} // end namespace literals - -template<> -struct StringMaker { - static std::string convert(Catch::Approx const& value); -}; - -} // end namespace Catch - -#endif // CATCH_APPROX_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_assertion_info.hpp b/lib/Catch2/src/catch2/catch_assertion_info.hpp deleted file mode 100644 index 9d2f91f..0000000 --- a/lib/Catch2/src/catch2/catch_assertion_info.hpp +++ /dev/null @@ -1,28 +0,0 @@ - -// 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 -#ifndef CATCH_ASSERTION_INFO_HPP_INCLUDED -#define CATCH_ASSERTION_INFO_HPP_INCLUDED - -#include -#include -#include - -namespace Catch { - - struct AssertionInfo { - // AssertionInfo() = delete; - - StringRef macroName; - SourceLineInfo lineInfo; - StringRef capturedExpression; - ResultDisposition::Flags resultDisposition; - }; - -} // end namespace Catch - -#endif // CATCH_ASSERTION_INFO_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_assertion_result.cpp b/lib/Catch2/src/catch2/catch_assertion_result.cpp deleted file mode 100644 index 5b5d329..0000000 --- a/lib/Catch2/src/catch2/catch_assertion_result.cpp +++ /dev/null @@ -1,105 +0,0 @@ - -// 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 -#include - -namespace Catch { - - AssertionResultData::AssertionResultData(ResultWas::OfType _resultType, LazyExpression const & _lazyExpression): - lazyExpression(_lazyExpression), - resultType(_resultType) {} - - std::string AssertionResultData::reconstructExpression() const { - - if( reconstructedExpression.empty() ) { - if( lazyExpression ) { - ReusableStringStream rss; - rss << lazyExpression; - reconstructedExpression = rss.str(); - } - } - return reconstructedExpression; - } - - AssertionResult::AssertionResult( AssertionInfo const& info, AssertionResultData const& data ) - : m_info( info ), - m_resultData( data ) - {} - - // Result was a success - bool AssertionResult::succeeded() const { - return Catch::isOk( m_resultData.resultType ); - } - - // Result was a success, or failure is suppressed - bool AssertionResult::isOk() const { - return Catch::isOk( m_resultData.resultType ) || shouldSuppressFailure( m_info.resultDisposition ); - } - - ResultWas::OfType AssertionResult::getResultType() const { - return m_resultData.resultType; - } - - bool AssertionResult::hasExpression() const { - return !m_info.capturedExpression.empty(); - } - - bool AssertionResult::hasMessage() const { - return !m_resultData.message.empty(); - } - - std::string AssertionResult::getExpression() const { - // Possibly overallocating by 3 characters should be basically free - std::string expr; expr.reserve(m_info.capturedExpression.size() + 3); - if (isFalseTest(m_info.resultDisposition)) { - expr += "!("; - } - expr += m_info.capturedExpression; - if (isFalseTest(m_info.resultDisposition)) { - expr += ')'; - } - return expr; - } - - std::string AssertionResult::getExpressionInMacro() const { - std::string expr; - if( m_info.macroName.empty() ) - expr = static_cast(m_info.capturedExpression); - else { - expr.reserve( m_info.macroName.size() + m_info.capturedExpression.size() + 4 ); - expr += m_info.macroName; - expr += "( "; - expr += m_info.capturedExpression; - expr += " )"; - } - return expr; - } - - bool AssertionResult::hasExpandedExpression() const { - return hasExpression() && getExpandedExpression() != getExpression(); - } - - std::string AssertionResult::getExpandedExpression() const { - std::string expr = m_resultData.reconstructExpression(); - return expr.empty() - ? getExpression() - : expr; - } - - StringRef AssertionResult::getMessage() const { - return m_resultData.message; - } - SourceLineInfo AssertionResult::getSourceInfo() const { - return m_info.lineInfo; - } - - StringRef AssertionResult::getTestMacroName() const { - return m_info.macroName; - } - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/catch_assertion_result.hpp b/lib/Catch2/src/catch2/catch_assertion_result.hpp deleted file mode 100644 index 6829e2f..0000000 --- a/lib/Catch2/src/catch2/catch_assertion_result.hpp +++ /dev/null @@ -1,60 +0,0 @@ - -// 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 -#ifndef CATCH_ASSERTION_RESULT_HPP_INCLUDED -#define CATCH_ASSERTION_RESULT_HPP_INCLUDED - -#include -#include -#include -#include -#include - -#include - -namespace Catch { - - struct AssertionResultData - { - AssertionResultData() = delete; - - AssertionResultData( ResultWas::OfType _resultType, LazyExpression const& _lazyExpression ); - - std::string message; - mutable std::string reconstructedExpression; - LazyExpression lazyExpression; - ResultWas::OfType resultType; - - std::string reconstructExpression() const; - }; - - class AssertionResult { - public: - AssertionResult() = delete; - AssertionResult( AssertionInfo const& info, AssertionResultData const& data ); - - bool isOk() const; - bool succeeded() const; - ResultWas::OfType getResultType() const; - bool hasExpression() const; - bool hasMessage() const; - std::string getExpression() const; - std::string getExpressionInMacro() const; - bool hasExpandedExpression() const; - std::string getExpandedExpression() const; - StringRef getMessage() const; - SourceLineInfo getSourceInfo() const; - StringRef getTestMacroName() const; - - //protected: - AssertionInfo m_info; - AssertionResultData m_resultData; - }; - -} // end namespace Catch - -#endif // CATCH_ASSERTION_RESULT_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_config.cpp b/lib/Catch2/src/catch2/catch_config.cpp deleted file mode 100644 index eb4f5ad..0000000 --- a/lib/Catch2/src/catch2/catch_config.cpp +++ /dev/null @@ -1,247 +0,0 @@ - -// 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace Catch { - - namespace { - static bool enableBazelEnvSupport() { -#if defined( CATCH_CONFIG_BAZEL_SUPPORT ) - return true; -#else - return Detail::getEnv( "BAZEL_TEST" ) != nullptr; -#endif - } - - struct bazelShardingOptions { - unsigned int shardIndex, shardCount; - std::string shardFilePath; - }; - - static Optional readBazelShardingOptions() { - const auto bazelShardIndex = Detail::getEnv( "TEST_SHARD_INDEX" ); - const auto bazelShardTotal = Detail::getEnv( "TEST_TOTAL_SHARDS" ); - const auto bazelShardInfoFile = Detail::getEnv( "TEST_SHARD_STATUS_FILE" ); - - - const bool has_all = - bazelShardIndex && bazelShardTotal && bazelShardInfoFile; - if ( !has_all ) { - // We provide nice warning message if the input is - // misconfigured. - auto warn = []( const char* env_var ) { - Catch::cerr() - << "Warning: Bazel shard configuration is missing '" - << env_var << "'. Shard configuration is skipped.\n"; - }; - if ( !bazelShardIndex ) { - warn( "TEST_SHARD_INDEX" ); - } - if ( !bazelShardTotal ) { - warn( "TEST_TOTAL_SHARDS" ); - } - if ( !bazelShardInfoFile ) { - warn( "TEST_SHARD_STATUS_FILE" ); - } - return {}; - } - - auto shardIndex = parseUInt( bazelShardIndex ); - if ( !shardIndex ) { - Catch::cerr() - << "Warning: could not parse 'TEST_SHARD_INDEX' ('" << bazelShardIndex - << "') as unsigned int.\n"; - return {}; - } - auto shardTotal = parseUInt( bazelShardTotal ); - if ( !shardTotal ) { - Catch::cerr() - << "Warning: could not parse 'TEST_TOTAL_SHARD' ('" - << bazelShardTotal << "') as unsigned int.\n"; - return {}; - } - - return bazelShardingOptions{ - *shardIndex, *shardTotal, bazelShardInfoFile }; - - } - } // end namespace - - - bool operator==( ProcessedReporterSpec const& lhs, - ProcessedReporterSpec const& rhs ) { - return lhs.name == rhs.name && - lhs.outputFilename == rhs.outputFilename && - lhs.colourMode == rhs.colourMode && - lhs.customOptions == rhs.customOptions; - } - - Config::Config( ConfigData const& data ): - m_data( data ) { - // We need to trim filter specs to avoid trouble with superfluous - // whitespace (esp. important for bdd macros, as those are manually - // aligned with whitespace). - - for (auto& elem : m_data.testsOrTags) { - elem = trim(elem); - } - for (auto& elem : m_data.sectionsToRun) { - elem = trim(elem); - } - - // Insert the default reporter if user hasn't asked for a specfic one - if ( m_data.reporterSpecifications.empty() ) { - m_data.reporterSpecifications.push_back( { -#if defined( CATCH_CONFIG_DEFAULT_REPORTER ) - CATCH_CONFIG_DEFAULT_REPORTER, -#else - "console", -#endif - {}, {}, {} - } ); - } - - if ( enableBazelEnvSupport() ) { - readBazelEnvVars(); - } - - // Bazel support can modify the test specs, so parsing has to happen - // after reading Bazel env vars. - TestSpecParser parser( ITagAliasRegistry::get() ); - if ( !m_data.testsOrTags.empty() ) { - m_hasTestFilters = true; - for ( auto const& testOrTags : m_data.testsOrTags ) { - parser.parse( testOrTags ); - } - } - m_testSpec = parser.testSpec(); - - - // We now fixup the reporter specs to handle default output spec, - // default colour spec, etc - bool defaultOutputUsed = false; - for ( auto const& reporterSpec : m_data.reporterSpecifications ) { - // We do the default-output check separately, while always - // using the default output below to make the code simpler - // and avoid superfluous copies. - if ( reporterSpec.outputFile().none() ) { - CATCH_ENFORCE( !defaultOutputUsed, - "Internal error: cannot use default output for " - "multiple reporters" ); - defaultOutputUsed = true; - } - - m_processedReporterSpecs.push_back( ProcessedReporterSpec{ - reporterSpec.name(), - reporterSpec.outputFile() ? *reporterSpec.outputFile() - : data.defaultOutputFilename, - reporterSpec.colourMode().valueOr( data.defaultColourMode ), - reporterSpec.customOptions() } ); - } - } - - Config::~Config() = default; - - - bool Config::listTests() const { return m_data.listTests; } - bool Config::listTags() const { return m_data.listTags; } - bool Config::listReporters() const { return m_data.listReporters; } - bool Config::listListeners() const { return m_data.listListeners; } - - std::vector const& Config::getTestsOrTags() const { return m_data.testsOrTags; } - std::vector const& Config::getSectionsToRun() const { return m_data.sectionsToRun; } - - std::vector const& Config::getReporterSpecs() const { - return m_data.reporterSpecifications; - } - - std::vector const& - Config::getProcessedReporterSpecs() const { - return m_processedReporterSpecs; - } - - TestSpec const& Config::testSpec() const { return m_testSpec; } - bool Config::hasTestFilters() const { return m_hasTestFilters; } - - bool Config::showHelp() const { return m_data.showHelp; } - - // IConfig interface - bool Config::allowThrows() const { return !m_data.noThrow; } - StringRef Config::name() const { return m_data.name.empty() ? m_data.processName : m_data.name; } - bool Config::includeSuccessfulResults() const { return m_data.showSuccessfulTests; } - bool Config::warnAboutMissingAssertions() const { - return !!( m_data.warnings & WarnAbout::NoAssertions ); - } - bool Config::warnAboutUnmatchedTestSpecs() const { - return !!( m_data.warnings & WarnAbout::UnmatchedTestSpec ); - } - bool Config::zeroTestsCountAsSuccess() const { return m_data.allowZeroTests; } - ShowDurations Config::showDurations() const { return m_data.showDurations; } - double Config::minDuration() const { return m_data.minDuration; } - TestRunOrder Config::runOrder() const { return m_data.runOrder; } - uint32_t Config::rngSeed() const { return m_data.rngSeed; } - unsigned int Config::shardCount() const { return m_data.shardCount; } - unsigned int Config::shardIndex() const { return m_data.shardIndex; } - ColourMode Config::defaultColourMode() const { return m_data.defaultColourMode; } - bool Config::shouldDebugBreak() const { return m_data.shouldDebugBreak; } - int Config::abortAfter() const { return m_data.abortAfter; } - bool Config::showInvisibles() const { return m_data.showInvisibles; } - Verbosity Config::verbosity() const { return m_data.verbosity; } - - bool Config::skipBenchmarks() const { return m_data.skipBenchmarks; } - bool Config::benchmarkNoAnalysis() const { return m_data.benchmarkNoAnalysis; } - unsigned int Config::benchmarkSamples() const { return m_data.benchmarkSamples; } - double Config::benchmarkConfidenceInterval() const { return m_data.benchmarkConfidenceInterval; } - unsigned int Config::benchmarkResamples() const { return m_data.benchmarkResamples; } - std::chrono::milliseconds Config::benchmarkWarmupTime() const { return std::chrono::milliseconds(m_data.benchmarkWarmupTime); } - - void Config::readBazelEnvVars() { - // Register a JUnit reporter for Bazel. Bazel sets an environment - // variable with the path to XML output. If this file is written to - // during test, Bazel will not generate a default XML output. - // This allows the XML output file to contain higher level of detail - // than what is possible otherwise. - const auto bazelOutputFile = Detail::getEnv( "XML_OUTPUT_FILE" ); - - if ( bazelOutputFile ) { - m_data.reporterSpecifications.push_back( - { "junit", std::string( bazelOutputFile ), {}, {} } ); - } - - const auto bazelTestSpec = Detail::getEnv( "TESTBRIDGE_TEST_ONLY" ); - if ( bazelTestSpec ) { - // Presumably the test spec from environment should overwrite - // the one we got from CLI (if we got any) - m_data.testsOrTags.clear(); - m_data.testsOrTags.push_back( bazelTestSpec ); - } - - const auto bazelShardOptions = readBazelShardingOptions(); - if ( bazelShardOptions ) { - std::ofstream f( bazelShardOptions->shardFilePath, - std::ios_base::out | std::ios_base::trunc ); - if ( f.is_open() ) { - f << ""; - m_data.shardIndex = bazelShardOptions->shardIndex; - m_data.shardCount = bazelShardOptions->shardCount; - } - } - } - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/catch_config.hpp b/lib/Catch2/src/catch2/catch_config.hpp deleted file mode 100644 index 784de4a..0000000 --- a/lib/Catch2/src/catch2/catch_config.hpp +++ /dev/null @@ -1,153 +0,0 @@ - -// 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 -#ifndef CATCH_CONFIG_HPP_INCLUDED -#define CATCH_CONFIG_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace Catch { - - class IStream; - - /** - * `ReporterSpec` but with the defaults filled in. - * - * Like `ReporterSpec`, the semantics are unchecked. - */ - struct ProcessedReporterSpec { - std::string name; - std::string outputFilename; - ColourMode colourMode; - std::map customOptions; - friend bool operator==( ProcessedReporterSpec const& lhs, - ProcessedReporterSpec const& rhs ); - friend bool operator!=( ProcessedReporterSpec const& lhs, - ProcessedReporterSpec const& rhs ) { - return !( lhs == rhs ); - } - }; - - struct ConfigData { - - bool listTests = false; - bool listTags = false; - bool listReporters = false; - bool listListeners = false; - - bool showSuccessfulTests = false; - bool shouldDebugBreak = false; - bool noThrow = false; - bool showHelp = false; - bool showInvisibles = false; - bool filenamesAsTags = false; - bool libIdentify = false; - bool allowZeroTests = false; - - int abortAfter = -1; - uint32_t rngSeed = generateRandomSeed(GenerateFrom::Default); - - unsigned int shardCount = 1; - unsigned int shardIndex = 0; - - bool skipBenchmarks = false; - bool benchmarkNoAnalysis = false; - unsigned int benchmarkSamples = 100; - double benchmarkConfidenceInterval = 0.95; - unsigned int benchmarkResamples = 100000; - std::chrono::milliseconds::rep benchmarkWarmupTime = 100; - - Verbosity verbosity = Verbosity::Normal; - WarnAbout::What warnings = WarnAbout::Nothing; - ShowDurations showDurations = ShowDurations::DefaultForReporter; - double minDuration = -1; - TestRunOrder runOrder = TestRunOrder::Declared; - ColourMode defaultColourMode = ColourMode::PlatformDefault; - WaitForKeypress::When waitForKeypress = WaitForKeypress::Never; - - std::string defaultOutputFilename; - std::string name; - std::string processName; - std::vector reporterSpecifications; - - std::vector testsOrTags; - std::vector sectionsToRun; - }; - - - class Config : public IConfig { - public: - - Config() = default; - Config( ConfigData const& data ); - ~Config() override; // = default in the cpp file - - bool listTests() const; - bool listTags() const; - bool listReporters() const; - bool listListeners() const; - - std::vector const& getReporterSpecs() const; - std::vector const& - getProcessedReporterSpecs() const; - - std::vector const& getTestsOrTags() const override; - std::vector const& getSectionsToRun() const override; - - TestSpec const& testSpec() const override; - bool hasTestFilters() const override; - - bool showHelp() const; - - // IConfig interface - bool allowThrows() const override; - StringRef name() const override; - bool includeSuccessfulResults() const override; - bool warnAboutMissingAssertions() const override; - bool warnAboutUnmatchedTestSpecs() const override; - bool zeroTestsCountAsSuccess() const override; - ShowDurations showDurations() const override; - double minDuration() const override; - TestRunOrder runOrder() const override; - uint32_t rngSeed() const override; - unsigned int shardCount() const override; - unsigned int shardIndex() const override; - ColourMode defaultColourMode() const override; - bool shouldDebugBreak() const override; - int abortAfter() const override; - bool showInvisibles() const override; - Verbosity verbosity() const override; - bool skipBenchmarks() const override; - bool benchmarkNoAnalysis() const override; - unsigned int benchmarkSamples() const override; - double benchmarkConfidenceInterval() const override; - unsigned int benchmarkResamples() const override; - std::chrono::milliseconds benchmarkWarmupTime() const override; - - private: - // Reads Bazel env vars and applies them to the config - void readBazelEnvVars(); - - ConfigData m_data; - std::vector m_processedReporterSpecs; - TestSpec m_testSpec; - bool m_hasTestFilters = false; - }; -} // end namespace Catch - -#endif // CATCH_CONFIG_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_get_random_seed.cpp b/lib/Catch2/src/catch2/catch_get_random_seed.cpp deleted file mode 100644 index b122516..0000000 --- a/lib/Catch2/src/catch2/catch_get_random_seed.cpp +++ /dev/null @@ -1,18 +0,0 @@ - -// 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 - -#include -#include - -namespace Catch { - std::uint32_t getSeed() { - return getCurrentContext().getConfig()->rngSeed(); - } -} diff --git a/lib/Catch2/src/catch2/catch_get_random_seed.hpp b/lib/Catch2/src/catch2/catch_get_random_seed.hpp deleted file mode 100644 index 3ab2a4a..0000000 --- a/lib/Catch2/src/catch2/catch_get_random_seed.hpp +++ /dev/null @@ -1,18 +0,0 @@ - -// 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 -#ifndef CATCH_GET_RANDOM_SEED_HPP_INCLUDED -#define CATCH_GET_RANDOM_SEED_HPP_INCLUDED - -#include - -namespace Catch { - //! Returns Catch2's current RNG seed. - std::uint32_t getSeed(); -} - -#endif // CATCH_GET_RANDOM_SEED_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_message.cpp b/lib/Catch2/src/catch2/catch_message.cpp deleted file mode 100644 index 4ab6ecf..0000000 --- a/lib/Catch2/src/catch2/catch_message.cpp +++ /dev/null @@ -1,112 +0,0 @@ - -// 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 -#include -#include -#include -#include - -#include -#include - -namespace Catch { - - //////////////////////////////////////////////////////////////////////////// - - - ScopedMessage::ScopedMessage( MessageBuilder const& builder ): - m_info( builder.m_info ) { - m_info.message = builder.m_stream.str(); - getResultCapture().pushScopedMessage( m_info ); - } - - ScopedMessage::ScopedMessage( ScopedMessage&& old ) noexcept: - m_info( CATCH_MOVE( old.m_info ) ) { - old.m_moved = true; - } - - ScopedMessage::~ScopedMessage() { - if ( !uncaught_exceptions() && !m_moved ){ - getResultCapture().popScopedMessage(m_info); - } - } - - - Capturer::Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names ) { - auto trimmed = [&] (size_t start, size_t end) { - while (names[start] == ',' || isspace(static_cast(names[start]))) { - ++start; - } - while (names[end] == ',' || isspace(static_cast(names[end]))) { - --end; - } - return names.substr(start, end - start + 1); - }; - auto skipq = [&] (size_t start, char quote) { - for (auto i = start + 1; i < names.size() ; ++i) { - if (names[i] == quote) - return i; - if (names[i] == '\\') - ++i; - } - CATCH_INTERNAL_ERROR("CAPTURE parsing encountered unmatched quote"); - }; - - size_t start = 0; - std::stack openings; - for (size_t pos = 0; pos < names.size(); ++pos) { - char c = names[pos]; - switch (c) { - case '[': - case '{': - case '(': - // It is basically impossible to disambiguate between - // comparison and start of template args in this context -// case '<': - openings.push(c); - break; - case ']': - case '}': - case ')': -// case '>': - openings.pop(); - break; - case '"': - case '\'': - pos = skipq(pos, c); - break; - case ',': - if (start != pos && openings.empty()) { - m_messages.emplace_back(macroName, lineInfo, resultType); - m_messages.back().message = static_cast(trimmed(start, pos)); - m_messages.back().message += " := "; - start = pos; - } - } - } - assert(openings.empty() && "Mismatched openings"); - m_messages.emplace_back(macroName, lineInfo, resultType); - m_messages.back().message = static_cast(trimmed(start, names.size() - 1)); - m_messages.back().message += " := "; - } - Capturer::~Capturer() { - if ( !uncaught_exceptions() ){ - assert( m_captured == m_messages.size() ); - for( size_t i = 0; i < m_captured; ++i ) - m_resultCapture.popScopedMessage( m_messages[i] ); - } - } - - void Capturer::captureValue( size_t index, std::string const& value ) { - assert( index < m_messages.size() ); - m_messages[index].message += value; - m_resultCapture.pushScopedMessage( m_messages[index] ); - m_captured++; - } - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/catch_message.hpp b/lib/Catch2/src/catch2/catch_message.hpp deleted file mode 100644 index 4f71f22..0000000 --- a/lib/Catch2/src/catch2/catch_message.hpp +++ /dev/null @@ -1,146 +0,0 @@ - -// 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 -#ifndef CATCH_MESSAGE_HPP_INCLUDED -#define CATCH_MESSAGE_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace Catch { - - struct SourceLineInfo; - - struct MessageStream { - - template - MessageStream& operator << ( T const& value ) { - m_stream << value; - return *this; - } - - ReusableStringStream m_stream; - }; - - struct MessageBuilder : MessageStream { - MessageBuilder( StringRef macroName, - SourceLineInfo const& lineInfo, - ResultWas::OfType type ): - m_info(macroName, lineInfo, type) {} - - - template - MessageBuilder& operator << ( T const& value ) { - m_stream << value; - return *this; - } - - MessageInfo m_info; - }; - - class ScopedMessage { - public: - explicit ScopedMessage( MessageBuilder const& builder ); - ScopedMessage( ScopedMessage& duplicate ) = delete; - ScopedMessage( ScopedMessage&& old ) noexcept; - ~ScopedMessage(); - - MessageInfo m_info; - bool m_moved = false; - }; - - class Capturer { - std::vector m_messages; - IResultCapture& m_resultCapture = getResultCapture(); - size_t m_captured = 0; - public: - Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names ); - - Capturer(Capturer const&) = delete; - Capturer& operator=(Capturer const&) = delete; - - ~Capturer(); - - void captureValue( size_t index, std::string const& value ); - - template - void captureValues( size_t index, T const& value ) { - captureValue( index, Catch::Detail::stringify( value ) ); - } - - template - void captureValues( size_t index, T const& value, Ts const&... values ) { - captureValue( index, Catch::Detail::stringify(value) ); - captureValues( index+1, values... ); - } - }; - -} // end namespace Catch - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_MSG( macroName, messageType, resultDisposition, ... ) \ - do { \ - Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::StringRef(), resultDisposition ); \ - catchAssertionHandler.handleMessage( messageType, ( Catch::MessageStream() << __VA_ARGS__ + ::Catch::StreamEndStop() ).m_stream.str() ); \ - INTERNAL_CATCH_REACT( catchAssertionHandler ) \ - } while( false ) - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_CAPTURE( varName, macroName, ... ) \ - Catch::Capturer varName( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info, #__VA_ARGS__ ); \ - varName.captureValues( 0, __VA_ARGS__ ) - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_INFO( macroName, log ) \ - const Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage )( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log ) - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_UNSCOPED_INFO( macroName, log ) \ - Catch::getResultCapture().emplaceUnscopedMessage( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log ) - - -#if defined(CATCH_CONFIG_PREFIX_ALL) && !defined(CATCH_CONFIG_DISABLE) - - #define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( "CATCH_INFO", msg ) - #define CATCH_UNSCOPED_INFO( msg ) INTERNAL_CATCH_UNSCOPED_INFO( "CATCH_UNSCOPED_INFO", msg ) - #define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( "CATCH_WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg ) - #define CATCH_CAPTURE( ... ) INTERNAL_CATCH_CAPTURE( INTERNAL_CATCH_UNIQUE_NAME(capturer), "CATCH_CAPTURE", __VA_ARGS__ ) - -#elif defined(CATCH_CONFIG_PREFIX_ALL) && defined(CATCH_CONFIG_DISABLE) - - #define CATCH_INFO( msg ) (void)(0) - #define CATCH_UNSCOPED_INFO( msg ) (void)(0) - #define CATCH_WARN( msg ) (void)(0) - #define CATCH_CAPTURE( ... ) (void)(0) - -#elif !defined(CATCH_CONFIG_PREFIX_ALL) && !defined(CATCH_CONFIG_DISABLE) - - #define INFO( msg ) INTERNAL_CATCH_INFO( "INFO", msg ) - #define UNSCOPED_INFO( msg ) INTERNAL_CATCH_UNSCOPED_INFO( "UNSCOPED_INFO", msg ) - #define WARN( msg ) INTERNAL_CATCH_MSG( "WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg ) - #define CAPTURE( ... ) INTERNAL_CATCH_CAPTURE( INTERNAL_CATCH_UNIQUE_NAME(capturer), "CAPTURE", __VA_ARGS__ ) - -#elif !defined(CATCH_CONFIG_PREFIX_ALL) && defined(CATCH_CONFIG_DISABLE) - - #define INFO( msg ) (void)(0) - #define UNSCOPED_INFO( msg ) (void)(0) - #define WARN( msg ) (void)(0) - #define CAPTURE( ... ) (void)(0) - -#endif // end of user facing macro declarations - - - - -#endif // CATCH_MESSAGE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_registry_hub.cpp b/lib/Catch2/src/catch2/catch_registry_hub.cpp deleted file mode 100644 index 243dd2b..0000000 --- a/lib/Catch2/src/catch2/catch_registry_hub.cpp +++ /dev/null @@ -1,104 +0,0 @@ - -// 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 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Catch { - - namespace { - - class RegistryHub : public IRegistryHub, - public IMutableRegistryHub, - private Detail::NonCopyable { - - public: // IRegistryHub - RegistryHub() = default; - IReporterRegistry const& getReporterRegistry() const override { - return m_reporterRegistry; - } - ITestCaseRegistry const& getTestCaseRegistry() const override { - return m_testCaseRegistry; - } - IExceptionTranslatorRegistry const& getExceptionTranslatorRegistry() const override { - return m_exceptionTranslatorRegistry; - } - ITagAliasRegistry const& getTagAliasRegistry() const override { - return m_tagAliasRegistry; - } - StartupExceptionRegistry const& getStartupExceptionRegistry() const override { - return m_exceptionRegistry; - } - - public: // IMutableRegistryHub - void registerReporter( std::string const& name, IReporterFactoryPtr factory ) override { - m_reporterRegistry.registerReporter( name, CATCH_MOVE(factory) ); - } - void registerListener( Detail::unique_ptr factory ) override { - m_reporterRegistry.registerListener( CATCH_MOVE(factory) ); - } - void registerTest( Detail::unique_ptr&& testInfo, Detail::unique_ptr&& invoker ) override { - m_testCaseRegistry.registerTest( CATCH_MOVE(testInfo), CATCH_MOVE(invoker) ); - } - void registerTranslator( Detail::unique_ptr&& translator ) override { - m_exceptionTranslatorRegistry.registerTranslator( CATCH_MOVE(translator) ); - } - void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) override { - m_tagAliasRegistry.add( alias, tag, lineInfo ); - } - void registerStartupException() noexcept override { -#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) - m_exceptionRegistry.add(std::current_exception()); -#else - CATCH_INTERNAL_ERROR("Attempted to register active exception under CATCH_CONFIG_DISABLE_EXCEPTIONS!"); -#endif - } - IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() override { - return m_enumValuesRegistry; - } - - private: - TestRegistry m_testCaseRegistry; - ReporterRegistry m_reporterRegistry; - ExceptionTranslatorRegistry m_exceptionTranslatorRegistry; - TagAliasRegistry m_tagAliasRegistry; - StartupExceptionRegistry m_exceptionRegistry; - Detail::EnumValuesRegistry m_enumValuesRegistry; - }; - } - - using RegistryHubSingleton = Singleton; - - IRegistryHub const& getRegistryHub() { - return RegistryHubSingleton::get(); - } - IMutableRegistryHub& getMutableRegistryHub() { - return RegistryHubSingleton::getMutable(); - } - void cleanUp() { - cleanupSingletons(); - cleanUpContext(); - } - std::string translateActiveException() { - return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException(); - } - - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/catch_section_info.hpp b/lib/Catch2/src/catch2/catch_section_info.hpp deleted file mode 100644 index 7de8441..0000000 --- a/lib/Catch2/src/catch2/catch_section_info.hpp +++ /dev/null @@ -1,42 +0,0 @@ - -// 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 -#ifndef CATCH_SECTION_INFO_HPP_INCLUDED -#define CATCH_SECTION_INFO_HPP_INCLUDED - -#include -#include -#include -#include - -#include - -namespace Catch { - - struct SectionInfo { - // The last argument is ignored, so that people can write - // SECTION("ShortName", "Proper description that is long") and - // still use the `-c` flag comfortably. - SectionInfo( SourceLineInfo const& _lineInfo, std::string _name, - const char* const = nullptr ): - name(CATCH_MOVE(_name)), - lineInfo(_lineInfo) - {} - - std::string name; - SourceLineInfo lineInfo; - }; - - struct SectionEndInfo { - SectionInfo sectionInfo; - Counts prevAssertions; - double durationInSeconds; - }; - -} // end namespace Catch - -#endif // CATCH_SECTION_INFO_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_session.cpp b/lib/Catch2/src/catch2/catch_session.cpp deleted file mode 100644 index 128f21d..0000000 --- a/lib/Catch2/src/catch2/catch_session.cpp +++ /dev/null @@ -1,357 +0,0 @@ - -// 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace Catch { - - namespace { - const int MaxExitCode = 255; - - IEventListenerPtr createReporter(std::string const& reporterName, ReporterConfig&& config) { - auto reporter = Catch::getRegistryHub().getReporterRegistry().create(reporterName, CATCH_MOVE(config)); - CATCH_ENFORCE(reporter, "No reporter registered with name: '" << reporterName << '\''); - - return reporter; - } - - IEventListenerPtr prepareReporters(Config const* config) { - if (Catch::getRegistryHub().getReporterRegistry().getListeners().empty() - && config->getProcessedReporterSpecs().size() == 1) { - auto const& spec = config->getProcessedReporterSpecs()[0]; - return createReporter( - spec.name, - ReporterConfig( config, - makeStream( spec.outputFilename ), - spec.colourMode, - spec.customOptions ) ); - } - - auto multi = Detail::make_unique(config); - - auto const& listeners = Catch::getRegistryHub().getReporterRegistry().getListeners(); - for (auto const& listener : listeners) { - multi->addListener(listener->create(config)); - } - - for ( auto const& reporterSpec : config->getProcessedReporterSpecs() ) { - multi->addReporter( createReporter( - reporterSpec.name, - ReporterConfig( config, - makeStream( reporterSpec.outputFilename ), - reporterSpec.colourMode, - reporterSpec.customOptions ) ) ); - } - - return multi; - } - - class TestGroup { - public: - explicit TestGroup(IEventListenerPtr&& reporter, Config const* config): - m_reporter(reporter.get()), - m_config{config}, - m_context{config, CATCH_MOVE(reporter)} { - - assert( m_config->testSpec().getInvalidSpecs().empty() && - "Invalid test specs should be handled before running tests" ); - - auto const& allTestCases = getAllTestCasesSorted(*m_config); - auto const& testSpec = m_config->testSpec(); - if ( !testSpec.hasFilters() ) { - for ( auto const& test : allTestCases ) { - if ( !test.getTestCaseInfo().isHidden() ) { - m_tests.emplace( &test ); - } - } - } else { - m_matches = - testSpec.matchesByFilter( allTestCases, *m_config ); - for ( auto const& match : m_matches ) { - m_tests.insert( match.tests.begin(), - match.tests.end() ); - } - } - - m_tests = createShard(m_tests, m_config->shardCount(), m_config->shardIndex()); - } - - Totals execute() { - Totals totals; - for (auto const& testCase : m_tests) { - if (!m_context.aborting()) - totals += m_context.runTest(*testCase); - else - m_reporter->skipTest(testCase->getTestCaseInfo()); - } - - for (auto const& match : m_matches) { - if (match.tests.empty()) { - m_unmatchedTestSpecs = true; - m_reporter->noMatchingTestCases( match.name ); - } - } - - return totals; - } - - bool hadUnmatchedTestSpecs() const { - return m_unmatchedTestSpecs; - } - - - private: - IEventListener* m_reporter; - Config const* m_config; - RunContext m_context; - std::set m_tests; - TestSpec::Matches m_matches; - bool m_unmatchedTestSpecs = false; - }; - - void applyFilenamesAsTags() { - for (auto const& testInfo : getRegistryHub().getTestCaseRegistry().getAllInfos()) { - testInfo->addFilenameTag(); - } - } - - } // anon namespace - - Session::Session() { - static bool alreadyInstantiated = false; - if( alreadyInstantiated ) { - CATCH_TRY { CATCH_INTERNAL_ERROR( "Only one instance of Catch::Session can ever be used" ); } - CATCH_CATCH_ALL { getMutableRegistryHub().registerStartupException(); } - } - - // There cannot be exceptions at startup in no-exception mode. -#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) - const auto& exceptions = getRegistryHub().getStartupExceptionRegistry().getExceptions(); - if ( !exceptions.empty() ) { - config(); - getCurrentMutableContext().setConfig(m_config.get()); - - m_startupExceptions = true; - auto errStream = makeStream( "%stderr" ); - auto colourImpl = makeColourImpl( - ColourMode::PlatformDefault, errStream.get() ); - auto guard = colourImpl->guardColour( Colour::Red ); - errStream->stream() << "Errors occurred during startup!" << '\n'; - // iterate over all exceptions and notify user - for ( const auto& ex_ptr : exceptions ) { - try { - std::rethrow_exception(ex_ptr); - } catch ( std::exception const& ex ) { - errStream->stream() << TextFlow::Column( ex.what() ).indent(2) << '\n'; - } - } - } -#endif - - alreadyInstantiated = true; - m_cli = makeCommandLineParser( m_configData ); - } - Session::~Session() { - Catch::cleanUp(); - } - - void Session::showHelp() const { - Catch::cout() - << "\nCatch2 v" << libraryVersion() << '\n' - << m_cli << '\n' - << "For more detailed usage please see the project docs\n\n" << std::flush; - } - void Session::libIdentify() { - Catch::cout() - << std::left << std::setw(16) << "description: " << "A Catch2 test executable\n" - << std::left << std::setw(16) << "category: " << "testframework\n" - << std::left << std::setw(16) << "framework: " << "Catch2\n" - << std::left << std::setw(16) << "version: " << libraryVersion() << '\n' << std::flush; - } - - int Session::applyCommandLine( int argc, char const * const * argv ) { - if( m_startupExceptions ) - return 1; - - auto result = m_cli.parse( Clara::Args( argc, argv ) ); - - if( !result ) { - config(); - getCurrentMutableContext().setConfig(m_config.get()); - auto errStream = makeStream( "%stderr" ); - auto colour = makeColourImpl( ColourMode::PlatformDefault, errStream.get() ); - - errStream->stream() - << colour->guardColour( Colour::Red ) - << "\nError(s) in input:\n" - << TextFlow::Column( result.errorMessage() ).indent( 2 ) - << "\n\n"; - errStream->stream() << "Run with -? for usage\n\n" << std::flush; - return MaxExitCode; - } - - if( m_configData.showHelp ) - showHelp(); - if( m_configData.libIdentify ) - libIdentify(); - - m_config.reset(); - return 0; - } - -#if defined(CATCH_CONFIG_WCHAR) && defined(_WIN32) && defined(UNICODE) - int Session::applyCommandLine( int argc, wchar_t const * const * argv ) { - - char **utf8Argv = new char *[ argc ]; - - for ( int i = 0; i < argc; ++i ) { - int bufSize = WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, nullptr, 0, nullptr, nullptr ); - - utf8Argv[ i ] = new char[ bufSize ]; - - WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, utf8Argv[i], bufSize, nullptr, nullptr ); - } - - int returnCode = applyCommandLine( argc, utf8Argv ); - - for ( int i = 0; i < argc; ++i ) - delete [] utf8Argv[ i ]; - - delete [] utf8Argv; - - return returnCode; - } -#endif - - void Session::useConfigData( ConfigData const& configData ) { - m_configData = configData; - m_config.reset(); - } - - int Session::run() { - if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeStart ) != 0 ) { - Catch::cout() << "...waiting for enter/ return before starting\n" << std::flush; - static_cast(std::getchar()); - } - int exitCode = runInternal(); - if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeExit ) != 0 ) { - Catch::cout() << "...waiting for enter/ return before exiting, with code: " << exitCode << '\n' << std::flush; - static_cast(std::getchar()); - } - return exitCode; - } - - Clara::Parser const& Session::cli() const { - return m_cli; - } - void Session::cli( Clara::Parser const& newParser ) { - m_cli = newParser; - } - ConfigData& Session::configData() { - return m_configData; - } - Config& Session::config() { - if( !m_config ) - m_config = Detail::make_unique( m_configData ); - return *m_config; - } - - int Session::runInternal() { - if( m_startupExceptions ) - return 1; - - if (m_configData.showHelp || m_configData.libIdentify) { - return 0; - } - - if ( m_configData.shardIndex >= m_configData.shardCount ) { - Catch::cerr() << "The shard count (" << m_configData.shardCount - << ") must be greater than the shard index (" - << m_configData.shardIndex << ")\n" - << std::flush; - return 1; - } - - CATCH_TRY { - config(); // Force config to be constructed - - seedRng( *m_config ); - - if (m_configData.filenamesAsTags) { - applyFilenamesAsTags(); - } - - // Set up global config instance before we start calling into other functions - getCurrentMutableContext().setConfig(m_config.get()); - - // Create reporter(s) so we can route listings through them - auto reporter = prepareReporters(m_config.get()); - - auto const& invalidSpecs = m_config->testSpec().getInvalidSpecs(); - if ( !invalidSpecs.empty() ) { - for ( auto const& spec : invalidSpecs ) { - reporter->reportInvalidTestSpec( spec ); - } - return 1; - } - - - // Handle list request - if (list(*reporter, *m_config)) { - return 0; - } - - TestGroup tests { CATCH_MOVE(reporter), m_config.get() }; - auto const totals = tests.execute(); - - if ( tests.hadUnmatchedTestSpecs() - && m_config->warnAboutUnmatchedTestSpecs() ) { - return 3; - } - - if ( totals.testCases.total() == 0 - && !m_config->zeroTestsCountAsSuccess() ) { - return 2; - } - - // Note that on unices only the lower 8 bits are usually used, clamping - // the return value to 255 prevents false negative when some multiple - // of 256 tests has failed - return (std::min) (MaxExitCode, static_cast(totals.assertions.failed)); - } -#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) - catch( std::exception& ex ) { - Catch::cerr() << ex.what() << '\n' << std::flush; - return MaxExitCode; - } -#endif - } - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/catch_session.hpp b/lib/Catch2/src/catch2/catch_session.hpp deleted file mode 100644 index c1de6d5..0000000 --- a/lib/Catch2/src/catch2/catch_session.hpp +++ /dev/null @@ -1,62 +0,0 @@ - -// 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 -#ifndef CATCH_SESSION_HPP_INCLUDED -#define CATCH_SESSION_HPP_INCLUDED - -#include -#include -#include -#include -#include - -namespace Catch { - - class Session : Detail::NonCopyable { - public: - - Session(); - ~Session(); - - void showHelp() const; - void libIdentify(); - - int applyCommandLine( int argc, char const * const * argv ); - #if defined(CATCH_CONFIG_WCHAR) && defined(_WIN32) && defined(UNICODE) - int applyCommandLine( int argc, wchar_t const * const * argv ); - #endif - - void useConfigData( ConfigData const& configData ); - - template - int run(int argc, CharT const * const argv[]) { - if (m_startupExceptions) - return 1; - int returnCode = applyCommandLine(argc, argv); - if (returnCode == 0) - returnCode = run(); - return returnCode; - } - - int run(); - - Clara::Parser const& cli() const; - void cli( Clara::Parser const& newParser ); - ConfigData& configData(); - Config& config(); - private: - int runInternal(); - - Clara::Parser m_cli; - ConfigData m_configData; - Detail::unique_ptr m_config; - bool m_startupExceptions = false; - }; - -} // end namespace Catch - -#endif // CATCH_SESSION_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_tag_alias.hpp b/lib/Catch2/src/catch2/catch_tag_alias.hpp deleted file mode 100644 index dc91f21..0000000 --- a/lib/Catch2/src/catch2/catch_tag_alias.hpp +++ /dev/null @@ -1,29 +0,0 @@ - -// 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 -#ifndef CATCH_TAG_ALIAS_HPP_INCLUDED -#define CATCH_TAG_ALIAS_HPP_INCLUDED - -#include - -#include - -namespace Catch { - - struct TagAlias { - TagAlias(std::string const& _tag, SourceLineInfo _lineInfo): - tag(_tag), - lineInfo(_lineInfo) - {} - - std::string tag; - SourceLineInfo lineInfo; - }; - -} // end namespace Catch - -#endif // CATCH_TAG_ALIAS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_tag_alias_autoregistrar.cpp b/lib/Catch2/src/catch2/catch_tag_alias_autoregistrar.cpp deleted file mode 100644 index 9b6633a..0000000 --- a/lib/Catch2/src/catch2/catch_tag_alias_autoregistrar.cpp +++ /dev/null @@ -1,24 +0,0 @@ - -// 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 -#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/lib/Catch2/src/catch2/catch_tag_alias_autoregistrar.hpp b/lib/Catch2/src/catch2/catch_tag_alias_autoregistrar.hpp deleted file mode 100644 index 9f80f72..0000000 --- a/lib/Catch2/src/catch2/catch_tag_alias_autoregistrar.hpp +++ /dev/null @@ -1,29 +0,0 @@ - -// 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 -#ifndef CATCH_TAG_ALIAS_AUTOREGISTRAR_HPP_INCLUDED -#define CATCH_TAG_ALIAS_AUTOREGISTRAR_HPP_INCLUDED - -#include -#include -#include - -namespace Catch { - - struct RegistrarForTagAliases { - RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); - }; - -} // end namespace Catch - -#define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \ - CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \ - CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION - -#endif // CATCH_TAG_ALIAS_AUTOREGISTRAR_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_template_test_macros.hpp b/lib/Catch2/src/catch2/catch_template_test_macros.hpp deleted file mode 100644 index 3baee51..0000000 --- a/lib/Catch2/src/catch2/catch_template_test_macros.hpp +++ /dev/null @@ -1,124 +0,0 @@ - -// 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 -#ifndef CATCH_TEMPLATE_TEST_MACROS_HPP_INCLUDED -#define CATCH_TEMPLATE_TEST_MACROS_HPP_INCLUDED - -// We need this suppression to leak, because it took until GCC 10 -// for the front end to handle local suppression via _Pragma properly -// inside templates (so `TEMPLATE_TEST_CASE` and co). -// **THIS IS DIFFERENT FOR STANDARD TESTS, WHERE GCC 9 IS SUFFICIENT** -#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && __GNUC__ < 10 -#pragma GCC diagnostic ignored "-Wparentheses" -#endif - - -#include -#include -#include - - -#if defined(CATCH_CONFIG_PREFIX_ALL) && !defined(CATCH_CONFIG_DISABLE) - - #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR - #define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) - #define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ ) - #define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ ) - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) - #define CATCH_TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE(__VA_ARGS__) - #define CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #else - #define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) ) - #define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ ) ) - #define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) ) - #define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) ) - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ ) ) - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) ) - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) ) - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) ) - #define CATCH_TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE( __VA_ARGS__ ) ) - #define CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ ) ) - #endif - -#elif defined(CATCH_CONFIG_PREFIX_ALL) && defined(CATCH_CONFIG_DISABLE) - - #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR - #define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__) - #define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__) - #define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__) - #define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ ) - #else - #define CATCH_TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__) ) - #define CATCH_TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__) ) - #define CATCH_TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__ ) ) - #define CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ ) ) - #endif - - // When disabled, these can be shared between proper preprocessor and MSVC preprocessor - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define CATCH_TEMPLATE_LIST_TEST_CASE( ... ) CATCH_TEMPLATE_TEST_CASE(__VA_ARGS__) - #define CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) - -#elif !defined(CATCH_CONFIG_PREFIX_ALL) && !defined(CATCH_CONFIG_DISABLE) - - #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR - #define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) - #define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ ) - #define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) - #define TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ ) - #define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) - #define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) - #define TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE(__VA_ARGS__) - #define TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #else - #define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) ) - #define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ ) ) - #define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) ) - #define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) ) - #define TEMPLATE_PRODUCT_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE( __VA_ARGS__ ) ) - #define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) ) - #define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) ) - #define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) ) - #define TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE( __VA_ARGS__ ) ) - #define TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ ) ) - #endif - -#elif !defined(CATCH_CONFIG_PREFIX_ALL) && defined(CATCH_CONFIG_DISABLE) - - #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR - #define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__) - #define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__) - #define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__) - #define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ ) - #else - #define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_NO_REGISTRATION(__VA_ARGS__) ) - #define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG_NO_REGISTRATION(__VA_ARGS__) ) - #define TEMPLATE_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION(className, __VA_ARGS__ ) ) - #define TEMPLATE_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_SIG_NO_REGISTRATION(className, __VA_ARGS__ ) ) - #endif - - // When disabled, these can be shared between proper preprocessor and MSVC preprocessor - #define TEMPLATE_PRODUCT_TEST_CASE( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ ) - #define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) TEMPLATE_TEST_CASE( __VA_ARGS__ ) - #define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define TEMPLATE_LIST_TEST_CASE( ... ) TEMPLATE_TEST_CASE(__VA_ARGS__) - #define TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) TEMPLATE_TEST_CASE_METHOD( className, __VA_ARGS__ ) - -#endif // end of user facing macro declarations - - -#endif // CATCH_TEMPLATE_TEST_MACROS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_test_case_info.cpp b/lib/Catch2/src/catch2/catch_test_case_info.cpp deleted file mode 100644 index a6adce0..0000000 --- a/lib/Catch2/src/catch2/catch_test_case_info.cpp +++ /dev/null @@ -1,247 +0,0 @@ - -// 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 -#include -#include -#include - -#include -#include -#include - -namespace Catch { - - namespace { - using TCP_underlying_type = uint8_t; - static_assert(sizeof(TestCaseProperties) == sizeof(TCP_underlying_type), - "The size of the TestCaseProperties is different from the assumed size"); - - TestCaseProperties operator|(TestCaseProperties lhs, TestCaseProperties rhs) { - return static_cast( - static_cast(lhs) | static_cast(rhs) - ); - } - - TestCaseProperties& operator|=(TestCaseProperties& lhs, TestCaseProperties rhs) { - lhs = static_cast( - static_cast(lhs) | static_cast(rhs) - ); - return lhs; - } - - TestCaseProperties operator&(TestCaseProperties lhs, TestCaseProperties rhs) { - return static_cast( - static_cast(lhs) & static_cast(rhs) - ); - } - - bool applies(TestCaseProperties tcp) { - static_assert(static_cast(TestCaseProperties::None) == 0, - "TestCaseProperties::None must be equal to 0"); - return tcp != TestCaseProperties::None; - } - - TestCaseProperties parseSpecialTag( StringRef tag ) { - if( !tag.empty() && tag[0] == '.' ) - return TestCaseProperties::IsHidden; - else if( tag == "!throws"_sr ) - return TestCaseProperties::Throws; - else if( tag == "!shouldfail"_sr ) - return TestCaseProperties::ShouldFail; - else if( tag == "!mayfail"_sr ) - return TestCaseProperties::MayFail; - else if( tag == "!nonportable"_sr ) - return TestCaseProperties::NonPortable; - else if( tag == "!benchmark"_sr ) - return TestCaseProperties::Benchmark | TestCaseProperties::IsHidden; - else - return TestCaseProperties::None; - } - bool isReservedTag( StringRef tag ) { - return parseSpecialTag( tag ) == TestCaseProperties::None - && tag.size() > 0 - && !std::isalnum( static_cast(tag[0]) ); - } - void enforceNotReservedTag( StringRef tag, SourceLineInfo const& _lineInfo ) { - CATCH_ENFORCE( !isReservedTag(tag), - "Tag name: [" << tag << "] is not allowed.\n" - << "Tag names starting with non alphanumeric characters are reserved\n" - << _lineInfo ); - } - - std::string makeDefaultName() { - static size_t counter = 0; - return "Anonymous test case " + std::to_string(++counter); - } - - StringRef extractFilenamePart(StringRef filename) { - size_t lastDot = filename.size(); - while (lastDot > 0 && filename[lastDot - 1] != '.') { - --lastDot; - } - --lastDot; - - size_t nameStart = lastDot; - while (nameStart > 0 && filename[nameStart - 1] != '/' && filename[nameStart - 1] != '\\') { - --nameStart; - } - - return filename.substr(nameStart, lastDot - nameStart); - } - - // Returns the upper bound on size of extra tags ([#file]+[.]) - size_t sizeOfExtraTags(StringRef filepath) { - // [.] is 3, [#] is another 3 - const size_t extras = 3 + 3; - return extractFilenamePart(filepath).size() + extras; - } - } // end unnamed namespace - - bool operator<( Tag const& lhs, Tag const& rhs ) { - Detail::CaseInsensitiveLess cmp; - return cmp( lhs.original, rhs.original ); - } - bool operator==( Tag const& lhs, Tag const& rhs ) { - Detail::CaseInsensitiveEqualTo cmp; - return cmp( lhs.original, rhs.original ); - } - - Detail::unique_ptr - makeTestCaseInfo(StringRef _className, - NameAndTags const& nameAndTags, - SourceLineInfo const& _lineInfo ) { - return Detail::make_unique(_className, nameAndTags, _lineInfo); - } - - TestCaseInfo::TestCaseInfo(StringRef _className, - NameAndTags const& _nameAndTags, - SourceLineInfo const& _lineInfo): - name( _nameAndTags.name.empty() ? makeDefaultName() : _nameAndTags.name ), - className( _className ), - lineInfo( _lineInfo ) - { - StringRef originalTags = _nameAndTags.tags; - // We need to reserve enough space to store all of the tags - // (including optional hidden tag and filename tag) - auto requiredSize = originalTags.size() + sizeOfExtraTags(_lineInfo.file); - backingTags.reserve(requiredSize); - - // We cannot copy the tags directly, as we need to normalize - // some tags, so that [.foo] is copied as [.][foo]. - size_t tagStart = 0; - size_t tagEnd = 0; - bool inTag = false; - for (size_t idx = 0; idx < originalTags.size(); ++idx) { - auto c = originalTags[idx]; - if (c == '[') { - assert(!inTag); - inTag = true; - tagStart = idx; - } - if (c == ']') { - assert(inTag); - inTag = false; - tagEnd = idx; - assert(tagStart < tagEnd); - - // We need to check the tag for special meanings, copy - // it over to backing storage and actually reference the - // backing storage in the saved tags - StringRef tagStr = originalTags.substr(tagStart+1, tagEnd - tagStart - 1); - CATCH_ENFORCE(!tagStr.empty(), "Empty tags are not allowed"); - enforceNotReservedTag(tagStr, lineInfo); - properties |= parseSpecialTag(tagStr); - // When copying a tag to the backing storage, we need to - // check if it is a merged hide tag, such as [.foo], and - // if it is, we need to handle it as if it was [foo]. - if (tagStr.size() > 1 && tagStr[0] == '.') { - tagStr = tagStr.substr(1, tagStr.size() - 1); - } - // We skip over dealing with the [.] tag, as we will add - // it later unconditionally and then sort and unique all - // the tags. - internalAppendTag(tagStr); - } - (void)inTag; // Silence "set-but-unused" warning in release mode. - } - // Add [.] if relevant - if (isHidden()) { - internalAppendTag("."_sr); - } - - // Sort and prepare tags - std::sort(begin(tags), end(tags)); - tags.erase(std::unique(begin(tags), end(tags)), - end(tags)); - } - - bool TestCaseInfo::isHidden() const { - return applies( properties & TestCaseProperties::IsHidden ); - } - bool TestCaseInfo::throws() const { - return applies( properties & TestCaseProperties::Throws ); - } - bool TestCaseInfo::okToFail() const { - return applies( properties & (TestCaseProperties::ShouldFail | TestCaseProperties::MayFail ) ); - } - bool TestCaseInfo::expectedToFail() const { - return applies( properties & (TestCaseProperties::ShouldFail) ); - } - - void TestCaseInfo::addFilenameTag() { - std::string combined("#"); - combined += extractFilenamePart(lineInfo.file); - internalAppendTag(combined); - } - - std::string TestCaseInfo::tagsAsString() const { - std::string ret; - // '[' and ']' per tag - std::size_t full_size = 2 * tags.size(); - for (const auto& tag : tags) { - full_size += tag.original.size(); - } - ret.reserve(full_size); - for (const auto& tag : tags) { - ret.push_back('['); - ret += tag.original; - ret.push_back(']'); - } - - return ret; - } - - void TestCaseInfo::internalAppendTag(StringRef tagStr) { - backingTags += '['; - const auto backingStart = backingTags.size(); - backingTags += tagStr; - const auto backingEnd = backingTags.size(); - backingTags += ']'; - tags.emplace_back(StringRef(backingTags.c_str() + backingStart, backingEnd - backingStart)); - } - - bool operator<( TestCaseInfo const& lhs, TestCaseInfo const& rhs ) { - // We want to avoid redoing the string comparisons multiple times, - // so we store the result of a three-way comparison before using - // it in the actual comparison logic. - const auto cmpName = lhs.name.compare( rhs.name ); - if ( cmpName != 0 ) { - return cmpName < 0; - } - const auto cmpClassName = lhs.className.compare( rhs.className ); - if ( cmpClassName != 0 ) { - return cmpClassName < 0; - } - return lhs.tags < rhs.tags; - } - - TestCaseInfo const& TestCaseHandle::getTestCaseInfo() const { - return *m_info; - } - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/catch_test_case_info.hpp b/lib/Catch2/src/catch2/catch_test_case_info.hpp deleted file mode 100644 index ab5ae8b..0000000 --- a/lib/Catch2/src/catch2/catch_test_case_info.hpp +++ /dev/null @@ -1,130 +0,0 @@ - -// 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 -#ifndef CATCH_TEST_CASE_INFO_HPP_INCLUDED -#define CATCH_TEST_CASE_INFO_HPP_INCLUDED - -#include -#include -#include -#include -#include - - -#include -#include - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wpadded" -#endif - -namespace Catch { - - /** - * A **view** of a tag string that provides case insensitive comparisons - * - * Note that in Catch2 internals, the square brackets around tags are - * not a part of tag's representation, so e.g. "[cool-tag]" is represented - * as "cool-tag" internally. - */ - struct Tag { - constexpr Tag(StringRef original_): - original(original_) - {} - StringRef original; - - friend bool operator< ( Tag const& lhs, Tag const& rhs ); - friend bool operator==( Tag const& lhs, Tag const& rhs ); - }; - - class ITestInvoker; - - enum class TestCaseProperties : uint8_t { - None = 0, - IsHidden = 1 << 1, - ShouldFail = 1 << 2, - MayFail = 1 << 3, - Throws = 1 << 4, - NonPortable = 1 << 5, - Benchmark = 1 << 6 - }; - - /** - * Various metadata about the test case. - * - * A test case is uniquely identified by its (class)name and tags - * combination, with source location being ignored, and other properties - * being determined from tags. - * - * Tags are kept sorted. - */ - struct TestCaseInfo : Detail::NonCopyable { - - TestCaseInfo(StringRef _className, - NameAndTags const& _tags, - SourceLineInfo const& _lineInfo); - - bool isHidden() const; - bool throws() const; - bool okToFail() const; - bool expectedToFail() const; - - // Adds the tag(s) with test's filename (for the -# flag) - void addFilenameTag(); - - //! Orders by name, classname and tags - friend bool operator<( TestCaseInfo const& lhs, - TestCaseInfo const& rhs ); - - - std::string tagsAsString() const; - - std::string name; - StringRef className; - private: - std::string backingTags; - // Internally we copy tags to the backing storage and then add - // refs to this storage to the tags vector. - void internalAppendTag(StringRef tagString); - public: - std::vector tags; - SourceLineInfo lineInfo; - TestCaseProperties properties = TestCaseProperties::None; - }; - - /** - * Wrapper over the test case information and the test case invoker - * - * Does not own either, and is specifically made to be cheap - * to copy around. - */ - class TestCaseHandle { - TestCaseInfo* m_info; - ITestInvoker* m_invoker; - public: - TestCaseHandle(TestCaseInfo* info, ITestInvoker* invoker) : - m_info(info), m_invoker(invoker) {} - - void invoke() const { - m_invoker->invoke(); - } - - TestCaseInfo const& getTestCaseInfo() const; - }; - - Detail::unique_ptr - makeTestCaseInfo( StringRef className, - NameAndTags const& nameAndTags, - SourceLineInfo const& lineInfo ); -} - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - -#endif // CATCH_TEST_CASE_INFO_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_test_macros.hpp b/lib/Catch2/src/catch2/catch_test_macros.hpp deleted file mode 100644 index cce2852..0000000 --- a/lib/Catch2/src/catch2/catch_test_macros.hpp +++ /dev/null @@ -1,222 +0,0 @@ - -// 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 -#ifndef CATCH_TEST_MACROS_HPP_INCLUDED -#define CATCH_TEST_MACROS_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include - - -// All of our user-facing macros support configuration toggle, that -// forces them to be defined prefixed with CATCH_. We also like to -// support another toggle that can minimize (disable) their implementation. -// Given this, we have 4 different configuration options below - -#if defined(CATCH_CONFIG_PREFIX_ALL) && !defined(CATCH_CONFIG_DISABLE) - - #define CATCH_REQUIRE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ ) - #define CATCH_REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ ) - - #define CATCH_REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ ) - #define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr ) - #define CATCH_REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ ) - - #define CATCH_CHECK( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - #define CATCH_CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ ) - #define CATCH_CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CATCH_CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ ) - #define CATCH_CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CATCH_CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ ) - #define CATCH_CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ ) - - #define CATCH_CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - #define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr ) - #define CATCH_CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - - #define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) - #define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) - #define CATCH_REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ ) - #define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) - #define CATCH_DYNAMIC_SECTION( ... ) INTERNAL_CATCH_DYNAMIC_SECTION( __VA_ARGS__ ) - #define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ ) - #define CATCH_FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - #define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( "CATCH_SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - - - #if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE) - #define CATCH_STATIC_REQUIRE( ... ) static_assert( __VA_ARGS__ , #__VA_ARGS__ ); CATCH_SUCCEED( #__VA_ARGS__ ) - #define CATCH_STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); CATCH_SUCCEED( #__VA_ARGS__ ) - #define CATCH_STATIC_CHECK( ... ) static_assert( __VA_ARGS__ , #__VA_ARGS__ ); CATCH_SUCCEED( #__VA_ARGS__ ) - #define CATCH_STATIC_CHECK_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); CATCH_SUCCEED( #__VA_ARGS__ ) - #else - #define CATCH_STATIC_REQUIRE( ... ) CATCH_REQUIRE( __VA_ARGS__ ) - #define CATCH_STATIC_REQUIRE_FALSE( ... ) CATCH_REQUIRE_FALSE( __VA_ARGS__ ) - #define CATCH_STATIC_CHECK( ... ) CATCH_CHECK( __VA_ARGS__ ) - #define CATCH_STATIC_CHECK_FALSE( ... ) CATCH_CHECK_FALSE( __VA_ARGS__ ) - #endif - - - // "BDD-style" convenience wrappers - #define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ ) - #define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) - #define CATCH_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Given: " << desc ) - #define CATCH_AND_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And given: " << desc ) - #define CATCH_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " When: " << desc ) - #define CATCH_AND_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And when: " << desc ) - #define CATCH_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Then: " << desc ) - #define CATCH_AND_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And: " << desc ) - -#elif defined(CATCH_CONFIG_PREFIX_ALL) && defined(CATCH_CONFIG_DISABLE) // ^^ prefixed, implemented | vv prefixed, disabled - - #define CATCH_REQUIRE( ... ) (void)(0) - #define CATCH_REQUIRE_FALSE( ... ) (void)(0) - - #define CATCH_REQUIRE_THROWS( ... ) (void)(0) - #define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0) - #define CATCH_REQUIRE_NOTHROW( ... ) (void)(0) - - #define CATCH_CHECK( ... ) (void)(0) - #define CATCH_CHECK_FALSE( ... ) (void)(0) - #define CATCH_CHECKED_IF( ... ) if (__VA_ARGS__) - #define CATCH_CHECKED_ELSE( ... ) if (!(__VA_ARGS__)) - #define CATCH_CHECK_NOFAIL( ... ) (void)(0) - - #define CATCH_CHECK_THROWS( ... ) (void)(0) - #define CATCH_CHECK_THROWS_AS( expr, exceptionType ) (void)(0) - #define CATCH_CHECK_NOTHROW( ... ) (void)(0) - - #define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEST_ )) - #define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEST_ )) - #define CATCH_METHOD_AS_TEST_CASE( method, ... ) - #define CATCH_REGISTER_TEST_CASE( Function, ... ) (void)(0) - #define CATCH_SECTION( ... ) - #define CATCH_DYNAMIC_SECTION( ... ) - #define CATCH_FAIL( ... ) (void)(0) - #define CATCH_FAIL_CHECK( ... ) (void)(0) - #define CATCH_SUCCEED( ... ) (void)(0) - - #define CATCH_STATIC_REQUIRE( ... ) (void)(0) - #define CATCH_STATIC_REQUIRE_FALSE( ... ) (void)(0) - #define CATCH_STATIC_CHECK( ... ) (void)(0) - #define CATCH_STATIC_CHECK_FALSE( ... ) (void)(0) - - // "BDD-style" convenience wrappers - #define CATCH_SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEST_ )) - #define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEST_ ), className ) - #define CATCH_GIVEN( desc ) - #define CATCH_AND_GIVEN( desc ) - #define CATCH_WHEN( desc ) - #define CATCH_AND_WHEN( desc ) - #define CATCH_THEN( desc ) - #define CATCH_AND_THEN( desc ) - -#elif !defined(CATCH_CONFIG_PREFIX_ALL) && !defined(CATCH_CONFIG_DISABLE) // ^^ prefixed, disabled | vv unprefixed, implemented - - #define REQUIRE( ... ) INTERNAL_CATCH_TEST( "REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ ) - #define REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ ) - - #define REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ ) - #define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr ) - #define REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ ) - - #define CHECK( ... ) INTERNAL_CATCH_TEST( "CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - #define CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ ) - #define CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ ) - #define CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ ) - #define CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ ) - - #define CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - #define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr ) - #define CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - - #define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) - #define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) - #define REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ ) - #define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) - #define DYNAMIC_SECTION( ... ) INTERNAL_CATCH_DYNAMIC_SECTION( __VA_ARGS__ ) - #define FAIL( ... ) INTERNAL_CATCH_MSG( "FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ ) - #define FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - #define SUCCEED( ... ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - - - #if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE) - #define STATIC_REQUIRE( ... ) static_assert( __VA_ARGS__, #__VA_ARGS__ ); SUCCEED( #__VA_ARGS__ ) - #define STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); SUCCEED( "!(" #__VA_ARGS__ ")" ) - #define STATIC_CHECK( ... ) static_assert( __VA_ARGS__, #__VA_ARGS__ ); SUCCEED( #__VA_ARGS__ ) - #define STATIC_CHECK_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); SUCCEED( "!(" #__VA_ARGS__ ")" ) - #else - #define STATIC_REQUIRE( ... ) REQUIRE( __VA_ARGS__ ) - #define STATIC_REQUIRE_FALSE( ... ) REQUIRE_FALSE( __VA_ARGS__ ) - #define STATIC_CHECK( ... ) CHECK( __VA_ARGS__ ) - #define STATIC_CHECK_FALSE( ... ) CHECK_FALSE( __VA_ARGS__ ) - #endif - - // "BDD-style" convenience wrappers - #define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ ) - #define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) - #define GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Given: " << desc ) - #define AND_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And given: " << desc ) - #define WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " When: " << desc ) - #define AND_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And when: " << desc ) - #define THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " Then: " << desc ) - #define AND_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( " And: " << desc ) - -#elif !defined(CATCH_CONFIG_PREFIX_ALL) && defined(CATCH_CONFIG_DISABLE) // ^^ unprefixed, implemented | vv unprefixed, disabled - - #define REQUIRE( ... ) (void)(0) - #define REQUIRE_FALSE( ... ) (void)(0) - - #define REQUIRE_THROWS( ... ) (void)(0) - #define REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0) - #define REQUIRE_NOTHROW( ... ) (void)(0) - - #define CHECK( ... ) (void)(0) - #define CHECK_FALSE( ... ) (void)(0) - #define CHECKED_IF( ... ) if (__VA_ARGS__) - #define CHECKED_ELSE( ... ) if (!(__VA_ARGS__)) - #define CHECK_NOFAIL( ... ) (void)(0) - - #define CHECK_THROWS( ... ) (void)(0) - #define CHECK_THROWS_AS( expr, exceptionType ) (void)(0) - #define CHECK_NOTHROW( ... ) (void)(0) - - #define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEST_ ), __VA_ARGS__) - #define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEST_ )) - #define METHOD_AS_TEST_CASE( method, ... ) - #define REGISTER_TEST_CASE( Function, ... ) (void)(0) - #define SECTION( ... ) - #define DYNAMIC_SECTION( ... ) - #define FAIL( ... ) (void)(0) - #define FAIL_CHECK( ... ) (void)(0) - #define SUCCEED( ... ) (void)(0) - - #define STATIC_REQUIRE( ... ) (void)(0) - #define STATIC_REQUIRE_FALSE( ... ) (void)(0) - #define STATIC_CHECK( ... ) (void)(0) - #define STATIC_CHECK_FALSE( ... ) (void)(0) - - // "BDD-style" convenience wrappers - #define SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEST_ ) ) - #define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEST_ ), className ) - - #define GIVEN( desc ) - #define AND_GIVEN( desc ) - #define WHEN( desc ) - #define AND_WHEN( desc ) - #define THEN( desc ) - #define AND_THEN( desc ) - -#endif // ^^ unprefixed, disabled - -// end of user facing macros - -#endif // CATCH_TEST_MACROS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_test_spec.cpp b/lib/Catch2/src/catch2/catch_test_spec.cpp deleted file mode 100644 index f27ce99..0000000 --- a/lib/Catch2/src/catch2/catch_test_spec.cpp +++ /dev/null @@ -1,137 +0,0 @@ - -// 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 -#include -#include -#include - -#include -#include -#include -#include - -namespace Catch { - - TestSpec::Pattern::Pattern( std::string const& name ) - : m_name( name ) - {} - - TestSpec::Pattern::~Pattern() = default; - - std::string const& TestSpec::Pattern::name() const { - return m_name; - } - - - TestSpec::NamePattern::NamePattern( std::string const& name, std::string const& filterString ) - : Pattern( filterString ) - , m_wildcardPattern( toLower( name ), CaseSensitive::No ) - {} - - bool TestSpec::NamePattern::matches( TestCaseInfo const& testCase ) const { - return m_wildcardPattern.matches( testCase.name ); - } - - void TestSpec::NamePattern::serializeTo( std::ostream& out ) const { - out << '"' << name() << '"'; - } - - - TestSpec::TagPattern::TagPattern( std::string const& tag, std::string const& filterString ) - : Pattern( filterString ) - , m_tag( tag ) - {} - - bool TestSpec::TagPattern::matches( TestCaseInfo const& testCase ) const { - return std::find( begin( testCase.tags ), - end( testCase.tags ), - Tag( m_tag ) ) != end( testCase.tags ); - } - - void TestSpec::TagPattern::serializeTo( std::ostream& out ) const { - out << name(); - } - - bool TestSpec::Filter::matches( TestCaseInfo const& testCase ) const { - bool should_use = !testCase.isHidden(); - for (auto const& pattern : m_required) { - should_use = true; - if (!pattern->matches(testCase)) { - return false; - } - } - for (auto const& pattern : m_forbidden) { - if (pattern->matches(testCase)) { - return false; - } - } - return should_use; - } - - void TestSpec::Filter::serializeTo( std::ostream& out ) const { - bool first = true; - for ( auto const& pattern : m_required ) { - if ( !first ) { - out << ' '; - } - out << *pattern; - first = false; - } - for ( auto const& pattern : m_forbidden ) { - if ( !first ) { - out << ' '; - } - out << *pattern; - first = false; - } - } - - - std::string TestSpec::extractFilterName( Filter const& filter ) { - Catch::ReusableStringStream sstr; - sstr << filter; - return sstr.str(); - } - - bool TestSpec::hasFilters() const { - return !m_filters.empty(); - } - - bool TestSpec::matches( TestCaseInfo const& testCase ) const { - return std::any_of( m_filters.begin(), m_filters.end(), [&]( Filter const& f ){ return f.matches( testCase ); } ); - } - - TestSpec::Matches TestSpec::matchesByFilter( std::vector const& testCases, IConfig const& config ) const - { - Matches matches( m_filters.size() ); - std::transform( m_filters.begin(), m_filters.end(), matches.begin(), [&]( Filter const& filter ){ - std::vector currentMatches; - for( auto const& test : testCases ) - if( isThrowSafe( test, config ) && filter.matches( test.getTestCaseInfo() ) ) - currentMatches.emplace_back( &test ); - return FilterMatch{ extractFilterName(filter), currentMatches }; - } ); - return matches; - } - - const TestSpec::vectorStrings& TestSpec::getInvalidSpecs() const { - return m_invalidSpecs; - } - - void TestSpec::serializeTo( std::ostream& out ) const { - bool first = true; - for ( auto const& filter : m_filters ) { - if ( !first ) { - out << ','; - } - out << filter; - first = false; - } - } - -} diff --git a/lib/Catch2/src/catch2/catch_test_spec.hpp b/lib/Catch2/src/catch2/catch_test_spec.hpp deleted file mode 100644 index f12baa6..0000000 --- a/lib/Catch2/src/catch2/catch_test_spec.hpp +++ /dev/null @@ -1,119 +0,0 @@ - -// 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 -#ifndef CATCH_TEST_SPEC_HPP_INCLUDED -#define CATCH_TEST_SPEC_HPP_INCLUDED - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wpadded" -#endif - -#include -#include - -#include -#include -#include - -namespace Catch { - - class IConfig; - struct TestCaseInfo; - class TestCaseHandle; - - class TestSpec { - - class Pattern { - public: - explicit Pattern( std::string const& name ); - virtual ~Pattern(); - virtual bool matches( TestCaseInfo const& testCase ) const = 0; - std::string const& name() const; - private: - virtual void serializeTo( std::ostream& out ) const = 0; - // Writes string that would be reparsed into the pattern - friend std::ostream& operator<<(std::ostream& out, - Pattern const& pattern) { - pattern.serializeTo( out ); - return out; - } - - std::string const m_name; - }; - - class NamePattern : public Pattern { - public: - explicit NamePattern( std::string const& name, std::string const& filterString ); - bool matches( TestCaseInfo const& testCase ) const override; - private: - void serializeTo( std::ostream& out ) const override; - - WildcardPattern m_wildcardPattern; - }; - - class TagPattern : public Pattern { - public: - explicit TagPattern( std::string const& tag, std::string const& filterString ); - bool matches( TestCaseInfo const& testCase ) const override; - private: - void serializeTo( std::ostream& out ) const override; - - std::string m_tag; - }; - - struct Filter { - std::vector> m_required; - std::vector> m_forbidden; - - //! Serializes this filter into a string that would be parsed into - //! an equivalent filter - void serializeTo( std::ostream& out ) const; - friend std::ostream& operator<<(std::ostream& out, Filter const& f) { - f.serializeTo( out ); - return out; - } - - bool matches( TestCaseInfo const& testCase ) const; - }; - - static std::string extractFilterName( Filter const& filter ); - - public: - struct FilterMatch { - std::string name; - std::vector tests; - }; - using Matches = std::vector; - using vectorStrings = std::vector; - - bool hasFilters() const; - bool matches( TestCaseInfo const& testCase ) const; - Matches matchesByFilter( std::vector const& testCases, IConfig const& config ) const; - const vectorStrings & getInvalidSpecs() const; - - private: - std::vector m_filters; - std::vector m_invalidSpecs; - - friend class TestSpecParser; - //! Serializes this test spec into a string that would be parsed into - //! equivalent test spec - void serializeTo( std::ostream& out ) const; - friend std::ostream& operator<<(std::ostream& out, - TestSpec const& spec) { - spec.serializeTo( out ); - return out; - } - }; -} - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - -#endif // CATCH_TEST_SPEC_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_timer.cpp b/lib/Catch2/src/catch2/catch_timer.cpp deleted file mode 100644 index d75ea70..0000000 --- a/lib/Catch2/src/catch2/catch_timer.cpp +++ /dev/null @@ -1,37 +0,0 @@ - -// 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 - -#include - -namespace Catch { - - namespace { - static auto getCurrentNanosecondsSinceEpoch() -> uint64_t { - return std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count(); - } - } // end unnamed namespace - - void Timer::start() { - m_nanoseconds = getCurrentNanosecondsSinceEpoch(); - } - auto Timer::getElapsedNanoseconds() const -> uint64_t { - return getCurrentNanosecondsSinceEpoch() - m_nanoseconds; - } - auto Timer::getElapsedMicroseconds() const -> uint64_t { - return getElapsedNanoseconds()/1000; - } - auto Timer::getElapsedMilliseconds() const -> unsigned int { - return static_cast(getElapsedMicroseconds()/1000); - } - auto Timer::getElapsedSeconds() const -> double { - return getElapsedMicroseconds()/1000000.0; - } - - -} // namespace Catch diff --git a/lib/Catch2/src/catch2/catch_timer.hpp b/lib/Catch2/src/catch2/catch_timer.hpp deleted file mode 100644 index f42589f..0000000 --- a/lib/Catch2/src/catch2/catch_timer.hpp +++ /dev/null @@ -1,27 +0,0 @@ - -// 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 -#ifndef CATCH_TIMER_HPP_INCLUDED -#define CATCH_TIMER_HPP_INCLUDED - -#include - -namespace Catch { - - class Timer { - uint64_t m_nanoseconds = 0; - public: - void start(); - auto getElapsedNanoseconds() const -> uint64_t; - auto getElapsedMicroseconds() const -> uint64_t; - auto getElapsedMilliseconds() const -> unsigned int; - auto getElapsedSeconds() const -> double; - }; - -} // namespace Catch - -#endif // CATCH_TIMER_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_tostring.cpp b/lib/Catch2/src/catch2/catch_tostring.cpp deleted file mode 100644 index b97cf56..0000000 --- a/lib/Catch2/src/catch2/catch_tostring.cpp +++ /dev/null @@ -1,254 +0,0 @@ - -// 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 -#include -#include -#include - -#include -#include - -namespace Catch { - -namespace Detail { - - namespace { - const int hexThreshold = 255; - - struct Endianness { - enum Arch { Big, Little }; - - static Arch which() { - int one = 1; - // If the lowest byte we read is non-zero, we can assume - // that little endian format is used. - auto value = *reinterpret_cast(&one); - return value ? Little : Big; - } - }; - - template - std::string fpToString(T value, int precision) { - if (Catch::isnan(value)) { - return "nan"; - } - - ReusableStringStream rss; - rss << std::setprecision(precision) - << std::fixed - << value; - std::string d = rss.str(); - std::size_t i = d.find_last_not_of('0'); - if (i != std::string::npos && i != d.size() - 1) { - if (d[i] == '.') - i++; - d = d.substr(0, i + 1); - } - return d; - } - } // end unnamed namespace - - std::string convertIntoString(StringRef string, bool escape_invisibles) { - std::string ret; - // This is enough for the "don't escape invisibles" case, and a good - // lower bound on the "escape invisibles" case. - ret.reserve(string.size() + 2); - - if (!escape_invisibles) { - ret += '"'; - ret += string; - ret += '"'; - return ret; - } - - ret += '"'; - for (char c : string) { - switch (c) { - case '\r': - ret.append("\\r"); - break; - case '\n': - ret.append("\\n"); - break; - case '\t': - ret.append("\\t"); - break; - case '\f': - ret.append("\\f"); - break; - default: - ret.push_back(c); - break; - } - } - ret += '"'; - - return ret; - } - - std::string convertIntoString(StringRef string) { - return convertIntoString(string, getCurrentContext().getConfig()->showInvisibles()); - } - - std::string rawMemoryToString( const void *object, std::size_t size ) { - // Reverse order for little endian architectures - int i = 0, end = static_cast( size ), inc = 1; - if( Endianness::which() == Endianness::Little ) { - i = end-1; - end = inc = -1; - } - - unsigned char const *bytes = static_cast(object); - ReusableStringStream rss; - rss << "0x" << std::setfill('0') << std::hex; - for( ; i != end; i += inc ) - rss << std::setw(2) << static_cast(bytes[i]); - return rss.str(); - } -} // end Detail namespace - - - -//// ======================================================= //// -// -// Out-of-line defs for full specialization of StringMaker -// -//// ======================================================= //// - -std::string StringMaker::convert(const std::string& str) { - return Detail::convertIntoString( str ); -} - -#ifdef CATCH_CONFIG_CPP17_STRING_VIEW -std::string StringMaker::convert(std::string_view str) { - return Detail::convertIntoString( StringRef( str.data(), str.size() ) ); -} -#endif - -std::string StringMaker::convert(char const* str) { - if (str) { - return Detail::convertIntoString( str ); - } else { - return{ "{null string}" }; - } -} -std::string StringMaker::convert(char* str) { - if (str) { - return Detail::convertIntoString( str ); - } else { - return{ "{null string}" }; - } -} - -#ifdef CATCH_CONFIG_WCHAR -std::string StringMaker::convert(const std::wstring& wstr) { - std::string s; - s.reserve(wstr.size()); - for (auto c : wstr) { - s += (c <= 0xff) ? static_cast(c) : '?'; - } - return ::Catch::Detail::stringify(s); -} - -# ifdef CATCH_CONFIG_CPP17_STRING_VIEW -std::string StringMaker::convert(std::wstring_view str) { - return StringMaker::convert(std::wstring(str)); -} -# endif - -std::string StringMaker::convert(wchar_t const * str) { - if (str) { - return ::Catch::Detail::stringify(std::wstring{ str }); - } else { - return{ "{null string}" }; - } -} -std::string StringMaker::convert(wchar_t * str) { - if (str) { - return ::Catch::Detail::stringify(std::wstring{ str }); - } else { - return{ "{null string}" }; - } -} -#endif - -#if defined(CATCH_CONFIG_CPP17_BYTE) -#include -std::string StringMaker::convert(std::byte value) { - return ::Catch::Detail::stringify(std::to_integer(value)); -} -#endif // defined(CATCH_CONFIG_CPP17_BYTE) - -std::string StringMaker::convert(int value) { - return ::Catch::Detail::stringify(static_cast(value)); -} -std::string StringMaker::convert(long value) { - return ::Catch::Detail::stringify(static_cast(value)); -} -std::string StringMaker::convert(long long value) { - ReusableStringStream rss; - rss << value; - if (value > Detail::hexThreshold) { - rss << " (0x" << std::hex << value << ')'; - } - return rss.str(); -} - -std::string StringMaker::convert(unsigned int value) { - return ::Catch::Detail::stringify(static_cast(value)); -} -std::string StringMaker::convert(unsigned long value) { - return ::Catch::Detail::stringify(static_cast(value)); -} -std::string StringMaker::convert(unsigned long long value) { - ReusableStringStream rss; - rss << value; - if (value > Detail::hexThreshold) { - rss << " (0x" << std::hex << value << ')'; - } - return rss.str(); -} - -std::string StringMaker::convert(signed char value) { - if (value == '\r') { - return "'\\r'"; - } else if (value == '\f') { - return "'\\f'"; - } else if (value == '\n') { - return "'\\n'"; - } else if (value == '\t') { - return "'\\t'"; - } else if ('\0' <= value && value < ' ') { - return ::Catch::Detail::stringify(static_cast(value)); - } else { - char chstr[] = "' '"; - chstr[1] = value; - return chstr; - } -} -std::string StringMaker::convert(char c) { - return ::Catch::Detail::stringify(static_cast(c)); -} -std::string StringMaker::convert(unsigned char c) { - return ::Catch::Detail::stringify(static_cast(c)); -} - -int StringMaker::precision = 5; - -std::string StringMaker::convert(float value) { - return Detail::fpToString(value, precision) + 'f'; -} - -int StringMaker::precision = 10; - -std::string StringMaker::convert(double value) { - return Detail::fpToString(value, precision); -} - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/catch_tostring.hpp b/lib/Catch2/src/catch2/catch_tostring.hpp deleted file mode 100644 index 904caa7..0000000 --- a/lib/Catch2/src/catch2/catch_tostring.hpp +++ /dev/null @@ -1,669 +0,0 @@ - -// 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 -#ifndef CATCH_TOSTRING_HPP_INCLUDED -#define CATCH_TOSTRING_HPP_INCLUDED - - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#ifdef CATCH_CONFIG_CPP17_STRING_VIEW -#include -#endif - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4180) // We attempt to stream a function (address) by const&, which MSVC complains about but is harmless -#endif - -// We need a dummy global operator<< so we can bring it into Catch namespace later -struct Catch_global_namespace_dummy{}; -std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy); - -namespace Catch { - // Bring in global namespace operator<< for ADL lookup in - // `IsStreamInsertable` below. - using ::operator<<; - - namespace Detail { - - inline std::size_t catch_strnlen(const char *str, std::size_t n) { - auto ret = std::char_traits::find(str, n, '\0'); - if (ret != nullptr) { - return static_cast(ret - str); - } - return n; - } - - constexpr StringRef unprintableString = "{?}"_sr; - - //! Encases `string in quotes, and optionally escapes invisibles - std::string convertIntoString( StringRef string, bool escapeInvisibles ); - - //! Encases `string` in quotes, and escapes invisibles if user requested - //! it via CLI - std::string convertIntoString( StringRef string ); - - std::string rawMemoryToString( const void *object, std::size_t size ); - - template - std::string rawMemoryToString( const T& object ) { - return rawMemoryToString( &object, sizeof(object) ); - } - - template - class IsStreamInsertable { - template - static auto test(int) - -> decltype(std::declval() << std::declval(), std::true_type()); - - template - static auto test(...)->std::false_type; - - public: - static const bool value = decltype(test(0))::value; - }; - - template - std::string convertUnknownEnumToString( E e ); - - template - std::enable_if_t< - !std::is_enum::value && !std::is_base_of::value, - std::string> convertUnstreamable( T const& ) { - return std::string(Detail::unprintableString); - } - template - std::enable_if_t< - !std::is_enum::value && std::is_base_of::value, - std::string> convertUnstreamable(T const& ex) { - return ex.what(); - } - - - template - std::enable_if_t< - std::is_enum::value, - std::string> convertUnstreamable( T const& value ) { - return convertUnknownEnumToString( value ); - } - -#if defined(_MANAGED) - //! Convert a CLR string to a utf8 std::string - template - std::string clrReferenceToString( T^ ref ) { - if (ref == nullptr) - return std::string("null"); - auto bytes = System::Text::Encoding::UTF8->GetBytes(ref->ToString()); - cli::pin_ptr p = &bytes[0]; - return std::string(reinterpret_cast(p), bytes->Length); - } -#endif - - } // namespace Detail - - - // If we decide for C++14, change these to enable_if_ts - template - struct StringMaker { - template - static - std::enable_if_t<::Catch::Detail::IsStreamInsertable::value, std::string> - convert(const Fake& value) { - ReusableStringStream rss; - // NB: call using the function-like syntax to avoid ambiguity with - // user-defined templated operator<< under clang. - rss.operator<<(value); - return rss.str(); - } - - template - static - std::enable_if_t::value, std::string> - convert( const Fake& value ) { -#if !defined(CATCH_CONFIG_FALLBACK_STRINGIFIER) - return Detail::convertUnstreamable(value); -#else - return CATCH_CONFIG_FALLBACK_STRINGIFIER(value); -#endif - } - }; - - namespace Detail { - - // This function dispatches all stringification requests inside of Catch. - // Should be preferably called fully qualified, like ::Catch::Detail::stringify - template - std::string stringify(const T& e) { - return ::Catch::StringMaker>>::convert(e); - } - - template - std::string convertUnknownEnumToString( E e ) { - return ::Catch::Detail::stringify(static_cast>(e)); - } - -#if defined(_MANAGED) - template - std::string stringify( T^ e ) { - return ::Catch::StringMaker::convert(e); - } -#endif - - } // namespace Detail - - // Some predefined specializations - - template<> - struct StringMaker { - static std::string convert(const std::string& str); - }; - -#ifdef CATCH_CONFIG_CPP17_STRING_VIEW - template<> - struct StringMaker { - static std::string convert(std::string_view str); - }; -#endif - - template<> - struct StringMaker { - static std::string convert(char const * str); - }; - template<> - struct StringMaker { - static std::string convert(char * str); - }; - -#if defined(CATCH_CONFIG_WCHAR) - template<> - struct StringMaker { - static std::string convert(const std::wstring& wstr); - }; - -# ifdef CATCH_CONFIG_CPP17_STRING_VIEW - template<> - struct StringMaker { - static std::string convert(std::wstring_view str); - }; -# endif - - template<> - struct StringMaker { - static std::string convert(wchar_t const * str); - }; - template<> - struct StringMaker { - static std::string convert(wchar_t * str); - }; -#endif // CATCH_CONFIG_WCHAR - - template - struct StringMaker { - static std::string convert(char const* str) { - return Detail::convertIntoString( - StringRef( str, Detail::catch_strnlen( str, SZ ) ) ); - } - }; - template - struct StringMaker { - static std::string convert(signed char const* str) { - auto reinterpreted = reinterpret_cast(str); - return Detail::convertIntoString( - StringRef(reinterpreted, Detail::catch_strnlen(reinterpreted, SZ))); - } - }; - template - struct StringMaker { - static std::string convert(unsigned char const* str) { - auto reinterpreted = reinterpret_cast(str); - return Detail::convertIntoString( - StringRef(reinterpreted, Detail::catch_strnlen(reinterpreted, SZ))); - } - }; - -#if defined(CATCH_CONFIG_CPP17_BYTE) - template<> - struct StringMaker { - static std::string convert(std::byte value); - }; -#endif // defined(CATCH_CONFIG_CPP17_BYTE) - template<> - struct StringMaker { - static std::string convert(int value); - }; - template<> - struct StringMaker { - static std::string convert(long value); - }; - template<> - struct StringMaker { - static std::string convert(long long value); - }; - template<> - struct StringMaker { - static std::string convert(unsigned int value); - }; - template<> - struct StringMaker { - static std::string convert(unsigned long value); - }; - template<> - struct StringMaker { - static std::string convert(unsigned long long value); - }; - - template<> - struct StringMaker { - static std::string convert(bool b) { - using namespace std::string_literals; - return b ? "true"s : "false"s; - } - }; - - template<> - struct StringMaker { - static std::string convert(char c); - }; - template<> - struct StringMaker { - static std::string convert(signed char c); - }; - template<> - struct StringMaker { - static std::string convert(unsigned char c); - }; - - template<> - struct StringMaker { - static std::string convert(std::nullptr_t) { - using namespace std::string_literals; - return "nullptr"s; - } - }; - - template<> - struct StringMaker { - static std::string convert(float value); - CATCH_EXPORT static int precision; - }; - - template<> - struct StringMaker { - static std::string convert(double value); - CATCH_EXPORT static int precision; - }; - - template - struct StringMaker { - template - static std::string convert(U* p) { - if (p) { - return ::Catch::Detail::rawMemoryToString(p); - } else { - return "nullptr"; - } - } - }; - - template - struct StringMaker { - static std::string convert(R C::* p) { - if (p) { - return ::Catch::Detail::rawMemoryToString(p); - } else { - return "nullptr"; - } - } - }; - -#if defined(_MANAGED) - template - struct StringMaker { - static std::string convert( T^ ref ) { - return ::Catch::Detail::clrReferenceToString(ref); - } - }; -#endif - - namespace Detail { - template - std::string rangeToString(InputIterator first, Sentinel last) { - ReusableStringStream rss; - rss << "{ "; - if (first != last) { - rss << ::Catch::Detail::stringify(*first); - for (++first; first != last; ++first) - rss << ", " << ::Catch::Detail::stringify(*first); - } - rss << " }"; - return rss.str(); - } - } - -} // namespace Catch - -////////////////////////////////////////////////////// -// Separate std-lib types stringification, so it can be selectively enabled -// This means that we do not bring in their headers - -#if defined(CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS) -# define CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER -# define CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER -# define CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER -# define CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER -#endif - -// Separate std::pair specialization -#if defined(CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER) -#include -namespace Catch { - template - struct StringMaker > { - static std::string convert(const std::pair& pair) { - ReusableStringStream rss; - rss << "{ " - << ::Catch::Detail::stringify(pair.first) - << ", " - << ::Catch::Detail::stringify(pair.second) - << " }"; - return rss.str(); - } - }; -} -#endif // CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER - -#if defined(CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER) && defined(CATCH_CONFIG_CPP17_OPTIONAL) -#include -namespace Catch { - template - struct StringMaker > { - static std::string convert(const std::optional& optional) { - if (optional.has_value()) { - return ::Catch::Detail::stringify(*optional); - } else { - return "{ }"; - } - } - }; -} -#endif // CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER - -// Separate std::tuple specialization -#if defined(CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER) -#include -namespace Catch { - namespace Detail { - template< - typename Tuple, - std::size_t N = 0, - bool = (N < std::tuple_size::value) - > - struct TupleElementPrinter { - static void print(const Tuple& tuple, std::ostream& os) { - os << (N ? ", " : " ") - << ::Catch::Detail::stringify(std::get(tuple)); - TupleElementPrinter::print(tuple, os); - } - }; - - template< - typename Tuple, - std::size_t N - > - struct TupleElementPrinter { - static void print(const Tuple&, std::ostream&) {} - }; - - } - - - template - struct StringMaker> { - static std::string convert(const std::tuple& tuple) { - ReusableStringStream rss; - rss << '{'; - Detail::TupleElementPrinter>::print(tuple, rss.get()); - rss << " }"; - return rss.str(); - } - }; -} -#endif // CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER - -#if defined(CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER) && defined(CATCH_CONFIG_CPP17_VARIANT) -#include -namespace Catch { - template<> - struct StringMaker { - static std::string convert(const std::monostate&) { - return "{ }"; - } - }; - - template - struct StringMaker> { - static std::string convert(const std::variant& variant) { - if (variant.valueless_by_exception()) { - return "{valueless variant}"; - } else { - return std::visit( - [](const auto& value) { - return ::Catch::Detail::stringify(value); - }, - variant - ); - } - } - }; -} -#endif // CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER - -namespace Catch { - // Import begin/ end from std here - using std::begin; - using std::end; - - namespace Detail { - template - struct is_range_impl : std::false_type {}; - - template - struct is_range_impl()))>> : std::true_type {}; - } // namespace Detail - - template - struct is_range : Detail::is_range_impl {}; - -#if defined(_MANAGED) // Managed types are never ranges - template - struct is_range { - static const bool value = false; - }; -#endif - - template - std::string rangeToString( Range const& range ) { - return ::Catch::Detail::rangeToString( begin( range ), end( range ) ); - } - - // Handle vector specially - template - std::string rangeToString( std::vector const& v ) { - ReusableStringStream rss; - rss << "{ "; - bool first = true; - for( bool b : v ) { - if( first ) - first = false; - else - rss << ", "; - rss << ::Catch::Detail::stringify( b ); - } - rss << " }"; - return rss.str(); - } - - template - struct StringMaker::value && !::Catch::Detail::IsStreamInsertable::value>> { - static std::string convert( R const& range ) { - return rangeToString( range ); - } - }; - - template - struct StringMaker { - static std::string convert(T const(&arr)[SZ]) { - return rangeToString(arr); - } - }; - - -} // namespace Catch - -// Separate std::chrono::duration specialization -#include -#include -#include - - -namespace Catch { - -template -struct ratio_string { - static std::string symbol() { - Catch::ReusableStringStream rss; - rss << '[' << Ratio::num << '/' - << Ratio::den << ']'; - return rss.str(); - } -}; - -template <> -struct ratio_string { - static char symbol() { return 'a'; } -}; -template <> -struct ratio_string { - static char symbol() { return 'f'; } -}; -template <> -struct ratio_string { - static char symbol() { return 'p'; } -}; -template <> -struct ratio_string { - static char symbol() { return 'n'; } -}; -template <> -struct ratio_string { - static char symbol() { return 'u'; } -}; -template <> -struct ratio_string { - static char symbol() { return 'm'; } -}; - - //////////// - // std::chrono::duration specializations - template - struct StringMaker> { - static std::string convert(std::chrono::duration const& duration) { - ReusableStringStream rss; - rss << duration.count() << ' ' << ratio_string::symbol() << 's'; - return rss.str(); - } - }; - template - struct StringMaker>> { - static std::string convert(std::chrono::duration> const& duration) { - ReusableStringStream rss; - rss << duration.count() << " s"; - return rss.str(); - } - }; - template - struct StringMaker>> { - static std::string convert(std::chrono::duration> const& duration) { - ReusableStringStream rss; - rss << duration.count() << " m"; - return rss.str(); - } - }; - template - struct StringMaker>> { - static std::string convert(std::chrono::duration> const& duration) { - ReusableStringStream rss; - rss << duration.count() << " h"; - return rss.str(); - } - }; - - //////////// - // std::chrono::time_point specialization - // Generic time_point cannot be specialized, only std::chrono::time_point - template - struct StringMaker> { - static std::string convert(std::chrono::time_point const& time_point) { - return ::Catch::Detail::stringify(time_point.time_since_epoch()) + " since epoch"; - } - }; - // std::chrono::time_point specialization - template - struct StringMaker> { - static std::string convert(std::chrono::time_point const& time_point) { - auto converted = std::chrono::system_clock::to_time_t(time_point); - -#ifdef _MSC_VER - std::tm timeInfo = {}; - gmtime_s(&timeInfo, &converted); -#else - std::tm* timeInfo = std::gmtime(&converted); -#endif - - auto const timeStampSize = sizeof("2017-01-16T17:06:45Z"); - char timeStamp[timeStampSize]; - const char * const fmt = "%Y-%m-%dT%H:%M:%SZ"; - -#ifdef _MSC_VER - std::strftime(timeStamp, timeStampSize, fmt, &timeInfo); -#else - std::strftime(timeStamp, timeStampSize, fmt, timeInfo); -#endif - return std::string(timeStamp, timeStampSize - 1); - } - }; -} - -#include - -#define INTERNAL_CATCH_REGISTER_ENUM( enumName, ... ) \ -namespace Catch { \ - template<> struct StringMaker { \ - static std::string convert( enumName value ) { \ - static const auto& enumInfo = ::Catch::getMutableRegistryHub().getMutableEnumValuesRegistry().registerEnum( #enumName, #__VA_ARGS__, { __VA_ARGS__ } ); \ - return static_cast(enumInfo.lookup( static_cast( value ) )); \ - } \ - }; \ -} - -#define CATCH_REGISTER_ENUM( enumName, ... ) INTERNAL_CATCH_REGISTER_ENUM( enumName, __VA_ARGS__ ) - -#ifdef _MSC_VER -#pragma warning(pop) -#endif - -#endif // CATCH_TOSTRING_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_totals.cpp b/lib/Catch2/src/catch2/catch_totals.cpp deleted file mode 100644 index a3e2b38..0000000 --- a/lib/Catch2/src/catch2/catch_totals.cpp +++ /dev/null @@ -1,61 +0,0 @@ - -// 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 - -namespace Catch { - - Counts Counts::operator - ( Counts const& other ) const { - Counts diff; - diff.passed = passed - other.passed; - diff.failed = failed - other.failed; - diff.failedButOk = failedButOk - other.failedButOk; - return diff; - } - - Counts& Counts::operator += ( Counts const& other ) { - passed += other.passed; - failed += other.failed; - failedButOk += other.failedButOk; - return *this; - } - - std::uint64_t Counts::total() const { - return passed + failed + failedButOk; - } - bool Counts::allPassed() const { - return failed == 0 && failedButOk == 0; - } - bool Counts::allOk() const { - return failed == 0; - } - - Totals Totals::operator - ( Totals const& other ) const { - Totals diff; - diff.assertions = assertions - other.assertions; - diff.testCases = testCases - other.testCases; - return diff; - } - - Totals& Totals::operator += ( Totals const& other ) { - assertions += other.assertions; - testCases += other.testCases; - return *this; - } - - Totals Totals::delta( Totals const& prevTotals ) const { - Totals diff = *this - prevTotals; - if( diff.assertions.failed > 0 ) - ++diff.testCases.failed; - else if( diff.assertions.failedButOk > 0 ) - ++diff.testCases.failedButOk; - else - ++diff.testCases.passed; - return diff; - } - -} diff --git a/lib/Catch2/src/catch2/catch_totals.hpp b/lib/Catch2/src/catch2/catch_totals.hpp deleted file mode 100644 index 8dd360c..0000000 --- a/lib/Catch2/src/catch2/catch_totals.hpp +++ /dev/null @@ -1,40 +0,0 @@ - -// 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 -#ifndef CATCH_TOTALS_HPP_INCLUDED -#define CATCH_TOTALS_HPP_INCLUDED - -#include - -namespace Catch { - - struct Counts { - Counts operator - ( Counts const& other ) const; - Counts& operator += ( Counts const& other ); - - std::uint64_t total() const; - bool allPassed() const; - bool allOk() const; - - std::uint64_t passed = 0; - std::uint64_t failed = 0; - std::uint64_t failedButOk = 0; - }; - - struct Totals { - - Totals operator - ( Totals const& other ) const; - Totals& operator += ( Totals const& other ); - - Totals delta( Totals const& prevTotals ) const; - - Counts assertions; - Counts testCases; - }; -} - -#endif // CATCH_TOTALS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_translate_exception.hpp b/lib/Catch2/src/catch2/catch_translate_exception.hpp deleted file mode 100644 index 2dbeb17..0000000 --- a/lib/Catch2/src/catch2/catch_translate_exception.hpp +++ /dev/null @@ -1,84 +0,0 @@ - -// 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 -#ifndef CATCH_TRANSLATE_EXCEPTION_HPP_INCLUDED -#define CATCH_TRANSLATE_EXCEPTION_HPP_INCLUDED - -#include -#include -#include - -#include - -namespace Catch { - - class ExceptionTranslatorRegistrar { - template - class ExceptionTranslator : public IExceptionTranslator { - public: - - ExceptionTranslator( std::string(*translateFunction)( T const& ) ) - : m_translateFunction( translateFunction ) - {} - - std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const override { -#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) - try { - if( it == itEnd ) - std::rethrow_exception(std::current_exception()); - else - return (*it)->translate( it+1, itEnd ); - } - catch( T const& ex ) { - return m_translateFunction( ex ); - } -#else - return "You should never get here!"; -#endif - } - - protected: - std::string(*m_translateFunction)( T const& ); - }; - - public: - template - ExceptionTranslatorRegistrar( std::string(*translateFunction)( T const& ) ) { - getMutableRegistryHub().registerTranslator( - Detail::make_unique>(translateFunction) - ); - } - }; - -} // namespace Catch - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_TRANSLATE_EXCEPTION2( translatorName, signature ) \ - static std::string translatorName( signature ); \ - CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &translatorName ); } \ - CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \ - static std::string translatorName( signature ) - -#define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION2( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature ) - -#if defined(CATCH_CONFIG_DISABLE) - #define INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( translatorName, signature) \ - static std::string translatorName( signature ) -#endif - - -// This macro is always prefixed -#if !defined(CATCH_CONFIG_DISABLE) -#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) -#else -#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature ) -#endif - - -#endif // CATCH_TRANSLATE_EXCEPTION_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_user_config.hpp.in b/lib/Catch2/src/catch2/catch_user_config.hpp.in deleted file mode 100644 index 3f6b10e..0000000 --- a/lib/Catch2/src/catch2/catch_user_config.hpp.in +++ /dev/null @@ -1,210 +0,0 @@ - -// 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 - * **AUTOGENERATED FROM CMAKE CONFIGURATION** - * - * Contains materialized compile-time configuration provided to Catch2's - * CMake configuration. All compile-time configuration options need to - * be here, and also documented in `docs/configuration.md`. - */ - -#ifndef CATCH_USER_CONFIG_HPP_INCLUDED -#define CATCH_USER_CONFIG_HPP_INCLUDED - - -// ------ -// Overridable compilation flags, -// these can have 3 "states": Force Yes, Force No, Use Default. -// Setting both Force Yes and Force No is an error -// ------ - -#cmakedefine CATCH_CONFIG_ANDROID_LOGWRITE -#cmakedefine CATCH_CONFIG_NO_ANDROID_LOGWRITE - -#if defined( CATCH_CONFIG_ANDROID_LOGWRITE ) && \ - defined( CATCH_CONFIG_NO_ANDROID_LOGWRITE ) -# error Cannot force ANDROID_LOGWRITE to both ON and OFF -#endif - -#cmakedefine CATCH_CONFIG_COLOUR_WIN32 -#cmakedefine CATCH_CONFIG_NO_COLOUR_WIN32 - -#if defined( CATCH_CONFIG_COLOUR_WIN32 ) && \ - defined( CATCH_CONFIG_NO_COLOUR_WIN32 ) -# error Cannot force COLOUR_WIN32 to be ON and OFF -#endif - -#cmakedefine CATCH_CONFIG_COUNTER -#cmakedefine CATCH_CONFIG_NO_COUNTER - -#if defined( CATCH_CONFIG_COUNTER ) && \ - defined( CATCH_CONFIG_NO_COUNTER ) -# error Cannot force COUNTER to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_CPP11_TO_STRING -#cmakedefine CATCH_CONFIG_NO_CPP11_TO_STRING - -#if defined( CATCH_CONFIG_CPP11_TO_STRING ) && \ - defined( CATCH_CONFIG_NO_CPP11_TO_STRING ) -# error Cannot force CPP11_TO_STRING to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_CPP17_BYTE -#cmakedefine CATCH_CONFIG_NO_CPP17_BYTE - -#if defined( CATCH_CONFIG_CPP17_BYTE ) && \ - defined( CATCH_CONFIG_NO_CPP17_BYTE ) -# error Cannot force CPP17_BYTE to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_CPP17_OPTIONAL -#cmakedefine CATCH_CONFIG_NO_CPP17_OPTIONAL - -#if defined( CATCH_CONFIG_CPP17_OPTIONAL ) && \ - defined( CATCH_CONFIG_NO_CPP17_OPTIONAL ) -# error Cannot force CPP17_OPTIONAL to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_CPP17_STRING_VIEW -#cmakedefine CATCH_CONFIG_NO_CPP17_STRING_VIEW - -#if defined( CATCH_CONFIG_CPP17_STRING_VIEW ) && \ - defined( CATCH_CONFIG_NO_CPP17_STRING_VIEW ) -# error Cannot force CPP17_STRING_VIEW to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS -#cmakedefine CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS - -#if defined( CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS ) && \ - defined( CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS ) -# error Cannot force CPP17_UNCAUGHT_EXCEPTIONS to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_CPP17_VARIANT -#cmakedefine CATCH_CONFIG_NO_CPP17_VARIANT - -#if defined( CATCH_CONFIG_CPP17_VARIANT ) && \ - defined( CATCH_CONFIG_NO_CPP17_VARIANT ) -# error Cannot force CPP17_VARIANT to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_GLOBAL_NEXTAFTER -#cmakedefine CATCH_CONFIG_NO_GLOBAL_NEXTAFTER - -#if defined( CATCH_CONFIG_GLOBAL_NEXTAFTER ) && \ - defined( CATCH_CONFIG_NO_GLOBAL_NEXTAFTER ) -# error Cannot force GLOBAL_NEXTAFTER to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_POSIX_SIGNALS -#cmakedefine CATCH_CONFIG_NO_POSIX_SIGNALS - -#if defined( CATCH_CONFIG_POSIX_SIGNALS ) && \ - defined( CATCH_CONFIG_NO_POSIX_SIGNALS ) -# error Cannot force POSIX_SIGNALS to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_GETENV -#cmakedefine CATCH_CONFIG_NO_GETENV - -#if defined( CATCH_CONFIG_GETENV ) && \ - defined( CATCH_CONFIG_NO_GETENV ) -# error Cannot force GETENV to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_USE_ASYNC -#cmakedefine CATCH_CONFIG_NO_USE_ASYNC - -#if defined( CATCH_CONFIG_USE_ASYNC ) && \ - defined( CATCH_CONFIG_NO_USE_ASYNC ) -# error Cannot force USE_ASYNC to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_WCHAR -#cmakedefine CATCH_CONFIG_NO_WCHAR - -#if defined( CATCH_CONFIG_WCHAR ) && \ - defined( CATCH_CONFIG_NO_WCHAR ) -# error Cannot force WCHAR to both ON and OFF -#endif - - - -#cmakedefine CATCH_CONFIG_WINDOWS_SEH -#cmakedefine CATCH_CONFIG_NO_WINDOWS_SEH - -#if defined( CATCH_CONFIG_WINDOWS_SEH ) && \ - defined( CATCH_CONFIG_NO_WINDOWS_SEH ) -# error Cannot force WINDOWS_SEH to both ON and OFF -#endif - - -// ------ -// Simple toggle defines -// their value is never used and they cannot be overriden -// ------ - - -#cmakedefine CATCH_CONFIG_BAZEL_SUPPORT -#cmakedefine CATCH_CONFIG_DISABLE_EXCEPTIONS -#cmakedefine CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER -#cmakedefine CATCH_CONFIG_DISABLE -#cmakedefine CATCH_CONFIG_DISABLE_STRINGIFICATION -#cmakedefine CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS -#cmakedefine CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER -#cmakedefine CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER -#cmakedefine CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER -#cmakedefine CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER -#cmakedefine CATCH_CONFIG_EXPERIMENTAL_REDIRECT -#cmakedefine CATCH_CONFIG_FAST_COMPILE -#cmakedefine CATCH_CONFIG_NOSTDOUT -#cmakedefine CATCH_CONFIG_PREFIX_ALL -#cmakedefine CATCH_CONFIG_WINDOWS_CRTDBG - -#cmakedefine CATCH_CONFIG_SHARED_LIBRARY - - -// ------ -// "Variable" defines, these have actual values -// ------ - -#define CATCH_CONFIG_DEFAULT_REPORTER "@CATCH_CONFIG_DEFAULT_REPORTER@" -#define CATCH_CONFIG_CONSOLE_WIDTH @CATCH_CONFIG_CONSOLE_WIDTH@ - -// Unlike the macros above, CATCH_CONFIG_FALLBACK_STRINGIFIER does not -// have a good default value, so we cannot always define it, and cannot -// even expose it as a variable in CMake. The users will have to find -// out about it from docs and set it only if they use it. -#cmakedefine CATCH_CONFIG_FALLBACK_STRINGIFIER @CATCH_CONFIG_FALLBACK_STRINGIFIER@ - -#endif // CATCH_USER_CONFIG_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_version.cpp b/lib/Catch2/src/catch2/catch_version.cpp deleted file mode 100644 index 027f0f4..0000000 --- a/lib/Catch2/src/catch2/catch_version.cpp +++ /dev/null @@ -1,43 +0,0 @@ - -// 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 -#include - -namespace Catch { - - Version::Version - ( unsigned int _majorVersion, - unsigned int _minorVersion, - unsigned int _patchNumber, - char const * const _branchName, - unsigned int _buildNumber ) - : majorVersion( _majorVersion ), - minorVersion( _minorVersion ), - patchNumber( _patchNumber ), - branchName( _branchName ), - buildNumber( _buildNumber ) - {} - - std::ostream& operator << ( std::ostream& os, Version const& version ) { - os << version.majorVersion << '.' - << version.minorVersion << '.' - << version.patchNumber; - // branchName is never null -> 0th char is \0 if it is empty - if (version.branchName[0]) { - os << '-' << version.branchName - << '.' << version.buildNumber; - } - return os; - } - - Version const& libraryVersion() { - static Version version( 3, 2, 0, "", 0 ); - return version; - } - -} diff --git a/lib/Catch2/src/catch2/catch_version.hpp b/lib/Catch2/src/catch2/catch_version.hpp deleted file mode 100644 index af698fa..0000000 --- a/lib/Catch2/src/catch2/catch_version.hpp +++ /dev/null @@ -1,39 +0,0 @@ - -// 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 -#ifndef CATCH_VERSION_HPP_INCLUDED -#define CATCH_VERSION_HPP_INCLUDED - -#include - -namespace Catch { - - // Versioning information - struct Version { - Version( Version const& ) = delete; - Version& operator=( Version const& ) = delete; - Version( unsigned int _majorVersion, - unsigned int _minorVersion, - unsigned int _patchNumber, - char const * const _branchName, - unsigned int _buildNumber ); - - unsigned int const majorVersion; - unsigned int const minorVersion; - unsigned int const patchNumber; - - // buildNumber is only used if branchName is not null - char const * const branchName; - unsigned int const buildNumber; - - friend std::ostream& operator << ( std::ostream& os, Version const& version ); - }; - - Version const& libraryVersion(); -} - -#endif // CATCH_VERSION_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/catch_version_macros.hpp b/lib/Catch2/src/catch2/catch_version_macros.hpp deleted file mode 100644 index 36185fc..0000000 --- a/lib/Catch2/src/catch2/catch_version_macros.hpp +++ /dev/null @@ -1,15 +0,0 @@ - -// 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 -#ifndef CATCH_VERSION_MACROS_HPP_INCLUDED -#define CATCH_VERSION_MACROS_HPP_INCLUDED - -#define CATCH_VERSION_MAJOR 3 -#define CATCH_VERSION_MINOR 2 -#define CATCH_VERSION_PATCH 0 - -#endif // CATCH_VERSION_MACROS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/generators/catch_generator_exception.cpp b/lib/Catch2/src/catch2/generators/catch_generator_exception.cpp deleted file mode 100644 index 6432403..0000000 --- a/lib/Catch2/src/catch2/generators/catch_generator_exception.cpp +++ /dev/null @@ -1,17 +0,0 @@ - -// 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 - -namespace Catch { - - const char* GeneratorException::what() const noexcept { - return m_msg; - } - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/generators/catch_generator_exception.hpp b/lib/Catch2/src/catch2/generators/catch_generator_exception.hpp deleted file mode 100644 index f353042..0000000 --- a/lib/Catch2/src/catch2/generators/catch_generator_exception.hpp +++ /dev/null @@ -1,31 +0,0 @@ - -// 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 -#ifndef CATCH_GENERATOR_EXCEPTION_HPP_INCLUDED -#define CATCH_GENERATOR_EXCEPTION_HPP_INCLUDED - -#include - -namespace Catch { - - // Exception type to be thrown when a Generator runs into an error, - // e.g. it cannot initialize the first return value based on - // runtime information - class GeneratorException : public std::exception { - const char* const m_msg = ""; - - public: - GeneratorException(const char* msg): - m_msg(msg) - {} - - const char* what() const noexcept override final; - }; - -} // end namespace Catch - -#endif // CATCH_GENERATOR_EXCEPTION_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/generators/catch_generators.cpp b/lib/Catch2/src/catch2/generators/catch_generators.cpp deleted file mode 100644 index 7cc5aa8..0000000 --- a/lib/Catch2/src/catch2/generators/catch_generators.cpp +++ /dev/null @@ -1,35 +0,0 @@ - -// 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 -#include -#include -#include - -namespace Catch { - - IGeneratorTracker::~IGeneratorTracker() = default; - -namespace Generators { - -namespace Detail { - - [[noreturn]] - void throw_generator_exception(char const* msg) { - Catch::throw_exception(GeneratorException{ msg }); - } -} // end namespace Detail - - GeneratorUntypedBase::~GeneratorUntypedBase() = default; - - auto acquireGeneratorTracker(StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& { - return getResultCapture().acquireGeneratorTracker( generatorName, lineInfo ); - } - -} // namespace Generators -} // namespace Catch diff --git a/lib/Catch2/src/catch2/generators/catch_generators.hpp b/lib/Catch2/src/catch2/generators/catch_generators.hpp deleted file mode 100644 index 8fc7e58..0000000 --- a/lib/Catch2/src/catch2/generators/catch_generators.hpp +++ /dev/null @@ -1,241 +0,0 @@ - -// 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 -#ifndef CATCH_GENERATORS_HPP_INCLUDED -#define CATCH_GENERATORS_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace Catch { - -namespace Generators { - -namespace Detail { - - //! Throws GeneratorException with the provided message - [[noreturn]] - void throw_generator_exception(char const * msg); - -} // end namespace detail - - template - class IGenerator : public GeneratorUntypedBase { - std::string stringifyImpl() const override { - return ::Catch::Detail::stringify( get() ); - } - - public: - ~IGenerator() override = default; - IGenerator() = default; - IGenerator(IGenerator const&) = default; - IGenerator& operator=(IGenerator const&) = default; - - - // Returns the current element of the generator - // - // \Precondition The generator is either freshly constructed, - // or the last call to `next()` returned true - virtual T const& get() const = 0; - using type = T; - }; - - template - using GeneratorPtr = Catch::Detail::unique_ptr>; - - template - class GeneratorWrapper final { - GeneratorPtr m_generator; - public: - //! Takes ownership of the passed pointer. - GeneratorWrapper(IGenerator* generator): - m_generator(generator) {} - GeneratorWrapper(GeneratorPtr generator): - m_generator(CATCH_MOVE(generator)) {} - - T const& get() const { - return m_generator->get(); - } - bool next() { - return m_generator->countedNext(); - } - }; - - - template - class SingleValueGenerator final : public IGenerator { - T m_value; - public: - SingleValueGenerator(T const& value) : - m_value(value) - {} - SingleValueGenerator(T&& value): - m_value(CATCH_MOVE(value)) - {} - - T const& get() const override { - return m_value; - } - bool next() override { - return false; - } - }; - - template - class FixedValuesGenerator final : public IGenerator { - static_assert(!std::is_same::value, - "FixedValuesGenerator does not support bools because of std::vector" - "specialization, use SingleValue Generator instead."); - std::vector m_values; - size_t m_idx = 0; - public: - FixedValuesGenerator( std::initializer_list values ) : m_values( values ) {} - - T const& get() const override { - return m_values[m_idx]; - } - bool next() override { - ++m_idx; - return m_idx < m_values.size(); - } - }; - - template > - GeneratorWrapper value( T&& value ) { - return GeneratorWrapper( - Catch::Detail::make_unique>( - CATCH_FORWARD( value ) ) ); - } - template - GeneratorWrapper values(std::initializer_list values) { - return GeneratorWrapper(Catch::Detail::make_unique>(values)); - } - - template - class Generators : public IGenerator { - std::vector> m_generators; - size_t m_current = 0; - - void add_generator( GeneratorWrapper&& generator ) { - m_generators.emplace_back( CATCH_MOVE( generator ) ); - } - void add_generator( T const& val ) { - m_generators.emplace_back( value( val ) ); - } - void add_generator( T&& val ) { - m_generators.emplace_back( value( CATCH_MOVE( val ) ) ); - } - template - std::enable_if_t, T>::value> - add_generator( U&& val ) { - add_generator( T( CATCH_FORWARD( val ) ) ); - } - - template void add_generators( U&& valueOrGenerator ) { - add_generator( CATCH_FORWARD( valueOrGenerator ) ); - } - - template - void add_generators( U&& valueOrGenerator, Gs&&... moreGenerators ) { - add_generator( CATCH_FORWARD( valueOrGenerator ) ); - add_generators( CATCH_FORWARD( moreGenerators )... ); - } - - public: - template - Generators(Gs &&... moreGenerators) { - m_generators.reserve(sizeof...(Gs)); - add_generators(CATCH_FORWARD(moreGenerators)...); - } - - T const& get() const override { - return m_generators[m_current].get(); - } - - bool next() override { - if (m_current >= m_generators.size()) { - return false; - } - const bool current_status = m_generators[m_current].next(); - if (!current_status) { - ++m_current; - } - return m_current < m_generators.size(); - } - }; - - - template - GeneratorWrapper...>> - table( std::initializer_list...>> tuples ) { - return values>( tuples ); - } - - // Tag type to signal that a generator sequence should convert arguments to a specific type - template - struct as {}; - - template - auto makeGenerators( GeneratorWrapper&& generator, Gs &&... moreGenerators ) -> Generators { - return Generators(CATCH_MOVE(generator), CATCH_FORWARD(moreGenerators)...); - } - template - auto makeGenerators( GeneratorWrapper&& generator ) -> Generators { - return Generators(CATCH_MOVE(generator)); - } - template - auto makeGenerators( T&& val, Gs &&... moreGenerators ) -> Generators> { - return makeGenerators( value( CATCH_FORWARD( val ) ), CATCH_FORWARD( moreGenerators )... ); - } - template - auto makeGenerators( as, U&& val, Gs &&... moreGenerators ) -> Generators { - return makeGenerators( value( T( CATCH_FORWARD( val ) ) ), CATCH_FORWARD( moreGenerators )... ); - } - - auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker&; - - template - // Note: The type after -> is weird, because VS2015 cannot parse - // the expression used in the typedef inside, when it is in - // return type. Yeah. - auto generate( StringRef generatorName, SourceLineInfo const& lineInfo, L const& generatorExpression ) -> decltype(std::declval().get()) { - using UnderlyingType = typename decltype(generatorExpression())::type; - - IGeneratorTracker& tracker = acquireGeneratorTracker( generatorName, lineInfo ); - if (!tracker.hasGenerator()) { - tracker.setGenerator(Catch::Detail::make_unique>(generatorExpression())); - } - - auto const& generator = static_cast const&>( *tracker.getGenerator() ); - return generator.get(); - } - -} // namespace Generators -} // namespace Catch - -#define GENERATE( ... ) \ - Catch::Generators::generate( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \ - CATCH_INTERNAL_LINEINFO, \ - [ ]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace) -#define GENERATE_COPY( ... ) \ - Catch::Generators::generate( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \ - CATCH_INTERNAL_LINEINFO, \ - [=]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace) -#define GENERATE_REF( ... ) \ - Catch::Generators::generate( INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \ - CATCH_INTERNAL_LINEINFO, \ - [&]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace) - -#endif // CATCH_GENERATORS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/generators/catch_generators_adapters.hpp b/lib/Catch2/src/catch2/generators/catch_generators_adapters.hpp deleted file mode 100644 index d5fc1e1..0000000 --- a/lib/Catch2/src/catch2/generators/catch_generators_adapters.hpp +++ /dev/null @@ -1,241 +0,0 @@ - -// 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 -#ifndef CATCH_GENERATORS_ADAPTERS_HPP_INCLUDED -#define CATCH_GENERATORS_ADAPTERS_HPP_INCLUDED - -#include -#include -#include - -#include - -namespace Catch { -namespace Generators { - - template - class TakeGenerator final : public IGenerator { - GeneratorWrapper m_generator; - size_t m_returned = 0; - size_t m_target; - public: - TakeGenerator(size_t target, GeneratorWrapper&& generator): - m_generator(CATCH_MOVE(generator)), - m_target(target) - { - assert(target != 0 && "Empty generators are not allowed"); - } - T const& get() const override { - return m_generator.get(); - } - bool next() override { - ++m_returned; - if (m_returned >= m_target) { - return false; - } - - const auto success = m_generator.next(); - // If the underlying generator does not contain enough values - // then we cut short as well - if (!success) { - m_returned = m_target; - } - return success; - } - }; - - template - GeneratorWrapper take(size_t target, GeneratorWrapper&& generator) { - return GeneratorWrapper(Catch::Detail::make_unique>(target, CATCH_MOVE(generator))); - } - - - template - class FilterGenerator final : public IGenerator { - GeneratorWrapper m_generator; - Predicate m_predicate; - public: - template - FilterGenerator(P&& pred, GeneratorWrapper&& generator): - m_generator(CATCH_MOVE(generator)), - m_predicate(CATCH_FORWARD(pred)) - { - if (!m_predicate(m_generator.get())) { - // It might happen that there are no values that pass the - // filter. In that case we throw an exception. - auto has_initial_value = next(); - if (!has_initial_value) { - Detail::throw_generator_exception("No valid value found in filtered generator"); - } - } - } - - T const& get() const override { - return m_generator.get(); - } - - bool next() override { - bool success = m_generator.next(); - if (!success) { - return false; - } - while (!m_predicate(m_generator.get()) && (success = m_generator.next()) == true); - return success; - } - }; - - - template - GeneratorWrapper filter(Predicate&& pred, GeneratorWrapper&& generator) { - return GeneratorWrapper(Catch::Detail::make_unique>(CATCH_FORWARD(pred), CATCH_MOVE(generator))); - } - - template - class RepeatGenerator final : public IGenerator { - static_assert(!std::is_same::value, - "RepeatGenerator currently does not support bools" - "because of std::vector specialization"); - GeneratorWrapper m_generator; - mutable std::vector m_returned; - size_t m_target_repeats; - size_t m_current_repeat = 0; - size_t m_repeat_index = 0; - public: - RepeatGenerator(size_t repeats, GeneratorWrapper&& generator): - m_generator(CATCH_MOVE(generator)), - m_target_repeats(repeats) - { - assert(m_target_repeats > 0 && "Repeat generator must repeat at least once"); - } - - T const& get() const override { - if (m_current_repeat == 0) { - m_returned.push_back(m_generator.get()); - return m_returned.back(); - } - return m_returned[m_repeat_index]; - } - - bool next() override { - // There are 2 basic cases: - // 1) We are still reading the generator - // 2) We are reading our own cache - - // In the first case, we need to poke the underlying generator. - // If it happily moves, we are left in that state, otherwise it is time to start reading from our cache - if (m_current_repeat == 0) { - const auto success = m_generator.next(); - if (!success) { - ++m_current_repeat; - } - return m_current_repeat < m_target_repeats; - } - - // In the second case, we need to move indices forward and check that we haven't run up against the end - ++m_repeat_index; - if (m_repeat_index == m_returned.size()) { - m_repeat_index = 0; - ++m_current_repeat; - } - return m_current_repeat < m_target_repeats; - } - }; - - template - GeneratorWrapper repeat(size_t repeats, GeneratorWrapper&& generator) { - return GeneratorWrapper(Catch::Detail::make_unique>(repeats, CATCH_MOVE(generator))); - } - - template - class MapGenerator final : public IGenerator { - // TBD: provide static assert for mapping function, for friendly error message - GeneratorWrapper m_generator; - Func m_function; - // To avoid returning dangling reference, we have to save the values - T m_cache; - public: - template - MapGenerator(F2&& function, GeneratorWrapper&& generator) : - m_generator(CATCH_MOVE(generator)), - m_function(CATCH_FORWARD(function)), - m_cache(m_function(m_generator.get())) - {} - - T const& get() const override { - return m_cache; - } - bool next() override { - const auto success = m_generator.next(); - if (success) { - m_cache = m_function(m_generator.get()); - } - return success; - } - }; - - template > - GeneratorWrapper map(Func&& function, GeneratorWrapper&& generator) { - return GeneratorWrapper( - Catch::Detail::make_unique>(CATCH_FORWARD(function), CATCH_MOVE(generator)) - ); - } - - template - GeneratorWrapper map(Func&& function, GeneratorWrapper&& generator) { - return GeneratorWrapper( - Catch::Detail::make_unique>(CATCH_FORWARD(function), CATCH_MOVE(generator)) - ); - } - - template - class ChunkGenerator final : public IGenerator> { - std::vector m_chunk; - size_t m_chunk_size; - GeneratorWrapper m_generator; - bool m_used_up = false; - public: - ChunkGenerator(size_t size, GeneratorWrapper generator) : - m_chunk_size(size), m_generator(CATCH_MOVE(generator)) - { - m_chunk.reserve(m_chunk_size); - if (m_chunk_size != 0) { - m_chunk.push_back(m_generator.get()); - for (size_t i = 1; i < m_chunk_size; ++i) { - if (!m_generator.next()) { - Detail::throw_generator_exception("Not enough values to initialize the first chunk"); - } - m_chunk.push_back(m_generator.get()); - } - } - } - std::vector const& get() const override { - return m_chunk; - } - bool next() override { - m_chunk.clear(); - for (size_t idx = 0; idx < m_chunk_size; ++idx) { - if (!m_generator.next()) { - return false; - } - m_chunk.push_back(m_generator.get()); - } - return true; - } - }; - - template - GeneratorWrapper> chunk(size_t size, GeneratorWrapper&& generator) { - return GeneratorWrapper>( - Catch::Detail::make_unique>(size, CATCH_MOVE(generator)) - ); - } - -} // namespace Generators -} // namespace Catch - - -#endif // CATCH_GENERATORS_ADAPTERS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/generators/catch_generators_all.hpp b/lib/Catch2/src/catch2/generators/catch_generators_all.hpp deleted file mode 100644 index c12d314..0000000 --- a/lib/Catch2/src/catch2/generators/catch_generators_all.hpp +++ /dev/null @@ -1,30 +0,0 @@ - -// 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 - * This is a convenience header for Catch2's Generator support. It includes - * **all** of Catch2 headers related to generators. - * - * Generally the Catch2 users should use specific includes they need, - * but this header can be used instead for ease-of-experimentation, or - * just plain convenience, at the cost of (significantly) increased - * compilation times. - * - * When a new header is added to either the `generators` folder, - * or to the corresponding internal subfolder, it should be added here. - */ - -#ifndef CATCH_GENERATORS_ALL_HPP_INCLUDED -#define CATCH_GENERATORS_ALL_HPP_INCLUDED - -#include -#include -#include -#include -#include - -#endif // CATCH_GENERATORS_ALL_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/generators/catch_generators_random.cpp b/lib/Catch2/src/catch2/generators/catch_generators_random.cpp deleted file mode 100644 index 2e3390f..0000000 --- a/lib/Catch2/src/catch2/generators/catch_generators_random.cpp +++ /dev/null @@ -1,13 +0,0 @@ - -// 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 - -#include - -std::uint32_t Catch::Generators::Detail::getSeed() { return sharedRng()(); } diff --git a/lib/Catch2/src/catch2/generators/catch_generators_random.hpp b/lib/Catch2/src/catch2/generators/catch_generators_random.hpp deleted file mode 100644 index bcd4888..0000000 --- a/lib/Catch2/src/catch2/generators/catch_generators_random.hpp +++ /dev/null @@ -1,98 +0,0 @@ - -// 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 -#ifndef CATCH_GENERATORS_RANDOM_HPP_INCLUDED -#define CATCH_GENERATORS_RANDOM_HPP_INCLUDED - -#include -#include -#include - -#include - -namespace Catch { -namespace Generators { -namespace Detail { - // Returns a suitable seed for a random floating generator based off - // the primary internal rng. It does so by taking current value from - // the rng and returning it as the seed. - std::uint32_t getSeed(); -} - -template -class RandomFloatingGenerator final : public IGenerator { - Catch::SimplePcg32 m_rng; - std::uniform_real_distribution m_dist; - Float m_current_number; -public: - RandomFloatingGenerator( Float a, Float b, std::uint32_t seed ): - m_rng(seed), - m_dist(a, b) { - static_cast(next()); - } - - Float const& get() const override { - return m_current_number; - } - bool next() override { - m_current_number = m_dist(m_rng); - return true; - } -}; - -template -class RandomIntegerGenerator final : public IGenerator { - Catch::SimplePcg32 m_rng; - std::uniform_int_distribution m_dist; - Integer m_current_number; -public: - RandomIntegerGenerator( Integer a, Integer b, std::uint32_t seed ): - m_rng(seed), - m_dist(a, b) { - static_cast(next()); - } - - Integer const& get() const override { - return m_current_number; - } - bool next() override { - m_current_number = m_dist(m_rng); - return true; - } -}; - -template -std::enable_if_t::value, GeneratorWrapper> -random(T a, T b) { - static_assert( - !std::is_same::value && - !std::is_same::value && - !std::is_same::value && - !std::is_same::value && - !std::is_same::value && - !std::is_same::value, - "The requested type is not supported by the underlying random distributions from std" ); - return GeneratorWrapper( - Catch::Detail::make_unique>(a, b, Detail::getSeed()) - ); -} - -template -std::enable_if_t::value, -GeneratorWrapper> -random(T a, T b) { - return GeneratorWrapper( - Catch::Detail::make_unique>(a, b, Detail::getSeed()) - ); -} - - -} // namespace Generators -} // namespace Catch - - -#endif // CATCH_GENERATORS_RANDOM_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/generators/catch_generators_range.hpp b/lib/Catch2/src/catch2/generators/catch_generators_range.hpp deleted file mode 100644 index 495acb9..0000000 --- a/lib/Catch2/src/catch2/generators/catch_generators_range.hpp +++ /dev/null @@ -1,110 +0,0 @@ - -// 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 -#ifndef CATCH_GENERATORS_RANGE_HPP_INCLUDED -#define CATCH_GENERATORS_RANGE_HPP_INCLUDED - -#include - -#include -#include - -namespace Catch { -namespace Generators { - - -template -class RangeGenerator final : public IGenerator { - T m_current; - T m_end; - T m_step; - bool m_positive; - -public: - RangeGenerator(T const& start, T const& end, T const& step): - m_current(start), - m_end(end), - m_step(step), - m_positive(m_step > T(0)) - { - assert(m_current != m_end && "Range start and end cannot be equal"); - assert(m_step != T(0) && "Step size cannot be zero"); - assert(((m_positive && m_current <= m_end) || (!m_positive && m_current >= m_end)) && "Step moves away from end"); - } - - RangeGenerator(T const& start, T const& end): - RangeGenerator(start, end, (start < end) ? T(1) : T(-1)) - {} - - T const& get() const override { - return m_current; - } - - bool next() override { - m_current += m_step; - return (m_positive) ? (m_current < m_end) : (m_current > m_end); - } -}; - -template -GeneratorWrapper range(T const& start, T const& end, T const& step) { - static_assert(std::is_arithmetic::value && !std::is_same::value, "Type must be numeric"); - return GeneratorWrapper(Catch::Detail::make_unique>(start, end, step)); -} - -template -GeneratorWrapper range(T const& start, T const& end) { - static_assert(std::is_integral::value && !std::is_same::value, "Type must be an integer"); - return GeneratorWrapper(Catch::Detail::make_unique>(start, end)); -} - - -template -class IteratorGenerator final : public IGenerator { - static_assert(!std::is_same::value, - "IteratorGenerator currently does not support bools" - "because of std::vector specialization"); - - std::vector m_elems; - size_t m_current = 0; -public: - template - IteratorGenerator(InputIterator first, InputSentinel last):m_elems(first, last) { - if (m_elems.empty()) { - Detail::throw_generator_exception("IteratorGenerator received no valid values"); - } - } - - T const& get() const override { - return m_elems[m_current]; - } - - bool next() override { - ++m_current; - return m_current != m_elems.size(); - } -}; - -template ::value_type> -GeneratorWrapper from_range(InputIterator from, InputSentinel to) { - return GeneratorWrapper(Catch::Detail::make_unique>(from, to)); -} - -template -GeneratorWrapper from_range(Container const& cnt) { - return GeneratorWrapper(Catch::Detail::make_unique>(cnt.begin(), cnt.end())); -} - - -} // namespace Generators -} // namespace Catch - - -#endif // CATCH_GENERATORS_RANGE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_all.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_all.hpp deleted file mode 100644 index 87b746d..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_all.hpp +++ /dev/null @@ -1,37 +0,0 @@ - -// 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 - * This is a convenience header for Catch2's interfaces. It includes - * **all** of Catch2 headers related to interfaces. - * - * Generally the Catch2 users should use specific includes they need, - * but this header can be used instead for ease-of-experimentation, or - * just plain convenience, at the cost of somewhat increased compilation - * times. - * - * When a new header is added to either the `interfaces` folder, or to - * the corresponding internal subfolder, it should be added here. - */ - - -#ifndef CATCH_INTERFACES_ALL_HPP_INCLUDED -#define CATCH_INTERFACES_ALL_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#endif // CATCH_INTERFACES_ALL_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_capture.cpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_capture.cpp deleted file mode 100644 index 9b40ee5..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_capture.cpp +++ /dev/null @@ -1,13 +0,0 @@ - -// 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 - -namespace Catch { - IResultCapture::~IResultCapture() = default; -} diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_capture.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_capture.hpp deleted file mode 100644 index ac25a8c..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_capture.hpp +++ /dev/null @@ -1,96 +0,0 @@ - -// 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 -#ifndef CATCH_INTERFACES_CAPTURE_HPP_INCLUDED -#define CATCH_INTERFACES_CAPTURE_HPP_INCLUDED - -#include -#include - -#include -#include - -namespace Catch { - - class AssertionResult; - struct AssertionInfo; - struct SectionInfo; - struct SectionEndInfo; - struct MessageInfo; - struct MessageBuilder; - struct Counts; - struct AssertionReaction; - struct SourceLineInfo; - - class ITransientExpression; - class IGeneratorTracker; - - struct BenchmarkInfo; - template > - struct BenchmarkStats; - - class IResultCapture { - public: - virtual ~IResultCapture(); - - virtual bool sectionStarted( SectionInfo const& sectionInfo, - Counts& assertions ) = 0; - virtual void sectionEnded( SectionEndInfo const& endInfo ) = 0; - virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) = 0; - - virtual auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& = 0; - - virtual void benchmarkPreparing( StringRef name ) = 0; - virtual void benchmarkStarting( BenchmarkInfo const& info ) = 0; - virtual void benchmarkEnded( BenchmarkStats<> const& stats ) = 0; - virtual void benchmarkFailed( StringRef error ) = 0; - - virtual void pushScopedMessage( MessageInfo const& message ) = 0; - virtual void popScopedMessage( MessageInfo const& message ) = 0; - - virtual void emplaceUnscopedMessage( MessageBuilder const& builder ) = 0; - - virtual void handleFatalErrorCondition( StringRef message ) = 0; - - virtual void handleExpr - ( AssertionInfo const& info, - ITransientExpression const& expr, - AssertionReaction& reaction ) = 0; - virtual void handleMessage - ( AssertionInfo const& info, - ResultWas::OfType resultType, - StringRef message, - AssertionReaction& reaction ) = 0; - virtual void handleUnexpectedExceptionNotThrown - ( AssertionInfo const& info, - AssertionReaction& reaction ) = 0; - virtual void handleUnexpectedInflightException - ( AssertionInfo const& info, - std::string const& message, - AssertionReaction& reaction ) = 0; - virtual void handleIncomplete - ( AssertionInfo const& info ) = 0; - virtual void handleNonExpr - ( AssertionInfo const &info, - ResultWas::OfType resultType, - AssertionReaction &reaction ) = 0; - - - - virtual bool lastAssertionPassed() = 0; - virtual void assertionPassed() = 0; - - // Deprecated, do not use: - virtual std::string getCurrentTestName() const = 0; - virtual const AssertionResult* getLastResult() const = 0; - virtual void exceptionEarlyReported() = 0; - }; - - IResultCapture& getResultCapture(); -} - -#endif // CATCH_INTERFACES_CAPTURE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_config.cpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_config.cpp deleted file mode 100644 index 655bc1b..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_config.cpp +++ /dev/null @@ -1,13 +0,0 @@ - -// 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 - -namespace Catch { - IConfig::~IConfig() = default; -} diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_config.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_config.hpp deleted file mode 100644 index eb05480..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_config.hpp +++ /dev/null @@ -1,100 +0,0 @@ - -// 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 -#ifndef CATCH_INTERFACES_CONFIG_HPP_INCLUDED -#define CATCH_INTERFACES_CONFIG_HPP_INCLUDED - -#include -#include - -#include -#include -#include -#include - -namespace Catch { - - enum class Verbosity { - Quiet = 0, - Normal, - High - }; - - struct WarnAbout { enum What { - Nothing = 0x00, - //! A test case or leaf section did not run any assertions - NoAssertions = 0x01, - //! A command line test spec matched no test cases - UnmatchedTestSpec = 0x02, - }; }; - - enum class ShowDurations { - DefaultForReporter, - Always, - Never - }; - enum class TestRunOrder { - Declared, - LexicographicallySorted, - Randomized - }; - enum class ColourMode : std::uint8_t { - //! Let Catch2 pick implementation based on platform detection - PlatformDefault, - //! Use ANSI colour code escapes - ANSI, - //! Use Win32 console colour API - Win32, - //! Don't use any colour - None - }; - struct WaitForKeypress { enum When { - Never, - BeforeStart = 1, - BeforeExit = 2, - BeforeStartAndExit = BeforeStart | BeforeExit - }; }; - - class TestSpec; - class IStream; - - class IConfig : public Detail::NonCopyable { - public: - virtual ~IConfig(); - - virtual bool allowThrows() const = 0; - virtual StringRef name() const = 0; - virtual bool includeSuccessfulResults() const = 0; - virtual bool shouldDebugBreak() const = 0; - virtual bool warnAboutMissingAssertions() const = 0; - virtual bool warnAboutUnmatchedTestSpecs() const = 0; - virtual bool zeroTestsCountAsSuccess() const = 0; - virtual int abortAfter() const = 0; - virtual bool showInvisibles() const = 0; - virtual ShowDurations showDurations() const = 0; - virtual double minDuration() const = 0; - virtual TestSpec const& testSpec() const = 0; - virtual bool hasTestFilters() const = 0; - virtual std::vector const& getTestsOrTags() const = 0; - virtual TestRunOrder runOrder() const = 0; - virtual uint32_t rngSeed() const = 0; - virtual unsigned int shardCount() const = 0; - virtual unsigned int shardIndex() const = 0; - virtual ColourMode defaultColourMode() const = 0; - virtual std::vector const& getSectionsToRun() const = 0; - virtual Verbosity verbosity() const = 0; - - virtual bool skipBenchmarks() const = 0; - virtual bool benchmarkNoAnalysis() const = 0; - virtual unsigned int benchmarkSamples() const = 0; - virtual double benchmarkConfidenceInterval() const = 0; - virtual unsigned int benchmarkResamples() const = 0; - virtual std::chrono::milliseconds benchmarkWarmupTime() const = 0; - }; -} - -#endif // CATCH_INTERFACES_CONFIG_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_enum_values_registry.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_enum_values_registry.hpp deleted file mode 100644 index 38b052d..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_enum_values_registry.hpp +++ /dev/null @@ -1,47 +0,0 @@ - -// 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 -#ifndef CATCH_INTERFACES_ENUM_VALUES_REGISTRY_HPP_INCLUDED -#define CATCH_INTERFACES_ENUM_VALUES_REGISTRY_HPP_INCLUDED - -#include - -#include - -namespace Catch { - - namespace Detail { - struct EnumInfo { - StringRef m_name; - std::vector> m_values; - - ~EnumInfo(); - - StringRef lookup( int value ) const; - }; - } // namespace Detail - - class IMutableEnumValuesRegistry { - public: - virtual ~IMutableEnumValuesRegistry(); // = default; - - virtual Detail::EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::vector const& values ) = 0; - - template - Detail::EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::initializer_list values ) { - static_assert(sizeof(int) >= sizeof(E), "Cannot serialize enum to int"); - std::vector intValues; - intValues.reserve( values.size() ); - for( auto enumValue : values ) - intValues.push_back( static_cast( enumValue ) ); - return registerEnum( enumName, allEnums, intValues ); - } - }; - -} // Catch - -#endif // CATCH_INTERFACES_ENUM_VALUES_REGISTRY_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_exception.cpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_exception.cpp deleted file mode 100644 index 44c272d..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_exception.cpp +++ /dev/null @@ -1,14 +0,0 @@ - -// 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 - -namespace Catch { - IExceptionTranslator::~IExceptionTranslator() = default; - IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() = default; -} diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_exception.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_exception.hpp deleted file mode 100644 index 9177666..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_exception.hpp +++ /dev/null @@ -1,37 +0,0 @@ - -// 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 -#ifndef CATCH_INTERFACES_EXCEPTION_HPP_INCLUDED -#define CATCH_INTERFACES_EXCEPTION_HPP_INCLUDED - -#include -#include - -#include -#include - -namespace Catch { - using exceptionTranslateFunction = std::string(*)(); - - class IExceptionTranslator; - using ExceptionTranslators = std::vector>; - - class IExceptionTranslator { - public: - virtual ~IExceptionTranslator(); // = default - virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const = 0; - }; - - class IExceptionTranslatorRegistry { - public: - virtual ~IExceptionTranslatorRegistry(); // = default - virtual std::string translateActiveException() const = 0; - }; - -} // namespace Catch - -#endif // CATCH_INTERFACES_EXCEPTION_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_generatortracker.cpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_generatortracker.cpp deleted file mode 100644 index e9fa5dd..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_generatortracker.cpp +++ /dev/null @@ -1,32 +0,0 @@ - -// 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 -#include - -namespace Catch { - namespace Generators { - - bool GeneratorUntypedBase::countedNext() { - auto ret = next(); - if ( ret ) { - m_stringReprCache.clear(); - ++m_currentElementIndex; - } - return ret; - } - - StringRef GeneratorUntypedBase::currentElementAsString() const { - if ( m_stringReprCache.empty() ) { - m_stringReprCache = stringifyImpl(); - } - return m_stringReprCache; - } - - } // namespace Generators -} // namespace Catch diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp deleted file mode 100644 index d70cb59..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp +++ /dev/null @@ -1,90 +0,0 @@ - -// 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 -#ifndef CATCH_INTERFACES_GENERATORTRACKER_HPP_INCLUDED -#define CATCH_INTERFACES_GENERATORTRACKER_HPP_INCLUDED - -#include -#include - -#include - -namespace Catch { - - namespace Generators { - class GeneratorUntypedBase { - // Caches result from `toStringImpl`, assume that when it is an - // empty string, the cache is invalidated. - mutable std::string m_stringReprCache; - - // Counts based on `next` returning true - std::size_t m_currentElementIndex = 0; - - /** - * Attempts to move the generator to the next element - * - * Returns true iff the move succeeded (and a valid element - * can be retrieved). - */ - virtual bool next() = 0; - - //! Customization point for `currentElementAsString` - virtual std::string stringifyImpl() const = 0; - - public: - GeneratorUntypedBase() = default; - // Generation of copy ops is deprecated (and Clang will complain) - // if there is a user destructor defined - GeneratorUntypedBase(GeneratorUntypedBase const&) = default; - GeneratorUntypedBase& operator=(GeneratorUntypedBase const&) = default; - - virtual ~GeneratorUntypedBase(); // = default; - - /** - * Attempts to move the generator to the next element - * - * Serves as a non-virtual interface to `next`, so that the - * top level interface can provide sanity checking and shared - * features. - * - * As with `next`, returns true iff the move succeeded and - * the generator has new valid element to provide. - */ - bool countedNext(); - - std::size_t currentElementIndex() const { return m_currentElementIndex; } - - /** - * Returns generator's current element as user-friendly string. - * - * By default returns string equivalent to calling - * `Catch::Detail::stringify` on the current element, but generators - * can customize their implementation as needed. - * - * Not thread-safe due to internal caching. - * - * The returned ref is valid only until the generator instance - * is destructed, or it moves onto the next element, whichever - * comes first. - */ - StringRef currentElementAsString() const; - }; - using GeneratorBasePtr = Catch::Detail::unique_ptr; - - } // namespace Generators - - class IGeneratorTracker { - public: - virtual ~IGeneratorTracker(); // = default; - virtual auto hasGenerator() const -> bool = 0; - virtual auto getGenerator() const -> Generators::GeneratorBasePtr const& = 0; - virtual void setGenerator( Generators::GeneratorBasePtr&& generator ) = 0; - }; - -} // namespace Catch - -#endif // CATCH_INTERFACES_GENERATORTRACKER_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_registry_hub.cpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_registry_hub.cpp deleted file mode 100644 index cd688a4..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_registry_hub.cpp +++ /dev/null @@ -1,14 +0,0 @@ - -// 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 - -namespace Catch { - IRegistryHub::~IRegistryHub() = default; - IMutableRegistryHub::~IMutableRegistryHub() = default; -} diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_registry_hub.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_registry_hub.hpp deleted file mode 100644 index 8813b53..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_registry_hub.hpp +++ /dev/null @@ -1,66 +0,0 @@ - -// 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 -#ifndef CATCH_INTERFACES_REGISTRY_HUB_HPP_INCLUDED -#define CATCH_INTERFACES_REGISTRY_HUB_HPP_INCLUDED - -#include - -#include - -namespace Catch { - - class TestCaseHandle; - struct TestCaseInfo; - class ITestCaseRegistry; - class IExceptionTranslatorRegistry; - class IExceptionTranslator; - class IReporterRegistry; - class IReporterFactory; - class ITagAliasRegistry; - class ITestInvoker; - class IMutableEnumValuesRegistry; - struct SourceLineInfo; - - class StartupExceptionRegistry; - class EventListenerFactory; - - using IReporterFactoryPtr = Detail::unique_ptr; - - class IRegistryHub { - public: - virtual ~IRegistryHub(); // = default - - virtual IReporterRegistry const& getReporterRegistry() const = 0; - virtual ITestCaseRegistry const& getTestCaseRegistry() const = 0; - virtual ITagAliasRegistry const& getTagAliasRegistry() const = 0; - virtual IExceptionTranslatorRegistry const& getExceptionTranslatorRegistry() const = 0; - - - virtual StartupExceptionRegistry const& getStartupExceptionRegistry() const = 0; - }; - - class IMutableRegistryHub { - public: - virtual ~IMutableRegistryHub(); // = default - virtual void registerReporter( std::string const& name, IReporterFactoryPtr factory ) = 0; - virtual void registerListener( Detail::unique_ptr factory ) = 0; - virtual void registerTest(Detail::unique_ptr&& testInfo, Detail::unique_ptr&& invoker) = 0; - virtual void registerTranslator( Detail::unique_ptr&& translator ) = 0; - virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) = 0; - virtual void registerStartupException() noexcept = 0; - virtual IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() = 0; - }; - - IRegistryHub const& getRegistryHub(); - IMutableRegistryHub& getMutableRegistryHub(); - void cleanUp(); - std::string translateActiveException(); - -} - -#endif // CATCH_INTERFACES_REGISTRY_HUB_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter.cpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter.cpp deleted file mode 100644 index 0bcf66d..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter.cpp +++ /dev/null @@ -1,104 +0,0 @@ - -// 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace Catch { - - ReporterConfig::ReporterConfig( - IConfig const* _fullConfig, - Detail::unique_ptr _stream, - ColourMode colourMode, - std::map customOptions ): - m_stream( CATCH_MOVE(_stream) ), - m_fullConfig( _fullConfig ), - m_colourMode( colourMode ), - m_customOptions( CATCH_MOVE( customOptions ) ) {} - - Detail::unique_ptr ReporterConfig::takeStream() && { - assert( m_stream ); - return CATCH_MOVE( m_stream ); - } - IConfig const * ReporterConfig::fullConfig() const { return m_fullConfig; } - ColourMode ReporterConfig::colourMode() const { return m_colourMode; } - - std::map const& - ReporterConfig::customOptions() const { - return m_customOptions; - } - - ReporterConfig::~ReporterConfig() = default; - - AssertionStats::AssertionStats( AssertionResult const& _assertionResult, - std::vector const& _infoMessages, - Totals const& _totals ) - : assertionResult( _assertionResult ), - infoMessages( _infoMessages ), - totals( _totals ) - { - assertionResult.m_resultData.lazyExpression.m_transientExpression = _assertionResult.m_resultData.lazyExpression.m_transientExpression; - - if( assertionResult.hasMessage() ) { - // Copy message into messages list. - // !TBD This should have been done earlier, somewhere - MessageBuilder builder( assertionResult.getTestMacroName(), assertionResult.getSourceInfo(), assertionResult.getResultType() ); - builder << assertionResult.getMessage(); - builder.m_info.message = builder.m_stream.str(); - - infoMessages.push_back( builder.m_info ); - } - } - - SectionStats::SectionStats( SectionInfo const& _sectionInfo, - Counts const& _assertions, - double _durationInSeconds, - bool _missingAssertions ) - : sectionInfo( _sectionInfo ), - assertions( _assertions ), - durationInSeconds( _durationInSeconds ), - missingAssertions( _missingAssertions ) - {} - - - TestCaseStats::TestCaseStats( TestCaseInfo const& _testInfo, - Totals const& _totals, - std::string const& _stdOut, - std::string const& _stdErr, - bool _aborting ) - : testInfo( &_testInfo ), - totals( _totals ), - stdOut( _stdOut ), - stdErr( _stdErr ), - aborting( _aborting ) - {} - - - TestRunStats::TestRunStats( TestRunInfo const& _runInfo, - Totals const& _totals, - bool _aborting ) - : runInfo( _runInfo ), - totals( _totals ), - aborting( _aborting ) - {} - - IEventListener::~IEventListener() = default; - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter.hpp deleted file mode 100644 index 5f28636..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter.hpp +++ /dev/null @@ -1,264 +0,0 @@ - -// 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 -#ifndef CATCH_INTERFACES_REPORTER_HPP_INCLUDED -#define CATCH_INTERFACES_REPORTER_HPP_INCLUDED - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#include -#include -#include -#include - -namespace Catch { - - struct ReporterDescription; - struct ListenerDescription; - struct TagInfo; - struct TestCaseInfo; - class TestCaseHandle; - class IConfig; - class IStream; - enum class ColourMode : std::uint8_t; - - struct ReporterConfig { - ReporterConfig( IConfig const* _fullConfig, - Detail::unique_ptr _stream, - ColourMode colourMode, - std::map customOptions ); - - ReporterConfig( ReporterConfig&& ) = default; - ReporterConfig& operator=( ReporterConfig&& ) = default; - ~ReporterConfig(); // = default - - Detail::unique_ptr takeStream() &&; - IConfig const* fullConfig() const; - ColourMode colourMode() const; - std::map const& customOptions() const; - - private: - Detail::unique_ptr m_stream; - IConfig const* m_fullConfig; - ColourMode m_colourMode; - std::map m_customOptions; - }; - - struct TestRunInfo { - constexpr TestRunInfo(StringRef _name) : name(_name) {} - StringRef name; - }; - - struct AssertionStats { - AssertionStats( AssertionResult const& _assertionResult, - std::vector const& _infoMessages, - Totals const& _totals ); - - AssertionStats( AssertionStats const& ) = default; - AssertionStats( AssertionStats && ) = default; - AssertionStats& operator = ( AssertionStats const& ) = delete; - AssertionStats& operator = ( AssertionStats && ) = delete; - - AssertionResult assertionResult; - std::vector infoMessages; - Totals totals; - }; - - struct SectionStats { - SectionStats( SectionInfo const& _sectionInfo, - Counts const& _assertions, - double _durationInSeconds, - bool _missingAssertions ); - - SectionInfo sectionInfo; - Counts assertions; - double durationInSeconds; - bool missingAssertions; - }; - - struct TestCaseStats { - TestCaseStats( TestCaseInfo const& _testInfo, - Totals const& _totals, - std::string const& _stdOut, - std::string const& _stdErr, - bool _aborting ); - - TestCaseInfo const * testInfo; - Totals totals; - std::string stdOut; - std::string stdErr; - bool aborting; - }; - - struct TestRunStats { - TestRunStats( TestRunInfo const& _runInfo, - Totals const& _totals, - bool _aborting ); - - TestRunInfo runInfo; - Totals totals; - bool aborting; - }; - - - struct BenchmarkInfo { - std::string name; - double estimatedDuration; - int iterations; - unsigned int samples; - unsigned int resamples; - double clockResolution; - double clockCost; - }; - - template - struct BenchmarkStats { - BenchmarkInfo info; - - std::vector samples; - Benchmark::Estimate mean; - Benchmark::Estimate standardDeviation; - Benchmark::OutlierClassification outliers; - double outlierVariance; - - template - operator BenchmarkStats() const { - std::vector samples2; - samples2.reserve(samples.size()); - for (auto const& sample : samples) { - samples2.push_back(Duration2(sample)); - } - return { - info, - CATCH_MOVE(samples2), - mean, - standardDeviation, - outliers, - outlierVariance, - }; - } - }; - - //! By setting up its preferences, a reporter can modify Catch2's behaviour - //! in some regards, e.g. it can request Catch2 to capture writes to - //! stdout/stderr during test execution, and pass them to the reporter. - struct ReporterPreferences { - //! Catch2 should redirect writes to stdout and pass them to the - //! reporter - bool shouldRedirectStdOut = false; - //! Catch2 should call `Reporter::assertionEnded` even for passing - //! assertions - bool shouldReportAllAssertions = false; - }; - - /** - * The common base for all reporters and event listeners - * - * Implementing classes must also implement: - * - * //! User-friendly description of the reporter/listener type - * static std::string getDescription() - * - * Generally shouldn't be derived from by users of Catch2 directly, - * instead they should derive from one of the utility bases that - * derive from this class. - */ - class IEventListener { - protected: - //! Derived classes can set up their preferences here - ReporterPreferences m_preferences; - //! The test run's config as filled in from CLI and defaults - IConfig const* m_config; - - public: - IEventListener( IConfig const* config ): m_config( config ) {} - - virtual ~IEventListener(); // = default; - - // Implementing class must also provide the following static methods: - // static std::string getDescription(); - - ReporterPreferences const& getPreferences() const { - return m_preferences; - } - - //! Called when no test cases match provided test spec - virtual void noMatchingTestCases( StringRef unmatchedSpec ) = 0; - //! Called for all invalid test specs from the cli - virtual void reportInvalidTestSpec( StringRef invalidArgument ) = 0; - - /** - * Called once in a testing run before tests are started - * - * Not called if tests won't be run (e.g. only listing will happen) - */ - virtual void testRunStarting( TestRunInfo const& testRunInfo ) = 0; - - //! Called _once_ for each TEST_CASE, no matter how many times it is entered - virtual void testCaseStarting( TestCaseInfo const& testInfo ) = 0; - //! Called _every time_ a TEST_CASE is entered, including repeats (due to sections) - virtual void testCasePartialStarting( TestCaseInfo const& testInfo, uint64_t partNumber ) = 0; - //! Called when a `SECTION` is being entered. Not called for skipped sections - virtual void sectionStarting( SectionInfo const& sectionInfo ) = 0; - - //! Called when user-code is being probed before the actual benchmark runs - virtual void benchmarkPreparing( StringRef benchmarkName ) = 0; - //! Called after probe but before the user-code is being benchmarked - virtual void benchmarkStarting( BenchmarkInfo const& benchmarkInfo ) = 0; - //! Called with the benchmark results if benchmark successfully finishes - virtual void benchmarkEnded( BenchmarkStats<> const& benchmarkStats ) = 0; - //! Called if running the benchmarks fails for any reason - virtual void benchmarkFailed( StringRef benchmarkName ) = 0; - - //! Called before assertion success/failure is evaluated - virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0; - - //! Called after assertion was fully evaluated - virtual void assertionEnded( AssertionStats const& assertionStats ) = 0; - - //! Called after a `SECTION` has finished running - virtual void sectionEnded( SectionStats const& sectionStats ) = 0; - //! Called _every time_ a TEST_CASE is entered, including repeats (due to sections) - virtual void testCasePartialEnded(TestCaseStats const& testCaseStats, uint64_t partNumber ) = 0; - //! Called _once_ for each TEST_CASE, no matter how many times it is entered - virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0; - /** - * Called once after all tests in a testing run are finished - * - * Not called if tests weren't run (e.g. only listings happened) - */ - virtual void testRunEnded( TestRunStats const& testRunStats ) = 0; - - //! Called with test cases that are skipped due to the test run aborting - virtual void skipTest( TestCaseInfo const& testInfo ) = 0; - - //! Called if a fatal error (signal/structured exception) occured - virtual void fatalErrorEncountered( StringRef error ) = 0; - - //! Writes out information about provided reporters using reporter-specific format - virtual void listReporters(std::vector const& descriptions) = 0; - //! Writes out the provided listeners descriptions using reporter-specific format - virtual void listListeners(std::vector const& descriptions) = 0; - //! Writes out information about provided tests using reporter-specific format - virtual void listTests(std::vector const& tests) = 0; - //! Writes out information about the provided tags using reporter-specific format - virtual void listTags(std::vector const& tags) = 0; - }; - using IEventListenerPtr = Detail::unique_ptr; - -} // end namespace Catch - -#endif // CATCH_INTERFACES_REPORTER_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_factory.cpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_factory.cpp deleted file mode 100644 index 4fe992f..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_factory.cpp +++ /dev/null @@ -1,14 +0,0 @@ - -// 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 - -namespace Catch { - IReporterFactory::~IReporterFactory() = default; - EventListenerFactory::~EventListenerFactory() = default; -} diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_factory.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_factory.hpp deleted file mode 100644 index 83ddd7b..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_factory.hpp +++ /dev/null @@ -1,45 +0,0 @@ - -// 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 -#ifndef CATCH_INTERFACES_REPORTER_FACTORY_HPP_INCLUDED -#define CATCH_INTERFACES_REPORTER_FACTORY_HPP_INCLUDED - -#include -#include - -#include - -namespace Catch { - - struct ReporterConfig; - class IConfig; - class IEventListener; - using IEventListenerPtr = Detail::unique_ptr; - - - class IReporterFactory { - public: - virtual ~IReporterFactory(); // = default - - virtual IEventListenerPtr - create( ReporterConfig&& config ) const = 0; - virtual std::string getDescription() const = 0; - }; - using IReporterFactoryPtr = Detail::unique_ptr; - - class EventListenerFactory { - public: - virtual ~EventListenerFactory(); // = default - virtual IEventListenerPtr create( IConfig const* config ) const = 0; - //! Return a meaningful name for the listener, e.g. its type name - virtual StringRef getName() const = 0; - //! Return listener's description if available - virtual std::string getDescription() const = 0; - }; -} // namespace Catch - -#endif // CATCH_INTERFACES_REPORTER_FACTORY_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_registry.cpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_registry.cpp deleted file mode 100644 index f620cbc..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_registry.cpp +++ /dev/null @@ -1,13 +0,0 @@ - -// 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 - -namespace Catch { - IReporterRegistry::~IReporterRegistry() = default; -} diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_registry.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_registry.hpp deleted file mode 100644 index 277d176..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_reporter_registry.hpp +++ /dev/null @@ -1,42 +0,0 @@ - -// 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 -#ifndef CATCH_INTERFACES_REPORTER_REGISTRY_HPP_INCLUDED -#define CATCH_INTERFACES_REPORTER_REGISTRY_HPP_INCLUDED - -#include -#include - -#include -#include -#include - -namespace Catch { - - class IConfig; - - class IEventListener; - using IEventListenerPtr = Detail::unique_ptr; - class IReporterFactory; - using IReporterFactoryPtr = Detail::unique_ptr; - struct ReporterConfig; - class EventListenerFactory; - - class IReporterRegistry { - public: - using FactoryMap = std::map; - using Listeners = std::vector>; - - virtual ~IReporterRegistry(); // = default - virtual IEventListenerPtr create( std::string const& name, ReporterConfig&& config ) const = 0; - virtual FactoryMap const& getFactories() const = 0; - virtual Listeners const& getListeners() const = 0; - }; - -} // end namespace Catch - -#endif // CATCH_INTERFACES_REPORTER_REGISTRY_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_tag_alias_registry.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_tag_alias_registry.hpp deleted file mode 100644 index 5da0f8d..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_tag_alias_registry.hpp +++ /dev/null @@ -1,29 +0,0 @@ - -// 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 -#ifndef CATCH_INTERFACES_TAG_ALIAS_REGISTRY_HPP_INCLUDED -#define CATCH_INTERFACES_TAG_ALIAS_REGISTRY_HPP_INCLUDED - -#include - -namespace Catch { - - struct TagAlias; - - class ITagAliasRegistry { - public: - virtual ~ITagAliasRegistry(); // = default - // Nullptr if not present - virtual TagAlias const* find( std::string const& alias ) const = 0; - virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const = 0; - - static ITagAliasRegistry const& get(); - }; - -} // end namespace Catch - -#endif // CATCH_INTERFACES_TAG_ALIAS_REGISTRY_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_testcase.cpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_testcase.cpp deleted file mode 100644 index 5e632ba..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_testcase.cpp +++ /dev/null @@ -1,14 +0,0 @@ - -// 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 - -namespace Catch { - ITestInvoker::~ITestInvoker() = default; - ITestCaseRegistry::~ITestCaseRegistry() = default; -} diff --git a/lib/Catch2/src/catch2/interfaces/catch_interfaces_testcase.hpp b/lib/Catch2/src/catch2/interfaces/catch_interfaces_testcase.hpp deleted file mode 100644 index 78ee202..0000000 --- a/lib/Catch2/src/catch2/interfaces/catch_interfaces_testcase.hpp +++ /dev/null @@ -1,43 +0,0 @@ - -// 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 -#ifndef CATCH_INTERFACES_TESTCASE_HPP_INCLUDED -#define CATCH_INTERFACES_TESTCASE_HPP_INCLUDED - -#include - -namespace Catch { - - class TestSpec; - struct TestCaseInfo; - - class ITestInvoker { - public: - virtual void invoke () const = 0; - virtual ~ITestInvoker(); // = default - }; - - class TestCaseHandle; - class IConfig; - - class ITestCaseRegistry { - public: - virtual ~ITestCaseRegistry(); // = default - // TODO: this exists only for adding filenames to test cases -- let's expose this in a saner way later - virtual std::vector const& getAllInfos() const = 0; - virtual std::vector const& getAllTests() const = 0; - virtual std::vector const& getAllTestsSorted( IConfig const& config ) const = 0; - }; - - bool isThrowSafe( TestCaseHandle const& testCase, IConfig const& config ); - bool matchTest( TestCaseHandle const& testCase, TestSpec const& testSpec, IConfig const& config ); - std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ); - std::vector const& getAllTestCasesSorted( IConfig const& config ); - -} - -#endif // CATCH_INTERFACES_TESTCASE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_assertion_handler.cpp b/lib/Catch2/src/catch2/internal/catch_assertion_handler.cpp deleted file mode 100644 index f051314..0000000 --- a/lib/Catch2/src/catch2/internal/catch_assertion_handler.cpp +++ /dev/null @@ -1,83 +0,0 @@ - -// 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 -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Catch { - - AssertionHandler::AssertionHandler - ( StringRef macroName, - SourceLineInfo const& lineInfo, - StringRef capturedExpression, - ResultDisposition::Flags resultDisposition ) - : m_assertionInfo{ macroName, lineInfo, capturedExpression, resultDisposition }, - m_resultCapture( getResultCapture() ) - {} - - void AssertionHandler::handleExpr( ITransientExpression const& expr ) { - m_resultCapture.handleExpr( m_assertionInfo, expr, m_reaction ); - } - void AssertionHandler::handleMessage(ResultWas::OfType resultType, StringRef message) { - m_resultCapture.handleMessage( m_assertionInfo, resultType, message, m_reaction ); - } - - auto AssertionHandler::allowThrows() const -> bool { - return getCurrentContext().getConfig()->allowThrows(); - } - - void AssertionHandler::complete() { - setCompleted(); - if( m_reaction.shouldDebugBreak ) { - - // If you find your debugger stopping you here then go one level up on the - // call-stack for the code that caused it (typically a failed assertion) - - // (To go back to the test and change execution, jump over the throw, next) - CATCH_BREAK_INTO_DEBUGGER(); - } - if (m_reaction.shouldThrow) { - throw_test_failure_exception(); - } - } - void AssertionHandler::setCompleted() { - m_completed = true; - } - - void AssertionHandler::handleUnexpectedInflightException() { - m_resultCapture.handleUnexpectedInflightException( m_assertionInfo, Catch::translateActiveException(), m_reaction ); - } - - void AssertionHandler::handleExceptionThrownAsExpected() { - m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction); - } - void AssertionHandler::handleExceptionNotThrownAsExpected() { - m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction); - } - - void AssertionHandler::handleUnexpectedExceptionNotThrown() { - m_resultCapture.handleUnexpectedExceptionNotThrown( m_assertionInfo, m_reaction ); - } - - void AssertionHandler::handleThrowingCallSkipped() { - m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction); - } - - // This is the overload that takes a string and infers the Equals matcher from it - // The more general overload, that takes any string matcher, is in catch_capture_matchers.cpp - void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str ) { - handleExceptionMatchExpr( handler, Matchers::Equals( str ) ); - } - -} // namespace Catch diff --git a/lib/Catch2/src/catch2/internal/catch_assertion_handler.hpp b/lib/Catch2/src/catch2/internal/catch_assertion_handler.hpp deleted file mode 100644 index 36b5524..0000000 --- a/lib/Catch2/src/catch2/internal/catch_assertion_handler.hpp +++ /dev/null @@ -1,71 +0,0 @@ - -// 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 -#ifndef CATCH_ASSERTION_HANDLER_HPP_INCLUDED -#define CATCH_ASSERTION_HANDLER_HPP_INCLUDED - -#include -#include -#include -#include - -#include - -namespace Catch { - - class IResultCapture; - - struct AssertionReaction { - bool shouldDebugBreak = false; - bool shouldThrow = false; - }; - - class AssertionHandler { - AssertionInfo m_assertionInfo; - AssertionReaction m_reaction; - bool m_completed = false; - IResultCapture& m_resultCapture; - - public: - AssertionHandler - ( StringRef macroName, - SourceLineInfo const& lineInfo, - StringRef capturedExpression, - ResultDisposition::Flags resultDisposition ); - ~AssertionHandler() { - if ( !m_completed ) { - m_resultCapture.handleIncomplete( m_assertionInfo ); - } - } - - - template - void handleExpr( ExprLhs const& expr ) { - handleExpr( expr.makeUnaryExpr() ); - } - void handleExpr( ITransientExpression const& expr ); - - void handleMessage(ResultWas::OfType resultType, StringRef message); - - void handleExceptionThrownAsExpected(); - void handleUnexpectedExceptionNotThrown(); - void handleExceptionNotThrownAsExpected(); - void handleThrowingCallSkipped(); - void handleUnexpectedInflightException(); - - void complete(); - void setCompleted(); - - // query - auto allowThrows() const -> bool; - }; - - void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str ); - -} // namespace Catch - -#endif // CATCH_ASSERTION_HANDLER_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_case_insensitive_comparisons.cpp b/lib/Catch2/src/catch2/internal/catch_case_insensitive_comparisons.cpp deleted file mode 100644 index b3e7b53..0000000 --- a/lib/Catch2/src/catch2/internal/catch_case_insensitive_comparisons.cpp +++ /dev/null @@ -1,35 +0,0 @@ - -// 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 -#include - -#include - -namespace Catch { - namespace Detail { - - bool CaseInsensitiveLess::operator()( StringRef lhs, - StringRef rhs ) const { - return std::lexicographical_compare( - lhs.begin(), lhs.end(), - rhs.begin(), rhs.end(), - []( char l, char r ) { return toLower( l ) < toLower( r ); } ); - } - - bool - CaseInsensitiveEqualTo::operator()( StringRef lhs, - StringRef rhs ) const { - return std::equal( - lhs.begin(), lhs.end(), - rhs.begin(), rhs.end(), - []( char l, char r ) { return toLower( l ) == toLower( r ); } ); - } - - } // namespace Detail -} // namespace Catch diff --git a/lib/Catch2/src/catch2/internal/catch_case_insensitive_comparisons.hpp b/lib/Catch2/src/catch2/internal/catch_case_insensitive_comparisons.hpp deleted file mode 100644 index 33b7782..0000000 --- a/lib/Catch2/src/catch2/internal/catch_case_insensitive_comparisons.hpp +++ /dev/null @@ -1,30 +0,0 @@ - -// 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 -#ifndef CATCH_CASE_INSENSITIVE_COMPARISONS_HPP_INCLUDED -#define CATCH_CASE_INSENSITIVE_COMPARISONS_HPP_INCLUDED - -#include - -namespace Catch { - namespace Detail { - //! Provides case-insensitive `op<` semantics when called - struct CaseInsensitiveLess { - bool operator()( StringRef lhs, - StringRef rhs ) const; - }; - - //! Provides case-insensitive `op==` semantics when called - struct CaseInsensitiveEqualTo { - bool operator()( StringRef lhs, - StringRef rhs ) const; - }; - - } // namespace Detail -} // namespace Catch - -#endif // CATCH_CASE_INSENSITIVE_COMPARISONS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_case_sensitive.hpp b/lib/Catch2/src/catch2/internal/catch_case_sensitive.hpp deleted file mode 100644 index cc89110..0000000 --- a/lib/Catch2/src/catch2/internal/catch_case_sensitive.hpp +++ /dev/null @@ -1,17 +0,0 @@ - -// 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 -#ifndef CATCH_CASE_SENSITIVE_HPP_INCLUDED -#define CATCH_CASE_SENSITIVE_HPP_INCLUDED - -namespace Catch { - - enum class CaseSensitive { Yes, No }; - -} // namespace Catch - -#endif // CATCH_CASE_SENSITIVE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_clara.cpp b/lib/Catch2/src/catch2/internal/catch_clara.cpp deleted file mode 100644 index c9bc769..0000000 --- a/lib/Catch2/src/catch2/internal/catch_clara.cpp +++ /dev/null @@ -1,448 +0,0 @@ - -// 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 -#include -#include -#include -#include - -#include -#include - -namespace { - bool isOptPrefix( char c ) { - return c == '-' -#ifdef CATCH_PLATFORM_WINDOWS - || c == '/' -#endif - ; - } - - std::string normaliseOpt( std::string const& optName ) { -#ifdef CATCH_PLATFORM_WINDOWS - if ( optName[0] == '/' ) - return "-" + optName.substr( 1 ); - else -#endif - return optName; - } - -} // namespace - -namespace Catch { - namespace Clara { - namespace Detail { - - void TokenStream::loadBuffer() { - m_tokenBuffer.clear(); - - // Skip any empty strings - while ( it != itEnd && it->empty() ) { - ++it; - } - - if ( it != itEnd ) { - auto const& next = *it; - if ( isOptPrefix( next[0] ) ) { - auto delimiterPos = next.find_first_of( " :=" ); - if ( delimiterPos != std::string::npos ) { - m_tokenBuffer.push_back( - { TokenType::Option, - next.substr( 0, delimiterPos ) } ); - m_tokenBuffer.push_back( - { TokenType::Argument, - next.substr( delimiterPos + 1 ) } ); - } else { - if ( next[1] != '-' && next.size() > 2 ) { - std::string opt = "- "; - for ( size_t i = 1; i < next.size(); ++i ) { - opt[1] = next[i]; - m_tokenBuffer.push_back( - { TokenType::Option, opt } ); - } - } else { - m_tokenBuffer.push_back( - { TokenType::Option, next } ); - } - } - } else { - m_tokenBuffer.push_back( - { TokenType::Argument, next } ); - } - } - } - - TokenStream::TokenStream( Args const& args ): - TokenStream( args.m_args.begin(), args.m_args.end() ) {} - - TokenStream::TokenStream( Iterator it_, Iterator itEnd_ ): - it( it_ ), itEnd( itEnd_ ) { - loadBuffer(); - } - - TokenStream& TokenStream::operator++() { - if ( m_tokenBuffer.size() >= 2 ) { - m_tokenBuffer.erase( m_tokenBuffer.begin() ); - } else { - if ( it != itEnd ) - ++it; - loadBuffer(); - } - return *this; - } - - ParserResult convertInto( std::string const& source, - std::string& target ) { - target = source; - return ParserResult::ok( ParseResultType::Matched ); - } - - ParserResult convertInto( std::string const& source, - bool& target ) { - std::string srcLC = toLower( source ); - - if ( srcLC == "y" || srcLC == "1" || srcLC == "true" || - srcLC == "yes" || srcLC == "on" ) { - target = true; - } else if ( srcLC == "n" || srcLC == "0" || srcLC == "false" || - srcLC == "no" || srcLC == "off" ) { - target = false; - } else { - return ParserResult::runtimeError( - "Expected a boolean value but did not recognise: '" + - source + '\'' ); - } - return ParserResult::ok( ParseResultType::Matched ); - } - - size_t ParserBase::cardinality() const { return 1; } - - InternalParseResult ParserBase::parse( Args const& args ) const { - return parse( args.exeName(), TokenStream( args ) ); - } - - ParseState::ParseState( ParseResultType type, - TokenStream const& remainingTokens ): - m_type( type ), m_remainingTokens( remainingTokens ) {} - - ParserResult BoundFlagRef::setFlag( bool flag ) { - m_ref = flag; - return ParserResult::ok( ParseResultType::Matched ); - } - - ResultBase::~ResultBase() = default; - - bool BoundRef::isContainer() const { return false; } - - bool BoundRef::isFlag() const { return false; } - - bool BoundFlagRefBase::isFlag() const { return true; } - -} // namespace Detail - - Detail::InternalParseResult Arg::parse(std::string const&, - Detail::TokenStream const& tokens) const { - auto validationResult = validate(); - if (!validationResult) - return Detail::InternalParseResult(validationResult); - - auto remainingTokens = tokens; - auto const& token = *remainingTokens; - if (token.type != Detail::TokenType::Argument) - return Detail::InternalParseResult::ok(Detail::ParseState( - ParseResultType::NoMatch, remainingTokens)); - - assert(!m_ref->isFlag()); - auto valueRef = - static_cast(m_ref.get()); - - auto result = valueRef->setValue(remainingTokens->token); - if (!result) - return Detail::InternalParseResult(result); - else - return Detail::InternalParseResult::ok(Detail::ParseState( - ParseResultType::Matched, ++remainingTokens)); - } - - Opt::Opt(bool& ref) : - ParserRefImpl(std::make_shared(ref)) {} - - std::vector Opt::getHelpColumns() const { - std::ostringstream oss; - bool first = true; - for (auto const& opt : m_optNames) { - if (first) - first = false; - else - oss << ", "; - oss << opt; - } - if (!m_hint.empty()) - oss << " <" << m_hint << '>'; - return { { oss.str(), m_description } }; - } - - bool Opt::isMatch(std::string const& optToken) const { - auto normalisedToken = normaliseOpt(optToken); - for (auto const& name : m_optNames) { - if (normaliseOpt(name) == normalisedToken) - return true; - } - return false; - } - - Detail::InternalParseResult Opt::parse(std::string const&, - Detail::TokenStream const& tokens) const { - auto validationResult = validate(); - if (!validationResult) - return Detail::InternalParseResult(validationResult); - - auto remainingTokens = tokens; - if (remainingTokens && - remainingTokens->type == Detail::TokenType::Option) { - auto const& token = *remainingTokens; - if (isMatch(token.token)) { - if (m_ref->isFlag()) { - auto flagRef = - static_cast( - m_ref.get()); - auto result = flagRef->setFlag(true); - if (!result) - return Detail::InternalParseResult(result); - if (result.value() == - ParseResultType::ShortCircuitAll) - return Detail::InternalParseResult::ok(Detail::ParseState( - result.value(), remainingTokens)); - } else { - auto valueRef = - static_cast( - m_ref.get()); - ++remainingTokens; - if (!remainingTokens) - return Detail::InternalParseResult::runtimeError( - "Expected argument following " + - token.token); - auto const& argToken = *remainingTokens; - if (argToken.type != Detail::TokenType::Argument) - return Detail::InternalParseResult::runtimeError( - "Expected argument following " + - token.token); - const auto result = valueRef->setValue(argToken.token); - if (!result) - return Detail::InternalParseResult(result); - if (result.value() == - ParseResultType::ShortCircuitAll) - return Detail::InternalParseResult::ok(Detail::ParseState( - result.value(), remainingTokens)); - } - return Detail::InternalParseResult::ok(Detail::ParseState( - ParseResultType::Matched, ++remainingTokens)); - } - } - return Detail::InternalParseResult::ok( - Detail::ParseState(ParseResultType::NoMatch, remainingTokens)); - } - - Detail::Result Opt::validate() const { - if (m_optNames.empty()) - return Detail::Result::logicError("No options supplied to Opt"); - for (auto const& name : m_optNames) { - if (name.empty()) - return Detail::Result::logicError( - "Option name cannot be empty"); -#ifdef CATCH_PLATFORM_WINDOWS - if (name[0] != '-' && name[0] != '/') - return Detail::Result::logicError( - "Option name must begin with '-' or '/'"); -#else - if (name[0] != '-') - return Detail::Result::logicError( - "Option name must begin with '-'"); -#endif - } - return ParserRefImpl::validate(); - } - - ExeName::ExeName() : - m_name(std::make_shared("")) {} - - ExeName::ExeName(std::string& ref) : ExeName() { - m_ref = std::make_shared>(ref); - } - - Detail::InternalParseResult - ExeName::parse(std::string const&, - Detail::TokenStream const& tokens) const { - return Detail::InternalParseResult::ok( - Detail::ParseState(ParseResultType::NoMatch, tokens)); - } - - ParserResult ExeName::set(std::string const& newName) { - auto lastSlash = newName.find_last_of("\\/"); - auto filename = (lastSlash == std::string::npos) - ? newName - : newName.substr(lastSlash + 1); - - *m_name = filename; - if (m_ref) - return m_ref->setValue(filename); - else - return ParserResult::ok(ParseResultType::Matched); - } - - - - - Parser& Parser::operator|=( Parser const& other ) { - m_options.insert( m_options.end(), - other.m_options.begin(), - other.m_options.end() ); - m_args.insert( - m_args.end(), other.m_args.begin(), other.m_args.end() ); - return *this; - } - - std::vector Parser::getHelpColumns() const { - std::vector cols; - for ( auto const& o : m_options ) { - auto childCols = o.getHelpColumns(); - cols.insert( cols.end(), childCols.begin(), childCols.end() ); - } - return cols; - } - - void Parser::writeToStream( std::ostream& os ) const { - if ( !m_exeName.name().empty() ) { - os << "usage:\n" - << " " << m_exeName.name() << ' '; - bool required = true, first = true; - for ( auto const& arg : m_args ) { - if ( first ) - first = false; - else - os << ' '; - if ( arg.isOptional() && required ) { - os << '['; - required = false; - } - os << '<' << arg.hint() << '>'; - if ( arg.cardinality() == 0 ) - os << " ... "; - } - if ( !required ) - os << ']'; - if ( !m_options.empty() ) - os << " options"; - os << "\n\nwhere options are:\n"; - } - - auto rows = getHelpColumns(); - size_t consoleWidth = CATCH_CONFIG_CONSOLE_WIDTH; - size_t optWidth = 0; - for ( auto const& cols : rows ) - optWidth = ( std::max )( optWidth, cols.left.size() + 2 ); - - optWidth = ( std::min )( optWidth, consoleWidth / 2 ); - - for ( auto const& cols : rows ) { - auto row = TextFlow::Column( cols.left ) - .width( optWidth ) - .indent( 2 ) + - TextFlow::Spacer( 4 ) + - TextFlow::Column( cols.right ) - .width( consoleWidth - 7 - optWidth ); - os << row << '\n'; - } - } - - Detail::Result Parser::validate() const { - for ( auto const& opt : m_options ) { - auto result = opt.validate(); - if ( !result ) - return result; - } - for ( auto const& arg : m_args ) { - auto result = arg.validate(); - if ( !result ) - return result; - } - return Detail::Result::ok(); - } - - Detail::InternalParseResult - Parser::parse( std::string const& exeName, - Detail::TokenStream const& tokens ) const { - - struct ParserInfo { - ParserBase const* parser = nullptr; - size_t count = 0; - }; - std::vector parseInfos; - parseInfos.reserve( m_options.size() + m_args.size() ); - for ( auto const& opt : m_options ) { - parseInfos.push_back( { &opt, 0 } ); - } - for ( auto const& arg : m_args ) { - parseInfos.push_back( { &arg, 0 } ); - } - - m_exeName.set( exeName ); - - auto result = Detail::InternalParseResult::ok( - Detail::ParseState( ParseResultType::NoMatch, tokens ) ); - while ( result.value().remainingTokens() ) { - bool tokenParsed = false; - - for ( auto& parseInfo : parseInfos ) { - if ( parseInfo.parser->cardinality() == 0 || - parseInfo.count < parseInfo.parser->cardinality() ) { - result = parseInfo.parser->parse( - exeName, result.value().remainingTokens() ); - if ( !result ) - return result; - if ( result.value().type() != - ParseResultType::NoMatch ) { - tokenParsed = true; - ++parseInfo.count; - break; - } - } - } - - if ( result.value().type() == ParseResultType::ShortCircuitAll ) - return result; - if ( !tokenParsed ) - return Detail::InternalParseResult::runtimeError( - "Unrecognised token: " + - result.value().remainingTokens()->token ); - } - // !TBD Check missing required options - return result; - } - - Args::Args(int argc, char const* const* argv) : - m_exeName(argv[0]), m_args(argv + 1, argv + argc) {} - - Args::Args(std::initializer_list args) : - m_exeName(*args.begin()), - m_args(args.begin() + 1, args.end()) {} - - - Help::Help( bool& showHelpFlag ): - Opt( [&]( bool flag ) { - showHelpFlag = flag; - return ParserResult::ok( ParseResultType::ShortCircuitAll ); - } ) { - static_cast ( *this )( - "display usage information" )["-?"]["-h"]["--help"] - .optional(); - } - - } // namespace Clara -} // namespace Catch diff --git a/lib/Catch2/src/catch2/internal/catch_clara.hpp b/lib/Catch2/src/catch2/internal/catch_clara.hpp deleted file mode 100644 index 9117b65..0000000 --- a/lib/Catch2/src/catch2/internal/catch_clara.hpp +++ /dev/null @@ -1,702 +0,0 @@ - -// 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 -#ifndef CATCH_CLARA_HPP_INCLUDED -#define CATCH_CLARA_HPP_INCLUDED - -#if defined( __clang__ ) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wweak-vtables" -# pragma clang diagnostic ignored "-Wshadow" -# pragma clang diagnostic ignored "-Wdeprecated" -#endif - -#if defined( __GNUC__ ) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wsign-conversion" -#endif - -#ifndef CLARA_CONFIG_OPTIONAL_TYPE -# ifdef __has_include -# if __has_include( ) && __cplusplus >= 201703L -# include -# define CLARA_CONFIG_OPTIONAL_TYPE std::optional -# endif -# endif -#endif - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace Catch { - namespace Clara { - - class Args; - class Parser; - - // enum of result types from a parse - enum class ParseResultType { - Matched, - NoMatch, - ShortCircuitAll, - ShortCircuitSame - }; - - struct accept_many_t {}; - constexpr accept_many_t accept_many {}; - - namespace Detail { - struct fake_arg { - template - operator T(); - }; - - template - struct is_unary_function : std::false_type {}; - - template - struct is_unary_function< - F, - Catch::Detail::void_t()( fake_arg() ) ) - > - > : std::true_type {}; - - // Traits for extracting arg and return type of lambdas (for single - // argument lambdas) - template - struct UnaryLambdaTraits - : UnaryLambdaTraits {}; - - template - struct UnaryLambdaTraits { - static const bool isValid = false; - }; - - template - struct UnaryLambdaTraits { - static const bool isValid = true; - using ArgType = std::remove_const_t>; - using ReturnType = ReturnT; - }; - - class TokenStream; - - // Wraps a token coming from a token stream. These may not directly - // correspond to strings as a single string may encode an option + - // its argument if the : or = form is used - enum class TokenType { Option, Argument }; - struct Token { - TokenType type; - std::string token; - }; - - // Abstracts iterators into args as a stream of tokens, with option - // arguments uniformly handled - class TokenStream { - using Iterator = std::vector::const_iterator; - Iterator it; - Iterator itEnd; - std::vector m_tokenBuffer; - - void loadBuffer(); - - public: - explicit TokenStream( Args const& args ); - TokenStream( Iterator it, Iterator itEnd ); - - explicit operator bool() const { - return !m_tokenBuffer.empty() || it != itEnd; - } - - size_t count() const { - return m_tokenBuffer.size() + ( itEnd - it ); - } - - Token operator*() const { - assert( !m_tokenBuffer.empty() ); - return m_tokenBuffer.front(); - } - - Token const* operator->() const { - assert( !m_tokenBuffer.empty() ); - return &m_tokenBuffer.front(); - } - - TokenStream& operator++(); - }; - - //! Denotes type of a parsing result - enum class ResultType { - Ok, ///< No errors - LogicError, ///< Error in user-specified arguments for - ///< construction - RuntimeError ///< Error in parsing inputs - }; - - class ResultBase { - protected: - ResultBase( ResultType type ): m_type( type ) {} - virtual ~ResultBase(); // = default; - - - ResultBase(ResultBase const&) = default; - ResultBase& operator=(ResultBase const&) = default; - ResultBase(ResultBase&&) = default; - ResultBase& operator=(ResultBase&&) = default; - - virtual void enforceOk() const = 0; - - ResultType m_type; - }; - - template class ResultValueBase : public ResultBase { - public: - auto value() const -> T const& { - enforceOk(); - return m_value; - } - - protected: - ResultValueBase( ResultType type ): ResultBase( type ) {} - - ResultValueBase( ResultValueBase const& other ): - ResultBase( other ) { - if ( m_type == ResultType::Ok ) - new ( &m_value ) T( other.m_value ); - } - - ResultValueBase( ResultType, T const& value ): ResultBase( ResultType::Ok ) { - new ( &m_value ) T( value ); - } - - auto operator=( ResultValueBase const& other ) - -> ResultValueBase& { - if ( m_type == ResultType::Ok ) - m_value.~T(); - ResultBase::operator=( other ); - if ( m_type == ResultType::Ok ) - new ( &m_value ) T( other.m_value ); - return *this; - } - - ~ResultValueBase() override { - if ( m_type == ResultType::Ok ) - m_value.~T(); - } - - union { - T m_value; - }; - }; - - template <> class ResultValueBase : public ResultBase { - protected: - using ResultBase::ResultBase; - }; - - template - class BasicResult : public ResultValueBase { - public: - template - explicit BasicResult( BasicResult const& other ): - ResultValueBase( other.type() ), - m_errorMessage( other.errorMessage() ) { - assert( type() != ResultType::Ok ); - } - - template - static auto ok( U const& value ) -> BasicResult { - return { ResultType::Ok, value }; - } - static auto ok() -> BasicResult { return { ResultType::Ok }; } - static auto logicError( std::string&& message ) - -> BasicResult { - return { ResultType::LogicError, CATCH_MOVE(message) }; - } - static auto runtimeError( std::string&& message ) - -> BasicResult { - return { ResultType::RuntimeError, CATCH_MOVE(message) }; - } - - explicit operator bool() const { - return m_type == ResultType::Ok; - } - auto type() const -> ResultType { return m_type; } - auto errorMessage() const -> std::string const& { - return m_errorMessage; - } - - protected: - void enforceOk() const override { - - // Errors shouldn't reach this point, but if they do - // the actual error message will be in m_errorMessage - assert( m_type != ResultType::LogicError ); - assert( m_type != ResultType::RuntimeError ); - if ( m_type != ResultType::Ok ) - std::abort(); - } - - std::string - m_errorMessage; // Only populated if resultType is an error - - BasicResult( ResultType type, - std::string&& message ): - ResultValueBase( type ), m_errorMessage( CATCH_MOVE(message) ) { - assert( m_type != ResultType::Ok ); - } - - using ResultValueBase::ResultValueBase; - using ResultBase::m_type; - }; - - class ParseState { - public: - ParseState( ParseResultType type, - TokenStream const& remainingTokens ); - - ParseResultType type() const { return m_type; } - TokenStream const& remainingTokens() const { - return m_remainingTokens; - } - - private: - ParseResultType m_type; - TokenStream m_remainingTokens; - }; - - using Result = BasicResult; - using ParserResult = BasicResult; - using InternalParseResult = BasicResult; - - struct HelpColumns { - std::string left; - std::string right; - }; - - template - ParserResult convertInto( std::string const& source, T& target ) { - std::stringstream ss( source ); - ss >> target; - if ( ss.fail() ) { - return ParserResult::runtimeError( - "Unable to convert '" + source + - "' to destination type" ); - } else { - return ParserResult::ok( ParseResultType::Matched ); - } - } - ParserResult convertInto( std::string const& source, - std::string& target ); - ParserResult convertInto( std::string const& source, bool& target ); - -#ifdef CLARA_CONFIG_OPTIONAL_TYPE - template - auto convertInto( std::string const& source, - CLARA_CONFIG_OPTIONAL_TYPE& target ) - -> ParserResult { - T temp; - auto result = convertInto( source, temp ); - if ( result ) - target = CATCH_MOVE( temp ); - return result; - } -#endif // CLARA_CONFIG_OPTIONAL_TYPE - - struct BoundRef : Catch::Detail::NonCopyable { - virtual ~BoundRef() = default; - virtual bool isContainer() const; - virtual bool isFlag() const; - }; - struct BoundValueRefBase : BoundRef { - virtual auto setValue( std::string const& arg ) - -> ParserResult = 0; - }; - struct BoundFlagRefBase : BoundRef { - virtual auto setFlag( bool flag ) -> ParserResult = 0; - bool isFlag() const override; - }; - - template struct BoundValueRef : BoundValueRefBase { - T& m_ref; - - explicit BoundValueRef( T& ref ): m_ref( ref ) {} - - ParserResult setValue( std::string const& arg ) override { - return convertInto( arg, m_ref ); - } - }; - - template - struct BoundValueRef> : BoundValueRefBase { - std::vector& m_ref; - - explicit BoundValueRef( std::vector& ref ): m_ref( ref ) {} - - auto isContainer() const -> bool override { return true; } - - auto setValue( std::string const& arg ) - -> ParserResult override { - T temp; - auto result = convertInto( arg, temp ); - if ( result ) - m_ref.push_back( temp ); - return result; - } - }; - - struct BoundFlagRef : BoundFlagRefBase { - bool& m_ref; - - explicit BoundFlagRef( bool& ref ): m_ref( ref ) {} - - ParserResult setFlag( bool flag ) override; - }; - - template struct LambdaInvoker { - static_assert( - std::is_same::value, - "Lambda must return void or clara::ParserResult" ); - - template - static auto invoke( L const& lambda, ArgType const& arg ) - -> ParserResult { - return lambda( arg ); - } - }; - - template <> struct LambdaInvoker { - template - static auto invoke( L const& lambda, ArgType const& arg ) - -> ParserResult { - lambda( arg ); - return ParserResult::ok( ParseResultType::Matched ); - } - }; - - template - auto invokeLambda( L const& lambda, std::string const& arg ) - -> ParserResult { - ArgType temp{}; - auto result = convertInto( arg, temp ); - return !result ? result - : LambdaInvoker::ReturnType>::invoke( lambda, temp ); - } - - template struct BoundLambda : BoundValueRefBase { - L m_lambda; - - static_assert( - UnaryLambdaTraits::isValid, - "Supplied lambda must take exactly one argument" ); - explicit BoundLambda( L const& lambda ): m_lambda( lambda ) {} - - auto setValue( std::string const& arg ) - -> ParserResult override { - return invokeLambda::ArgType>( - m_lambda, arg ); - } - }; - - template struct BoundManyLambda : BoundLambda { - explicit BoundManyLambda( L const& lambda ): BoundLambda( lambda ) {} - bool isContainer() const override { return true; } - }; - - template struct BoundFlagLambda : BoundFlagRefBase { - L m_lambda; - - static_assert( - UnaryLambdaTraits::isValid, - "Supplied lambda must take exactly one argument" ); - static_assert( - std::is_same::ArgType, - bool>::value, - "flags must be boolean" ); - - explicit BoundFlagLambda( L const& lambda ): - m_lambda( lambda ) {} - - auto setFlag( bool flag ) -> ParserResult override { - return LambdaInvoker::ReturnType>::invoke( m_lambda, flag ); - } - }; - - enum class Optionality { Optional, Required }; - - class ParserBase { - public: - virtual ~ParserBase() = default; - virtual auto validate() const -> Result { return Result::ok(); } - virtual auto parse( std::string const& exeName, - TokenStream const& tokens ) const - -> InternalParseResult = 0; - virtual size_t cardinality() const; - - InternalParseResult parse( Args const& args ) const; - }; - - template - class ComposableParserImpl : public ParserBase { - public: - template - auto operator|( T const& other ) const -> Parser; - }; - - // Common code and state for Args and Opts - template - class ParserRefImpl : public ComposableParserImpl { - protected: - Optionality m_optionality = Optionality::Optional; - std::shared_ptr m_ref; - std::string m_hint; - std::string m_description; - - explicit ParserRefImpl( std::shared_ptr const& ref ): - m_ref( ref ) {} - - public: - template - ParserRefImpl( accept_many_t, - LambdaT const& ref, - std::string const& hint ): - m_ref( std::make_shared>( ref ) ), - m_hint( hint ) {} - - template ::value>> - ParserRefImpl( T& ref, std::string const& hint ): - m_ref( std::make_shared>( ref ) ), - m_hint( hint ) {} - - template ::value>> - ParserRefImpl( LambdaT const& ref, std::string const& hint ): - m_ref( std::make_shared>( ref ) ), - m_hint( hint ) {} - - auto operator()( std::string const& description ) -> DerivedT& { - m_description = description; - return static_cast( *this ); - } - - auto optional() -> DerivedT& { - m_optionality = Optionality::Optional; - return static_cast( *this ); - } - - auto required() -> DerivedT& { - m_optionality = Optionality::Required; - return static_cast( *this ); - } - - auto isOptional() const -> bool { - return m_optionality == Optionality::Optional; - } - - auto cardinality() const -> size_t override { - if ( m_ref->isContainer() ) - return 0; - else - return 1; - } - - std::string const& hint() const { return m_hint; } - }; - - } // namespace detail - - - // A parser for arguments - class Arg : public Detail::ParserRefImpl { - public: - using ParserRefImpl::ParserRefImpl; - using ParserBase::parse; - - Detail::InternalParseResult - parse(std::string const&, - Detail::TokenStream const& tokens) const override; - }; - - // A parser for options - class Opt : public Detail::ParserRefImpl { - protected: - std::vector m_optNames; - - public: - template - explicit Opt(LambdaT const& ref) : - ParserRefImpl( - std::make_shared>(ref)) {} - - explicit Opt(bool& ref); - - template ::value>> - Opt( LambdaT const& ref, std::string const& hint ): - ParserRefImpl( ref, hint ) {} - - template - Opt( accept_many_t, LambdaT const& ref, std::string const& hint ): - ParserRefImpl( accept_many, ref, hint ) {} - - template ::value>> - Opt( T& ref, std::string const& hint ): - ParserRefImpl( ref, hint ) {} - - auto operator[](std::string const& optName) -> Opt& { - m_optNames.push_back(optName); - return *this; - } - - std::vector getHelpColumns() const; - - bool isMatch(std::string const& optToken) const; - - using ParserBase::parse; - - Detail::InternalParseResult - parse(std::string const&, - Detail::TokenStream const& tokens) const override; - - Detail::Result validate() const override; - }; - - // Specifies the name of the executable - class ExeName : public Detail::ComposableParserImpl { - std::shared_ptr m_name; - std::shared_ptr m_ref; - - public: - ExeName(); - explicit ExeName(std::string& ref); - - template - explicit ExeName(LambdaT const& lambda) : ExeName() { - m_ref = std::make_shared>(lambda); - } - - // The exe name is not parsed out of the normal tokens, but is - // handled specially - Detail::InternalParseResult - parse(std::string const&, - Detail::TokenStream const& tokens) const override; - - std::string const& name() const { return *m_name; } - Detail::ParserResult set(std::string const& newName); - }; - - - // A Combined parser - class Parser : Detail::ParserBase { - mutable ExeName m_exeName; - std::vector m_options; - std::vector m_args; - - public: - - auto operator|=(ExeName const& exeName) -> Parser& { - m_exeName = exeName; - return *this; - } - - auto operator|=(Arg const& arg) -> Parser& { - m_args.push_back(arg); - return *this; - } - - auto operator|=(Opt const& opt) -> Parser& { - m_options.push_back(opt); - return *this; - } - - Parser& operator|=(Parser const& other); - - template - auto operator|(T const& other) const -> Parser { - return Parser(*this) |= other; - } - - std::vector getHelpColumns() const; - - void writeToStream(std::ostream& os) const; - - friend auto operator<<(std::ostream& os, Parser const& parser) - -> std::ostream& { - parser.writeToStream(os); - return os; - } - - Detail::Result validate() const override; - - using ParserBase::parse; - Detail::InternalParseResult - parse(std::string const& exeName, - Detail::TokenStream const& tokens) const override; - }; - - // Transport for raw args (copied from main args, or supplied via - // init list for testing) - class Args { - friend Detail::TokenStream; - std::string m_exeName; - std::vector m_args; - - public: - Args(int argc, char const* const* argv); - Args(std::initializer_list args); - - std::string const& exeName() const { return m_exeName; } - }; - - - // Convenience wrapper for option parser that specifies the help option - struct Help : Opt { - Help(bool& showHelpFlag); - }; - - // Result type for parser operation - using Detail::ParserResult; - - namespace Detail { - template - template - Parser - ComposableParserImpl::operator|(T const& other) const { - return Parser() | static_cast(*this) | other; - } - } - - } // namespace Clara -} // namespace Catch - -#if defined( __clang__ ) -# pragma clang diagnostic pop -#endif - -#if defined( __GNUC__ ) -# pragma GCC diagnostic pop -#endif - -#endif // CATCH_CLARA_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_commandline.cpp b/lib/Catch2/src/catch2/internal/catch_commandline.cpp deleted file mode 100644 index 81aa073..0000000 --- a/lib/Catch2/src/catch2/internal/catch_commandline.cpp +++ /dev/null @@ -1,313 +0,0 @@ - -// 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 - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace Catch { - - Clara::Parser makeCommandLineParser( ConfigData& config ) { - - using namespace Clara; - - auto const setWarning = [&]( std::string const& warning ) { - if ( warning == "NoAssertions" ) { - config.warnings = static_cast(config.warnings | WarnAbout::NoAssertions); - return ParserResult::ok( ParseResultType::Matched ); - } else if ( warning == "UnmatchedTestSpec" ) { - config.warnings = static_cast(config.warnings | WarnAbout::UnmatchedTestSpec); - return ParserResult::ok( ParseResultType::Matched ); - } - - return ParserResult ::runtimeError( - "Unrecognised warning option: '" + warning + '\'' ); - }; - auto const loadTestNamesFromFile = [&]( std::string const& filename ) { - std::ifstream f( filename.c_str() ); - if( !f.is_open() ) - return ParserResult::runtimeError( "Unable to load input file: '" + filename + '\'' ); - - std::string line; - while( std::getline( f, line ) ) { - line = trim(line); - if( !line.empty() && !startsWith( line, '#' ) ) { - if( !startsWith( line, '"' ) ) - line = '"' + line + '"'; - config.testsOrTags.push_back( line ); - config.testsOrTags.emplace_back( "," ); - } - } - //Remove comma in the end - if(!config.testsOrTags.empty()) - config.testsOrTags.erase( config.testsOrTags.end()-1 ); - - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setTestOrder = [&]( std::string const& order ) { - if( startsWith( "declared", order ) ) - config.runOrder = TestRunOrder::Declared; - else if( startsWith( "lexical", order ) ) - config.runOrder = TestRunOrder::LexicographicallySorted; - else if( startsWith( "random", order ) ) - config.runOrder = TestRunOrder::Randomized; - else - return ParserResult::runtimeError( "Unrecognised ordering: '" + order + '\'' ); - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setRngSeed = [&]( std::string const& seed ) { - if( seed == "time" ) { - config.rngSeed = generateRandomSeed(GenerateFrom::Time); - return ParserResult::ok(ParseResultType::Matched); - } else if (seed == "random-device") { - config.rngSeed = generateRandomSeed(GenerateFrom::RandomDevice); - return ParserResult::ok(ParseResultType::Matched); - } - - // TODO: ideally we should be parsing uint32_t directly - // fix this later when we add new parse overload - auto parsedSeed = parseUInt( seed, 0 ); - if ( !parsedSeed ) { - return ParserResult::runtimeError( "Could not parse '" + seed + "' as seed" ); - } - config.rngSeed = *parsedSeed; - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setDefaultColourMode = [&]( std::string const& colourMode ) { - Optional maybeMode = Catch::Detail::stringToColourMode(toLower( colourMode )); - if ( !maybeMode ) { - return ParserResult::runtimeError( - "colour mode must be one of: default, ansi, win32, " - "or none. '" + - colourMode + "' is not recognised" ); - } - auto mode = *maybeMode; - if ( !isColourImplAvailable( mode ) ) { - return ParserResult::runtimeError( - "colour mode '" + colourMode + - "' is not supported in this binary" ); - } - config.defaultColourMode = mode; - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setWaitForKeypress = [&]( std::string const& keypress ) { - auto keypressLc = toLower( keypress ); - if (keypressLc == "never") - config.waitForKeypress = WaitForKeypress::Never; - else if( keypressLc == "start" ) - config.waitForKeypress = WaitForKeypress::BeforeStart; - else if( keypressLc == "exit" ) - config.waitForKeypress = WaitForKeypress::BeforeExit; - else if( keypressLc == "both" ) - config.waitForKeypress = WaitForKeypress::BeforeStartAndExit; - else - return ParserResult::runtimeError( "keypress argument must be one of: never, start, exit or both. '" + keypress + "' not recognised" ); - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setVerbosity = [&]( std::string const& verbosity ) { - auto lcVerbosity = toLower( verbosity ); - if( lcVerbosity == "quiet" ) - config.verbosity = Verbosity::Quiet; - else if( lcVerbosity == "normal" ) - config.verbosity = Verbosity::Normal; - else if( lcVerbosity == "high" ) - config.verbosity = Verbosity::High; - else - return ParserResult::runtimeError( "Unrecognised verbosity, '" + verbosity + '\'' ); - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setReporter = [&]( std::string const& userReporterSpec ) { - if ( userReporterSpec.empty() ) { - return ParserResult::runtimeError( "Received empty reporter spec." ); - } - - Optional parsed = - parseReporterSpec( userReporterSpec ); - if ( !parsed ) { - return ParserResult::runtimeError( - "Could not parse reporter spec '" + userReporterSpec + - "'" ); - } - - auto const& reporterSpec = *parsed; - - IReporterRegistry::FactoryMap const& factories = - getRegistryHub().getReporterRegistry().getFactories(); - auto result = factories.find( reporterSpec.name() ); - - if ( result == factories.end() ) { - return ParserResult::runtimeError( - "Unrecognized reporter, '" + reporterSpec.name() + - "'. Check available with --list-reporters" ); - } - - - const bool hadOutputFile = reporterSpec.outputFile().some(); - config.reporterSpecifications.push_back( CATCH_MOVE( *parsed ) ); - // It would be enough to check this only once at the very end, but - // there is not a place where we could call this check, so do it - // every time it could fail. For valid inputs, this is still called - // at most once. - if (!hadOutputFile) { - int n_reporters_without_file = 0; - for (auto const& spec : config.reporterSpecifications) { - if (spec.outputFile().none()) { - n_reporters_without_file++; - } - } - if (n_reporters_without_file > 1) { - return ParserResult::runtimeError( "Only one reporter may have unspecified output file." ); - } - } - - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setShardCount = [&]( std::string const& shardCount ) { - auto parsedCount = parseUInt( shardCount ); - if ( !parsedCount ) { - return ParserResult::runtimeError( - "Could not parse '" + shardCount + "' as shard count" ); - } - if ( *parsedCount == 0 ) { - return ParserResult::runtimeError( - "Shard count must be positive" ); - } - config.shardCount = *parsedCount; - return ParserResult::ok( ParseResultType::Matched ); - }; - - auto const setShardIndex = [&](std::string const& shardIndex) { - auto parsedIndex = parseUInt( shardIndex ); - if ( !parsedIndex ) { - return ParserResult::runtimeError( - "Could not parse '" + shardIndex + "' as shard index" ); - } - config.shardIndex = *parsedIndex; - return ParserResult::ok( ParseResultType::Matched ); - }; - - auto cli - = ExeName( config.processName ) - | Help( config.showHelp ) - | Opt( config.showSuccessfulTests ) - ["-s"]["--success"] - ( "include successful tests in output" ) - | Opt( config.shouldDebugBreak ) - ["-b"]["--break"] - ( "break into debugger on failure" ) - | Opt( config.noThrow ) - ["-e"]["--nothrow"] - ( "skip exception tests" ) - | Opt( config.showInvisibles ) - ["-i"]["--invisibles"] - ( "show invisibles (tabs, newlines)" ) - | Opt( config.defaultOutputFilename, "filename" ) - ["-o"]["--out"] - ( "default output filename" ) - | Opt( accept_many, setReporter, "name[::key=value]*" ) - ["-r"]["--reporter"] - ( "reporter to use (defaults to console)" ) - | Opt( config.name, "name" ) - ["-n"]["--name"] - ( "suite name" ) - | Opt( [&]( bool ){ config.abortAfter = 1; } ) - ["-a"]["--abort"] - ( "abort at first failure" ) - | Opt( [&]( int x ){ config.abortAfter = x; }, "no. failures" ) - ["-x"]["--abortx"] - ( "abort after x failures" ) - | Opt( accept_many, setWarning, "warning name" ) - ["-w"]["--warn"] - ( "enable warnings" ) - | Opt( [&]( bool flag ) { config.showDurations = flag ? ShowDurations::Always : ShowDurations::Never; }, "yes|no" ) - ["-d"]["--durations"] - ( "show test durations" ) - | Opt( config.minDuration, "seconds" ) - ["-D"]["--min-duration"] - ( "show test durations for tests taking at least the given number of seconds" ) - | Opt( loadTestNamesFromFile, "filename" ) - ["-f"]["--input-file"] - ( "load test names to run from a file" ) - | Opt( config.filenamesAsTags ) - ["-#"]["--filenames-as-tags"] - ( "adds a tag for the filename" ) - | Opt( config.sectionsToRun, "section name" ) - ["-c"]["--section"] - ( "specify section to run" ) - | Opt( setVerbosity, "quiet|normal|high" ) - ["-v"]["--verbosity"] - ( "set output verbosity" ) - | Opt( config.listTests ) - ["--list-tests"] - ( "list all/matching test cases" ) - | Opt( config.listTags ) - ["--list-tags"] - ( "list all/matching tags" ) - | Opt( config.listReporters ) - ["--list-reporters"] - ( "list all available reporters" ) - | Opt( config.listListeners ) - ["--list-listeners"] - ( "list all listeners" ) - | Opt( setTestOrder, "decl|lex|rand" ) - ["--order"] - ( "test case order (defaults to decl)" ) - | Opt( setRngSeed, "'time'|'random-device'|number" ) - ["--rng-seed"] - ( "set a specific seed for random numbers" ) - | Opt( setDefaultColourMode, "ansi|win32|none|default" ) - ["--colour-mode"] - ( "what color mode should be used as default" ) - | Opt( config.libIdentify ) - ["--libidentify"] - ( "report name and version according to libidentify standard" ) - | Opt( setWaitForKeypress, "never|start|exit|both" ) - ["--wait-for-keypress"] - ( "waits for a keypress before exiting" ) - | Opt( config.skipBenchmarks) - ["--skip-benchmarks"] - ( "disable running benchmarks") - | Opt( config.benchmarkSamples, "samples" ) - ["--benchmark-samples"] - ( "number of samples to collect (default: 100)" ) - | Opt( config.benchmarkResamples, "resamples" ) - ["--benchmark-resamples"] - ( "number of resamples for the bootstrap (default: 100000)" ) - | Opt( config.benchmarkConfidenceInterval, "confidence interval" ) - ["--benchmark-confidence-interval"] - ( "confidence interval for the bootstrap (between 0 and 1, default: 0.95)" ) - | Opt( config.benchmarkNoAnalysis ) - ["--benchmark-no-analysis"] - ( "perform only measurements; do not perform any analysis" ) - | Opt( config.benchmarkWarmupTime, "benchmarkWarmupTime" ) - ["--benchmark-warmup-time"] - ( "amount of time in milliseconds spent on warming up each test (default: 100)" ) - | Opt( setShardCount, "shard count" ) - ["--shard-count"] - ( "split the tests to execute into this many groups" ) - | Opt( setShardIndex, "shard index" ) - ["--shard-index"] - ( "index of the group of tests to execute (see --shard-count)" ) | - Opt( config.allowZeroTests ) - ["--allow-running-no-tests"] - ( "Treat 'No tests run' as a success" ) - | Arg( config.testsOrTags, "test name|pattern|tags" ) - ( "which test or tests to use" ); - - return cli; - } - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/internal/catch_commandline.hpp b/lib/Catch2/src/catch2/internal/catch_commandline.hpp deleted file mode 100644 index 8cc2254..0000000 --- a/lib/Catch2/src/catch2/internal/catch_commandline.hpp +++ /dev/null @@ -1,21 +0,0 @@ - -// 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 -#ifndef CATCH_COMMANDLINE_HPP_INCLUDED -#define CATCH_COMMANDLINE_HPP_INCLUDED - -#include - -namespace Catch { - - struct ConfigData; - - Clara::Parser makeCommandLineParser( ConfigData& config ); - -} // end namespace Catch - -#endif // CATCH_COMMANDLINE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_compare_traits.hpp b/lib/Catch2/src/catch2/internal/catch_compare_traits.hpp deleted file mode 100644 index 2debece..0000000 --- a/lib/Catch2/src/catch2/internal/catch_compare_traits.hpp +++ /dev/null @@ -1,65 +0,0 @@ - -// 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 -#ifndef CATCH_COMPARE_TRAITS_HPP_INCLUDED -#define CATCH_COMPARE_TRAITS_HPP_INCLUDED - -#include - -#include - -namespace Catch { - namespace Detail { - -#if defined( __GNUC__ ) && !defined( __clang__ ) -# pragma GCC diagnostic push - // GCC likes to complain about comparing bool with 0, in the decltype() - // that defines the comparable traits below. -# pragma GCC diagnostic ignored "-Wbool-compare" - // "ordered comparison of pointer with integer zero" same as above, - // but it does not have a separate warning flag to suppress -# pragma GCC diagnostic ignored "-Wextra" - // Did you know that comparing floats with `0` directly - // is super-duper dangerous in unevaluated context? -# pragma GCC diagnostic ignored "-Wfloat-equal" -#endif - -#define CATCH_DEFINE_COMPARABLE_TRAIT( id, op ) \ - template \ - struct is_##id##_comparable : std::false_type {}; \ - template \ - struct is_##id##_comparable< \ - T, \ - U, \ - void_t() op std::declval() )>> \ - : std::true_type {}; \ - template \ - struct is_##id##_0_comparable : std::false_type {}; \ - template \ - struct is_##id##_0_comparable() op 0 )>> \ - : std::true_type {}; - - // We need all 6 pre-spaceship comparison ops: <, <=, >, >=, ==, != - CATCH_DEFINE_COMPARABLE_TRAIT( lt, < ) - CATCH_DEFINE_COMPARABLE_TRAIT( le, <= ) - CATCH_DEFINE_COMPARABLE_TRAIT( gt, > ) - CATCH_DEFINE_COMPARABLE_TRAIT( ge, >= ) - CATCH_DEFINE_COMPARABLE_TRAIT( eq, == ) - CATCH_DEFINE_COMPARABLE_TRAIT( ne, != ) - -#undef CATCH_DEFINE_COMPARABLE_TRAIT - -#if defined( __GNUC__ ) && !defined( __clang__ ) -# pragma GCC diagnostic pop -#endif - - - } // namespace Detail -} // namespace Catch - -#endif // CATCH_COMPARE_TRAITS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_compiler_capabilities.hpp b/lib/Catch2/src/catch2/internal/catch_compiler_capabilities.hpp deleted file mode 100644 index d457a4b..0000000 --- a/lib/Catch2/src/catch2/internal/catch_compiler_capabilities.hpp +++ /dev/null @@ -1,413 +0,0 @@ - -// 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 -#ifndef CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED -#define CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED - -// Detect a number of compiler features - by compiler -// The following features are defined: -// -// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported? -// CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported? -// CATCH_CONFIG_DISABLE_EXCEPTIONS : Are exceptions enabled? -// **************** -// Note to maintainers: if new toggles are added please document them -// in configuration.md, too -// **************** - -// In general each macro has a _NO_ form -// (e.g. CATCH_CONFIG_NO_POSIX_SIGNALS) which disables the feature. -// Many features, at point of detection, define an _INTERNAL_ macro, so they -// can be combined, en-mass, with the _NO_ forms later. - -#include -#include - -#ifdef __cplusplus - -# if (__cplusplus >= 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L) -# define CATCH_CPP14_OR_GREATER -# endif - -# if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) -# define CATCH_CPP17_OR_GREATER -# endif - -#endif - -// Only GCC compiler should be used in this block, so other compilers trying to -// mask themselves as GCC should be ignored. -#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__) -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" ) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" ) - -// This only works on GCC 9+. so we have to also add a global suppression of Wparentheses -// for older versions of GCC. -# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ - _Pragma( "GCC diagnostic ignored \"-Wparentheses\"" ) - -# define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \ - _Pragma( "GCC diagnostic ignored \"-Wunused-variable\"" ) - -# define CATCH_INTERNAL_SUPPRESS_USELESS_CAST_WARNINGS \ - _Pragma( "GCC diagnostic ignored \"-Wuseless-cast\"" ) - -# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) - -#endif - -#if defined(__CUDACC__) && !defined(__clang__) -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "nv_diagnostic push" ) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "nv_diagnostic pop" ) -# define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS _Pragma( "nv_diag_suppress 177" ) -#endif - -// 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_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" ) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" ) - -#endif // __clang__ && !_MSC_VER - -#if defined(__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 -// like `std::string::~string` being called on an uninitialized value. -// -// For example, this code will likely segfault under IBM XL: -// ``` -// REQUIRE(std::string("12") + "34" == "1234") -// ``` -// -// Similarly, NVHPC's implementation of `__builtin_constant_p` has a bug which -// results in calls to the immediately evaluated lambda expressions to be -// reported as unevaluated lambdas. -// 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_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\"" ) - -#endif // __clang__ - - -//////////////////////////////////////////////////////////////////////////////// -// We know some environments not to support full POSIX signals -#if defined( CATCH_PLATFORM_WINDOWS ) || \ - defined( CATCH_PLATFORM_PLAYSTATION ) || \ - defined( __CYGWIN__ ) || \ - defined( __QNX__ ) || \ - defined( __EMSCRIPTEN__ ) || \ - defined( __DJGPP__ ) || \ - defined( __OS400__ ) -# define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS -#else -# define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Assume that some platforms do not support getenv. -#if defined(CATCH_PLATFORM_WINDOWS_UWP) || defined(CATCH_PLATFORM_PLAYSTATION) -# define CATCH_INTERNAL_CONFIG_NO_GETENV -#else -# define CATCH_INTERNAL_CONFIG_GETENV -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Android somehow still does not support std::to_string -#if defined(__ANDROID__) -# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Not all Windows environments support SEH properly -#if defined(__MINGW32__) -# define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH -#endif - -//////////////////////////////////////////////////////////////////////////////// -// PS4 -#if defined(__ORBIS__) -# define CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Cygwin -#ifdef __CYGWIN__ - -// Required for some versions of Cygwin to declare gettimeofday -// see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin -# define _BSD_SOURCE -// some versions of cygwin (most) do not support std::to_string. Use the libstd check. -// https://gcc.gnu.org/onlinedocs/gcc-4.8.2/libstdc++/api/a01053_source.html line 2812-2813 -# if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \ - && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)) - -# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING - -# endif -#endif // __CYGWIN__ - -//////////////////////////////////////////////////////////////////////////////// -// Visual C++ -#if defined(_MSC_VER) - -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) ) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION __pragma( warning(pop) ) - -// Universal Windows platform does not support SEH -// Or console colours (or console at all...) -# if defined(CATCH_PLATFORM_WINDOWS_UWP) -# define CATCH_INTERNAL_CONFIG_NO_COLOUR_WIN32 -# else -# define CATCH_INTERNAL_CONFIG_WINDOWS_SEH -# endif - -// MSVC traditional preprocessor needs some workaround for __VA_ARGS__ -// _MSVC_TRADITIONAL == 0 means new conformant preprocessor -// _MSVC_TRADITIONAL == 1 means old traditional non-conformant preprocessor -# if !defined(__clang__) // Handle Clang masquerading for msvc -# if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL) -# define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -# endif // MSVC_TRADITIONAL -# endif // __clang__ - -#endif // _MSC_VER - -#if defined(_REENTRANT) || defined(_MSC_VER) -// Enable async processing, as -pthread is specified or no additional linking is required -# define CATCH_INTERNAL_CONFIG_USE_ASYNC -#endif // _MSC_VER - -//////////////////////////////////////////////////////////////////////////////// -// Check if we are compiled with -fno-exceptions or equivalent -#if defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND) -# define CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED -#endif - - -//////////////////////////////////////////////////////////////////////////////// -// Embarcadero C++Build -#if defined(__BORLANDC__) - #define CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN -#endif - -//////////////////////////////////////////////////////////////////////////////// - -// RTX is a special version of Windows that is real time. -// This means that it is detected as Windows, but does not provide -// the same set of capabilities as real Windows does. -#if defined(UNDER_RTSS) || defined(RTX64_BUILD) - #define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH - #define CATCH_INTERNAL_CONFIG_NO_ASYNC - #define CATCH_INTERNAL_CONFIG_NO_COLOUR_WIN32 -#endif - -#if !defined(_GLIBCXX_USE_C99_MATH_TR1) -#define CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER -#endif - -// Various stdlib support checks that require __has_include -#if defined(__has_include) - // Check if string_view is available and usable - #if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW - #endif - - // Check if optional is available and usable - # if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL - # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) - - // Check if byte is available and usable - # if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # include - # if defined(__cpp_lib_byte) && (__cpp_lib_byte > 0) - # define CATCH_INTERNAL_CONFIG_CPP17_BYTE - # endif - # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) - - // Check if variant is available and usable - # if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # if defined(__clang__) && (__clang_major__ < 8) - // work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852 - // fix should be in clang 8, workaround in libstdc++ 8.2 - # include - # if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) - # define CATCH_CONFIG_NO_CPP17_VARIANT - # else - # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT - # endif // defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) - # else - # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT - # endif // defined(__clang__) && (__clang_major__ < 8) - # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) -#endif // defined(__has_include) - - -#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH) -# define CATCH_CONFIG_WINDOWS_SEH -#endif -// This is set by default, because we assume that unix compilers are posix-signal-compatible by default. -#if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS) -# define CATCH_CONFIG_POSIX_SIGNALS -#endif - -#if defined(CATCH_INTERNAL_CONFIG_GETENV) && !defined(CATCH_INTERNAL_CONFIG_NO_GETENV) && !defined(CATCH_CONFIG_NO_GETENV) && !defined(CATCH_CONFIG_GETENV) -# define CATCH_CONFIG_GETENV -#endif - -#if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING) -# define CATCH_CONFIG_CPP11_TO_STRING -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_NO_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_CPP17_OPTIONAL) -# define CATCH_CONFIG_CPP17_OPTIONAL -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW) -# define CATCH_CONFIG_CPP17_STRING_VIEW -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_VARIANT) && !defined(CATCH_CONFIG_NO_CPP17_VARIANT) && !defined(CATCH_CONFIG_CPP17_VARIANT) -# define CATCH_CONFIG_CPP17_VARIANT -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_BYTE) && !defined(CATCH_CONFIG_NO_CPP17_BYTE) && !defined(CATCH_CONFIG_CPP17_BYTE) -# define CATCH_CONFIG_CPP17_BYTE -#endif - - -#if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT) -# define CATCH_INTERNAL_CONFIG_NEW_CAPTURE -#endif - -#if defined(CATCH_INTERNAL_CONFIG_NEW_CAPTURE) && !defined(CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NEW_CAPTURE) -# define CATCH_CONFIG_NEW_CAPTURE -#endif - -#if !defined( CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED ) && \ - !defined( CATCH_CONFIG_DISABLE_EXCEPTIONS ) && \ - !defined( CATCH_CONFIG_NO_DISABLE_EXCEPTIONS ) -# define CATCH_CONFIG_DISABLE_EXCEPTIONS -#endif - -#if defined(CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_NO_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_POLYFILL_ISNAN) -# define CATCH_CONFIG_POLYFILL_ISNAN -#endif - -#if defined(CATCH_INTERNAL_CONFIG_USE_ASYNC) && !defined(CATCH_INTERNAL_CONFIG_NO_ASYNC) && !defined(CATCH_CONFIG_NO_USE_ASYNC) && !defined(CATCH_CONFIG_USE_ASYNC) -# define CATCH_CONFIG_USE_ASYNC -#endif - -#if defined(CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_NO_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_GLOBAL_NEXTAFTER) -# define CATCH_CONFIG_GLOBAL_NEXTAFTER -#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) -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION -#endif -#if !defined(CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_USELESS_CAST_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_USELESS_CAST_WARNINGS -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_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) -# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS -#endif - -#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS -#endif - -#if !defined(CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS -#endif - -#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) -#define CATCH_TRY if ((true)) -#define CATCH_CATCH_ALL if ((false)) -#define CATCH_CATCH_ANON(type) if ((false)) -#else -#define CATCH_TRY try -#define CATCH_CATCH_ALL catch (...) -#define CATCH_CATCH_ANON(type) catch (type) -#endif - -#if defined(CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_NO_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) -#define CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#endif - -#if defined( CATCH_PLATFORM_WINDOWS ) && \ - !defined( CATCH_CONFIG_COLOUR_WIN32 ) && \ - !defined( CATCH_CONFIG_NO_COLOUR_WIN32 ) && \ - !defined( CATCH_INTERNAL_CONFIG_NO_COLOUR_WIN32 ) -# define CATCH_CONFIG_COLOUR_WIN32 -#endif - -#if defined( CATCH_CONFIG_SHARED_LIBRARY ) && defined( _MSC_VER ) && \ - !defined( CATCH_CONFIG_STATIC ) -# ifdef Catch2_EXPORTS -# define CATCH_EXPORT //__declspec( dllexport ) // not needed -# else -# define CATCH_EXPORT __declspec( dllimport ) -# endif -#else -# define CATCH_EXPORT -#endif - -#endif // CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_config_android_logwrite.hpp b/lib/Catch2/src/catch2/internal/catch_config_android_logwrite.hpp deleted file mode 100644 index 490ee37..0000000 --- a/lib/Catch2/src/catch2/internal/catch_config_android_logwrite.hpp +++ /dev/null @@ -1,33 +0,0 @@ - -// 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 - * Wrapper for ANDROID_LOGWRITE configuration option - * - * We want to default to enabling it when compiled for android, but - * users of the library should also be able to disable it if they want - * to. - */ - -#ifndef CATCH_CONFIG_ANDROID_LOGWRITE_HPP_INCLUDED -#define CATCH_CONFIG_ANDROID_LOGWRITE_HPP_INCLUDED - -#include - -#if defined(__ANDROID__) -# define CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE -#endif - - -#if defined( CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE ) && \ - !defined( CATCH_CONFIG_NO_ANDROID_LOGWRITE ) && \ - !defined( CATCH_CONFIG_ANDROID_LOGWRITE ) -# define CATCH_CONFIG_ANDROID_LOGWRITE -#endif - -#endif // CATCH_CONFIG_ANDROID_LOGWRITE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_config_counter.hpp b/lib/Catch2/src/catch2/internal/catch_config_counter.hpp deleted file mode 100644 index 23b2232..0000000 --- a/lib/Catch2/src/catch2/internal/catch_config_counter.hpp +++ /dev/null @@ -1,32 +0,0 @@ - -// 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 - * Wrapper for the CONFIG configuration option - * - * When generating internal unique names, there are two options. Either - * we mix in the current line number, or mix in an incrementing number. - * We prefer the latter, using `__COUNTER__`, but users might want to - * use the former. - */ - -#ifndef CATCH_CONFIG_COUNTER_HPP_INCLUDED -#define CATCH_CONFIG_COUNTER_HPP_INCLUDED - -#if ( !defined(__JETBRAINS_IDE__) || __JETBRAINS_IDE__ >= 20170300L ) - #define CATCH_INTERNAL_CONFIG_COUNTER -#endif - -#if defined( CATCH_INTERNAL_CONFIG_COUNTER ) && \ - !defined( CATCH_CONFIG_NO_COUNTER ) && \ - !defined( CATCH_CONFIG_COUNTER ) -# define CATCH_CONFIG_COUNTER -#endif - - -#endif // CATCH_CONFIG_COUNTER_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_config_uncaught_exceptions.hpp b/lib/Catch2/src/catch2/internal/catch_config_uncaught_exceptions.hpp deleted file mode 100644 index 5c4cb93..0000000 --- a/lib/Catch2/src/catch2/internal/catch_config_uncaught_exceptions.hpp +++ /dev/null @@ -1,44 +0,0 @@ - -// 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 - * Wrapper for UNCAUGHT_EXCEPTIONS configuration option - * - * For some functionality, Catch2 requires to know whether there is - * an active exception. Because `std::uncaught_exception` is deprecated - * in C++17, we want to use `std::uncaught_exceptions` if possible. - */ - -#ifndef CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP_INCLUDED -#define CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP_INCLUDED - -#if defined(_MSC_VER) -# if _MSC_VER >= 1900 // Visual Studio 2015 or newer -# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS -# endif -#endif - - -#include - -#if defined(__cpp_lib_uncaught_exceptions) \ - && !defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) - -# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS -#endif // __cpp_lib_uncaught_exceptions - - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) \ - && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) \ - && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) - -# define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS -#endif - - -#endif // CATCH_CONFIG_UNCAUGHT_EXCEPTIONS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_config_wchar.hpp b/lib/Catch2/src/catch2/internal/catch_config_wchar.hpp deleted file mode 100644 index 8c758ec..0000000 --- a/lib/Catch2/src/catch2/internal/catch_config_wchar.hpp +++ /dev/null @@ -1,33 +0,0 @@ - -// 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 - * Wrapper for the WCHAR configuration option - * - * We want to support platforms that do not provide `wchar_t`, so we - * sometimes have to disable providing wchar_t overloads through Catch2, - * e.g. the StringMaker specialization for `std::wstring`. - */ - -#ifndef CATCH_CONFIG_WCHAR_HPP_INCLUDED -#define CATCH_CONFIG_WCHAR_HPP_INCLUDED - -// We assume that WCHAR should be enabled by default, and only disabled -// for a shortlist (so far only DJGPP) of compilers. - -#if defined(__DJGPP__) -# define CATCH_INTERNAL_CONFIG_NO_WCHAR -#endif // __DJGPP__ - -#if !defined( CATCH_INTERNAL_CONFIG_NO_WCHAR ) && \ - !defined( CATCH_CONFIG_NO_WCHAR ) && \ - !defined( CATCH_CONFIG_WCHAR ) -# define CATCH_CONFIG_WCHAR -#endif - -#endif // CATCH_CONFIG_WCHAR_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_console_colour.cpp b/lib/Catch2/src/catch2/internal/catch_console_colour.cpp deleted file mode 100644 index 099a6c5..0000000 --- a/lib/Catch2/src/catch2/internal/catch_console_colour.cpp +++ /dev/null @@ -1,282 +0,0 @@ - -// 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 -#if defined(__clang__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wexit-time-destructors" -#endif - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace Catch { - - ColourImpl::~ColourImpl() = default; - - ColourImpl::ColourGuard ColourImpl::guardColour( Colour::Code colourCode ) { - return ColourGuard(colourCode, this ); - } - - void ColourImpl::ColourGuard::engageImpl( std::ostream& stream ) { - assert( &stream == &m_colourImpl->m_stream->stream() && - "Engaging colour guard for different stream than used by the " - "parent colour implementation" ); - static_cast( stream ); - - m_engaged = true; - m_colourImpl->use( m_code ); - } - - ColourImpl::ColourGuard::ColourGuard( Colour::Code code, - ColourImpl const* colour ): - m_colourImpl( colour ), m_code( code ) { - } - ColourImpl::ColourGuard::ColourGuard( ColourGuard&& rhs ) noexcept: - m_colourImpl( rhs.m_colourImpl ), - m_code( rhs.m_code ), - m_engaged( rhs.m_engaged ) { - rhs.m_engaged = false; - } - ColourImpl::ColourGuard& - ColourImpl::ColourGuard::operator=( ColourGuard&& rhs ) noexcept { - using std::swap; - swap( m_colourImpl, rhs.m_colourImpl ); - swap( m_code, rhs.m_code ); - swap( m_engaged, rhs.m_engaged ); - - return *this; - } - ColourImpl::ColourGuard::~ColourGuard() { - if ( m_engaged ) { - m_colourImpl->use( Colour::None ); - } - } - - ColourImpl::ColourGuard& - ColourImpl::ColourGuard::engage( std::ostream& stream ) & { - engageImpl( stream ); - return *this; - } - - ColourImpl::ColourGuard&& - ColourImpl::ColourGuard::engage( std::ostream& stream ) && { - engageImpl( stream ); - return CATCH_MOVE(*this); - } - - namespace { - //! A do-nothing implementation of colour, used as fallback for unknown - //! platforms, and when the user asks to deactivate all colours. - class NoColourImpl : public ColourImpl { - public: - NoColourImpl( IStream* stream ): ColourImpl( stream ) {} - - private: - void use( Colour::Code ) const override {} - }; - } // namespace - - -} // namespace Catch - - -#if defined ( CATCH_CONFIG_COLOUR_WIN32 ) ///////////////////////////////////////// - -namespace Catch { -namespace { - - class Win32ColourImpl : public ColourImpl { - public: - Win32ColourImpl(IStream* stream): - ColourImpl(stream) { - CONSOLE_SCREEN_BUFFER_INFO csbiInfo; - GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), - &csbiInfo ); - originalForegroundAttributes = csbiInfo.wAttributes & ~( BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_INTENSITY ); - originalBackgroundAttributes = csbiInfo.wAttributes & ~( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY ); - } - - static bool useImplementationForStream(IStream const& stream) { - // Win32 text colour APIs can only be used on console streams - // We cannot check that the output hasn't been redirected, - // so we just check that the original stream is console stream. - return stream.isConsole(); - } - - private: - void use( Colour::Code _colourCode ) const override { - switch( _colourCode ) { - case Colour::None: return setTextAttribute( originalForegroundAttributes ); - case Colour::White: return setTextAttribute( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); - case Colour::Red: return setTextAttribute( FOREGROUND_RED ); - case Colour::Green: return setTextAttribute( FOREGROUND_GREEN ); - case Colour::Blue: return setTextAttribute( FOREGROUND_BLUE ); - case Colour::Cyan: return setTextAttribute( FOREGROUND_BLUE | FOREGROUND_GREEN ); - case Colour::Yellow: return setTextAttribute( FOREGROUND_RED | FOREGROUND_GREEN ); - case Colour::Grey: return setTextAttribute( 0 ); - - case Colour::LightGrey: return setTextAttribute( FOREGROUND_INTENSITY ); - case Colour::BrightRed: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED ); - case Colour::BrightGreen: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN ); - case Colour::BrightWhite: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); - case Colour::BrightYellow: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN ); - - case Colour::Bright: CATCH_INTERNAL_ERROR( "not a colour" ); - - default: - CATCH_ERROR( "Unknown colour requested" ); - } - } - - void setTextAttribute( WORD _textAttribute ) const { - SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), - _textAttribute | - originalBackgroundAttributes ); - } - WORD originalForegroundAttributes; - WORD originalBackgroundAttributes; - }; - -} // end anon namespace -} // end namespace Catch - -#endif // Windows/ ANSI/ None - - -#if defined( CATCH_PLATFORM_LINUX ) || defined( CATCH_PLATFORM_MAC ) -# define CATCH_INTERNAL_HAS_ISATTY -# include -#endif - -namespace Catch { -namespace { - - class ANSIColourImpl : public ColourImpl { - public: - ANSIColourImpl( IStream* stream ): ColourImpl( stream ) {} - - static bool useImplementationForStream(IStream const& stream) { - // This is kinda messy due to trying to support a bunch of - // different platforms at once. - // The basic idea is that if we are asked to do autodetection (as - // opposed to being told to use posixy colours outright), then we - // only want to use the colours if we are writing to console. - // However, console might be redirected, so we make an attempt at - // checking for that on platforms where we know how to do that. - bool useColour = stream.isConsole(); -#if defined( CATCH_INTERNAL_HAS_ISATTY ) && \ - !( defined( __DJGPP__ ) && defined( __STRICT_ANSI__ ) ) - ErrnoGuard _; // for isatty - useColour = useColour && isatty( STDOUT_FILENO ); -# endif -# if defined( CATCH_PLATFORM_MAC ) || defined( CATCH_PLATFORM_IPHONE ) - useColour = useColour && !isDebuggerActive(); -# endif - - return useColour; - } - - private: - void use( Colour::Code _colourCode ) const override { - auto setColour = [&out = - m_stream->stream()]( char const* escapeCode ) { - // The escape sequence must be flushed to console, otherwise - // if stdin and stderr are intermixed, we'd get accidentally - // coloured output. - out << '\033' << escapeCode << std::flush; - }; - switch( _colourCode ) { - case Colour::None: - case Colour::White: return setColour( "[0m" ); - case Colour::Red: return setColour( "[0;31m" ); - case Colour::Green: return setColour( "[0;32m" ); - case Colour::Blue: return setColour( "[0;34m" ); - case Colour::Cyan: return setColour( "[0;36m" ); - case Colour::Yellow: return setColour( "[0;33m" ); - case Colour::Grey: return setColour( "[1;30m" ); - - case Colour::LightGrey: return setColour( "[0;37m" ); - case Colour::BrightRed: return setColour( "[1;31m" ); - case Colour::BrightGreen: return setColour( "[1;32m" ); - case Colour::BrightWhite: return setColour( "[1;37m" ); - case Colour::BrightYellow: return setColour( "[1;33m" ); - - case Colour::Bright: CATCH_INTERNAL_ERROR( "not a colour" ); - default: CATCH_INTERNAL_ERROR( "Unknown colour requested" ); - } - } - }; - -} // end anon namespace -} // end namespace Catch - -namespace Catch { - - Detail::unique_ptr makeColourImpl( ColourMode implSelection, - IStream* stream ) { -#if defined( CATCH_CONFIG_COLOUR_WIN32 ) - if ( implSelection == ColourMode::Win32 ) { - return Detail::make_unique( stream ); - } -#endif - if ( implSelection == ColourMode::ANSI ) { - return Detail::make_unique( stream ); - } - if ( implSelection == ColourMode::None ) { - return Detail::make_unique( stream ); - } - - if ( implSelection == ColourMode::PlatformDefault) { -#if defined( CATCH_CONFIG_COLOUR_WIN32 ) - if ( Win32ColourImpl::useImplementationForStream( *stream ) ) { - return Detail::make_unique( stream ); - } -#endif - if ( ANSIColourImpl::useImplementationForStream( *stream ) ) { - return Detail::make_unique( stream ); - } - return Detail::make_unique( stream ); - } - - CATCH_ERROR( "Could not create colour impl for selection " << static_cast(implSelection) ); - } - - bool isColourImplAvailable( ColourMode colourSelection ) { - switch ( colourSelection ) { -#if defined( CATCH_CONFIG_COLOUR_WIN32 ) - case ColourMode::Win32: -#endif - case ColourMode::ANSI: - case ColourMode::None: - case ColourMode::PlatformDefault: - return true; - default: - return false; - } - } - - -} // end namespace Catch - -#if defined(__clang__) -# pragma clang diagnostic pop -#endif - diff --git a/lib/Catch2/src/catch2/internal/catch_console_colour.hpp b/lib/Catch2/src/catch2/internal/catch_console_colour.hpp deleted file mode 100644 index 9aa6a16..0000000 --- a/lib/Catch2/src/catch2/internal/catch_console_colour.hpp +++ /dev/null @@ -1,140 +0,0 @@ - -// 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 -#ifndef CATCH_CONSOLE_COLOUR_HPP_INCLUDED -#define CATCH_CONSOLE_COLOUR_HPP_INCLUDED - -#include - -#include -#include - -namespace Catch { - - enum class ColourMode : std::uint8_t; - class IStream; - - struct Colour { - enum Code { - None = 0, - - White, - Red, - Green, - Blue, - Cyan, - Yellow, - Grey, - - Bright = 0x10, - - BrightRed = Bright | Red, - BrightGreen = Bright | Green, - LightGrey = Bright | Grey, - BrightWhite = Bright | White, - BrightYellow = Bright | Yellow, - - // By intention - FileName = LightGrey, - Warning = BrightYellow, - ResultError = BrightRed, - ResultSuccess = BrightGreen, - ResultExpectedFailure = Warning, - - Error = BrightRed, - Success = Green, - - OriginalExpression = Cyan, - ReconstructedExpression = BrightYellow, - - SecondaryText = LightGrey, - Headers = White - }; - }; - - class ColourImpl { - protected: - //! The associated stream of this ColourImpl instance - IStream* m_stream; - public: - ColourImpl( IStream* stream ): m_stream( stream ) {} - - //! RAII wrapper around writing specific colour of text using specific - //! colour impl into a stream. - class ColourGuard { - ColourImpl const* m_colourImpl; - Colour::Code m_code; - bool m_engaged = false; - - public: - //! Does **not** engage the guard/start the colour - ColourGuard( Colour::Code code, - ColourImpl const* colour ); - - ColourGuard( ColourGuard const& rhs ) = delete; - ColourGuard& operator=( ColourGuard const& rhs ) = delete; - - ColourGuard( ColourGuard&& rhs ) noexcept; - ColourGuard& operator=( ColourGuard&& rhs ) noexcept; - - //! Removes colour _if_ the guard was engaged - ~ColourGuard(); - - /** - * Explicitly engages colour for given stream. - * - * The API based on operator<< should be preferred. - */ - ColourGuard& engage( std::ostream& stream ) &; - /** - * Explicitly engages colour for given stream. - * - * The API based on operator<< should be preferred. - */ - ColourGuard&& engage( std::ostream& stream ) &&; - - private: - //! Engages the guard and starts using colour - friend std::ostream& operator<<( std::ostream& lhs, - ColourGuard& guard ) { - guard.engageImpl( lhs ); - return lhs; - } - //! Engages the guard and starts using colour - friend std::ostream& operator<<( std::ostream& lhs, - ColourGuard&& guard) { - guard.engageImpl( lhs ); - return lhs; - } - - void engageImpl( std::ostream& stream ); - - }; - - virtual ~ColourImpl(); // = default - /** - * Creates a guard object for given colour and this colour impl - * - * **Important:** - * the guard starts disengaged, and has to be engaged explicitly. - */ - ColourGuard guardColour( Colour::Code colourCode ); - - private: - virtual void use( Colour::Code colourCode ) const = 0; - }; - - //! Provides ColourImpl based on global config and target compilation platform - Detail::unique_ptr makeColourImpl( ColourMode colourSelection, - IStream* stream ); - - //! Checks if specific colour impl has been compiled into the binary - bool isColourImplAvailable( ColourMode colourSelection ); - -} // end namespace Catch - -#endif // CATCH_CONSOLE_COLOUR_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_console_width.hpp b/lib/Catch2/src/catch2/internal/catch_console_width.hpp deleted file mode 100644 index 1655361..0000000 --- a/lib/Catch2/src/catch2/internal/catch_console_width.hpp +++ /dev/null @@ -1,19 +0,0 @@ - -// 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 -#ifndef CATCH_CONSOLE_WIDTH_HPP_INCLUDED -#define CATCH_CONSOLE_WIDTH_HPP_INCLUDED - -// This include must be kept so that user's configured value for CONSOLE_WIDTH -// is used before we attempt to provide a default value -#include - -#ifndef CATCH_CONFIG_CONSOLE_WIDTH -#define CATCH_CONFIG_CONSOLE_WIDTH 80 -#endif - -#endif // CATCH_CONSOLE_WIDTH_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_container_nonmembers.hpp b/lib/Catch2/src/catch2/internal/catch_container_nonmembers.hpp deleted file mode 100644 index 33b28a9..0000000 --- a/lib/Catch2/src/catch2/internal/catch_container_nonmembers.hpp +++ /dev/null @@ -1,73 +0,0 @@ - -// 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 -#ifndef CATCH_CONTAINER_NONMEMBERS_HPP_INCLUDED -#define CATCH_CONTAINER_NONMEMBERS_HPP_INCLUDED - -#include - -#include -#include - -// We want a simple polyfill over `std::empty`, `std::size` and so on -// for C++14 or C++ libraries with incomplete support. -// We also have to handle that MSVC std lib will happily provide these -// under older standards. -#if defined(CATCH_CPP17_OR_GREATER) || defined(_MSC_VER) - -// We are already using this header either way, so there shouldn't -// be much additional overhead in including it to get the feature -// test macros -#include - -# if !defined(__cpp_lib_nonmember_container_access) -# define CATCH_CONFIG_POLYFILL_NONMEMBER_CONTAINER_ACCESS -# endif - -#else -#define CATCH_CONFIG_POLYFILL_NONMEMBER_CONTAINER_ACCESS -#endif - - - -namespace Catch { -namespace Detail { - -#if defined(CATCH_CONFIG_POLYFILL_NONMEMBER_CONTAINER_ACCESS) - template - constexpr auto empty(Container const& cont) -> decltype(cont.empty()) { - return cont.empty(); - } - template - constexpr bool empty(const T (&)[N]) noexcept { - // GCC < 7 does not support the const T(&)[] parameter syntax - // so we have to ignore the length explicitly - (void)N; - return false; - } - template - constexpr bool empty(std::initializer_list list) noexcept { - return list.size() > 0; - } - - - template - constexpr auto size(Container const& cont) -> decltype(cont.size()) { - return cont.size(); - } - template - constexpr std::size_t size(const T(&)[N]) noexcept { - return N; - } -#endif // CATCH_CONFIG_POLYFILL_NONMEMBER_CONTAINER_ACCESS - -} // end namespace Detail -} // end namespace Catch - - - -#endif // CATCH_CONTAINER_NONMEMBERS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_context.cpp b/lib/Catch2/src/catch2/internal/catch_context.cpp deleted file mode 100644 index 17f2850..0000000 --- a/lib/Catch2/src/catch2/internal/catch_context.cpp +++ /dev/null @@ -1,63 +0,0 @@ - -// 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 -#include -#include - -namespace Catch { - - class Context : public IMutableContext, private Detail::NonCopyable { - - public: // IContext - IResultCapture* getResultCapture() override { - return m_resultCapture; - } - - IConfig const* getConfig() const override { - return m_config; - } - - ~Context() override; - - public: // IMutableContext - void setResultCapture( IResultCapture* resultCapture ) override { - m_resultCapture = resultCapture; - } - void setConfig( IConfig const* config ) override { - m_config = config; - } - - friend IMutableContext& getCurrentMutableContext(); - - private: - IConfig const* m_config = nullptr; - IResultCapture* m_resultCapture = nullptr; - }; - - IMutableContext *IMutableContext::currentContext = nullptr; - - void IMutableContext::createContext() - { - currentContext = new Context(); - } - - void cleanUpContext() { - delete IMutableContext::currentContext; - IMutableContext::currentContext = nullptr; - } - IContext::~IContext() = default; - IMutableContext::~IMutableContext() = default; - Context::~Context() = default; - - - SimplePcg32& sharedRng() { - static SimplePcg32 s_rng; - return s_rng; - } - -} diff --git a/lib/Catch2/src/catch2/internal/catch_context.hpp b/lib/Catch2/src/catch2/internal/catch_context.hpp deleted file mode 100644 index a9d1b39..0000000 --- a/lib/Catch2/src/catch2/internal/catch_context.hpp +++ /dev/null @@ -1,58 +0,0 @@ - -// 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 -#ifndef CATCH_CONTEXT_HPP_INCLUDED -#define CATCH_CONTEXT_HPP_INCLUDED - -#include - -namespace Catch { - - class IResultCapture; - class IConfig; - - class IContext { - public: - virtual ~IContext(); // = default - - virtual IResultCapture* getResultCapture() = 0; - virtual IConfig const* getConfig() const = 0; - }; - - class IMutableContext : public IContext { - public: - ~IMutableContext() override; // = default - virtual void setResultCapture( IResultCapture* resultCapture ) = 0; - virtual void setConfig( IConfig const* config ) = 0; - - private: - CATCH_EXPORT static IMutableContext* currentContext; - friend IMutableContext& getCurrentMutableContext(); - friend void cleanUpContext(); - static void createContext(); - }; - - inline IMutableContext& getCurrentMutableContext() - { - if( !IMutableContext::currentContext ) - IMutableContext::createContext(); - // NOLINTNEXTLINE(clang-analyzer-core.uninitialized.UndefReturn) - return *IMutableContext::currentContext; - } - - inline IContext& getCurrentContext() - { - return getCurrentMutableContext(); - } - - void cleanUpContext(); - - class SimplePcg32; - SimplePcg32& sharedRng(); -} - -#endif // CATCH_CONTEXT_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_debug_console.cpp b/lib/Catch2/src/catch2/internal/catch_debug_console.cpp deleted file mode 100644 index 40dd0a6..0000000 --- a/lib/Catch2/src/catch2/internal/catch_debug_console.cpp +++ /dev/null @@ -1,45 +0,0 @@ - -// 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 - -#include -#include -#include -#include -#include - -#include - -#if defined(CATCH_CONFIG_ANDROID_LOGWRITE) -#include - - namespace Catch { - void writeToDebugConsole( std::string const& text ) { - __android_log_write( ANDROID_LOG_DEBUG, "Catch", text.c_str() ); - } - } - -#elif defined(CATCH_PLATFORM_WINDOWS) - - namespace Catch { - void writeToDebugConsole( std::string const& text ) { - ::OutputDebugStringA( text.c_str() ); - } - } - -#else - - namespace Catch { - void writeToDebugConsole( std::string const& text ) { - // !TBD: Need a version for Mac/ XCode and other IDEs - Catch::cout() << text; - } - } - -#endif // Platform diff --git a/lib/Catch2/src/catch2/internal/catch_debug_console.hpp b/lib/Catch2/src/catch2/internal/catch_debug_console.hpp deleted file mode 100644 index 8784f78..0000000 --- a/lib/Catch2/src/catch2/internal/catch_debug_console.hpp +++ /dev/null @@ -1,17 +0,0 @@ - -// 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 -#ifndef CATCH_DEBUG_CONSOLE_HPP_INCLUDED -#define CATCH_DEBUG_CONSOLE_HPP_INCLUDED - -#include - -namespace Catch { - void writeToDebugConsole( std::string const& text ); -} - -#endif // CATCH_DEBUG_CONSOLE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_debugger.cpp b/lib/Catch2/src/catch2/internal/catch_debugger.cpp deleted file mode 100644 index bd3be17..0000000 --- a/lib/Catch2/src/catch2/internal/catch_debugger.cpp +++ /dev/null @@ -1,120 +0,0 @@ - -// 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 -#include -#include -#include - -#if defined(CATCH_PLATFORM_MAC) || defined(CATCH_PLATFORM_IPHONE) - -# include -# include -# include -# include -# include - -#ifdef __apple_build_version__ - // These headers will only compile with AppleClang (XCode) - // For other compilers (Clang, GCC, ... ) we need to exclude them -# include -#endif - - namespace Catch { - #ifdef __apple_build_version__ - // The following function is taken directly from the following technical note: - // https://developer.apple.com/library/archive/qa/qa1361/_index.html - - // Returns true if the current process is being debugged (either - // running under the debugger or has a debugger attached post facto). - bool isDebuggerActive(){ - int mib[4]; - struct kinfo_proc info; - std::size_t size; - - // Initialize the flags so that, if sysctl fails for some bizarre - // reason, we get a predictable result. - - info.kp_proc.p_flag = 0; - - // Initialize mib, which tells sysctl the info we want, in this case - // we're looking for information about a specific process ID. - - mib[0] = CTL_KERN; - mib[1] = KERN_PROC; - mib[2] = KERN_PROC_PID; - mib[3] = getpid(); - - // Call sysctl. - - size = sizeof(info); - if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, nullptr, 0) != 0 ) { - Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n\n" << std::flush; - return false; - } - - // We're being debugged if the P_TRACED flag is set. - - return ( (info.kp_proc.p_flag & P_TRACED) != 0 ); - } - #else - bool isDebuggerActive() { - // We need to find another way to determine this for non-appleclang compilers on macOS - return false; - } - #endif - } // namespace Catch - -#elif defined(CATCH_PLATFORM_LINUX) - #include - #include - - namespace Catch{ - // The standard POSIX way of detecting a debugger is to attempt to - // ptrace() the process, but this needs to be done from a child and not - // this process itself to still allow attaching to this process later - // if wanted, so is rather heavy. Under Linux we have the PID of the - // "debugger" (which doesn't need to be gdb, of course, it could also - // be strace, for example) in /proc/$PID/status, so just get it from - // there instead. - bool isDebuggerActive(){ - // Libstdc++ has a bug, where std::ifstream sets errno to 0 - // This way our users can properly assert over errno values - ErrnoGuard guard; - std::ifstream in("/proc/self/status"); - for( std::string line; std::getline(in, line); ) { - static const int PREFIX_LEN = 11; - if( line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0 ) { - // We're traced if the PID is not 0 and no other PID starts - // with 0 digit, so it's enough to check for just a single - // character. - return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0'; - } - } - - return false; - } - } // namespace Catch -#elif defined(_MSC_VER) - extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); - namespace Catch { - bool isDebuggerActive() { - return IsDebuggerPresent() != 0; - } - } -#elif defined(__MINGW32__) - extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); - namespace Catch { - bool isDebuggerActive() { - return IsDebuggerPresent() != 0; - } - } -#else - namespace Catch { - bool isDebuggerActive() { return false; } - } -#endif // Platform diff --git a/lib/Catch2/src/catch2/internal/catch_debugger.hpp b/lib/Catch2/src/catch2/internal/catch_debugger.hpp deleted file mode 100644 index 30063d1..0000000 --- a/lib/Catch2/src/catch2/internal/catch_debugger.hpp +++ /dev/null @@ -1,64 +0,0 @@ - -// 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 -#ifndef CATCH_DEBUGGER_HPP_INCLUDED -#define CATCH_DEBUGGER_HPP_INCLUDED - -#include - -namespace Catch { - bool isDebuggerActive(); -} - -#ifdef CATCH_PLATFORM_MAC - - #if defined(__i386__) || defined(__x86_64__) - #define CATCH_TRAP() __asm__("int $3\n" : : ) /* NOLINT */ - #elif defined(__aarch64__) - #define CATCH_TRAP() __asm__(".inst 0xd43e0000") - #endif - -#elif defined(CATCH_PLATFORM_IPHONE) - - // use inline assembler - #if defined(__i386__) || defined(__x86_64__) - #define CATCH_TRAP() __asm__("int $3") - #elif defined(__aarch64__) - #define CATCH_TRAP() __asm__(".inst 0xd4200000") - #elif defined(__arm__) && !defined(__thumb__) - #define CATCH_TRAP() __asm__(".inst 0xe7f001f0") - #elif defined(__arm__) && defined(__thumb__) - #define CATCH_TRAP() __asm__(".inst 0xde01") - #endif - -#elif defined(CATCH_PLATFORM_LINUX) - // If we can use inline assembler, do it because this allows us to break - // directly at the location of the failing check instead of breaking inside - // raise() called from it, i.e. one stack frame below. - #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) - #define CATCH_TRAP() asm volatile ("int $3") /* NOLINT */ - #else // Fall back to the generic way. - #include - - #define CATCH_TRAP() raise(SIGTRAP) - #endif -#elif defined(_MSC_VER) - #define CATCH_TRAP() __debugbreak() -#elif defined(__MINGW32__) - extern "C" __declspec(dllimport) void __stdcall DebugBreak(); - #define CATCH_TRAP() DebugBreak() -#endif - -#ifndef CATCH_BREAK_INTO_DEBUGGER - #ifdef CATCH_TRAP - #define CATCH_BREAK_INTO_DEBUGGER() []{ if( Catch::isDebuggerActive() ) { CATCH_TRAP(); } }() - #else - #define CATCH_BREAK_INTO_DEBUGGER() []{}() - #endif -#endif - -#endif // CATCH_DEBUGGER_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_decomposer.cpp b/lib/Catch2/src/catch2/internal/catch_decomposer.cpp deleted file mode 100644 index 3f398fc..0000000 --- a/lib/Catch2/src/catch2/internal/catch_decomposer.cpp +++ /dev/null @@ -1,23 +0,0 @@ - -// 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 - -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/lib/Catch2/src/catch2/internal/catch_decomposer.hpp b/lib/Catch2/src/catch2/internal/catch_decomposer.hpp deleted file mode 100644 index 3448803..0000000 --- a/lib/Catch2/src/catch2/internal/catch_decomposer.hpp +++ /dev/null @@ -1,343 +0,0 @@ - -// 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 -#ifndef CATCH_DECOMPOSER_HPP_INCLUDED -#define CATCH_DECOMPOSER_HPP_INCLUDED - -#include -#include -#include -#include -#include - -#include -#include - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4389) // '==' : signed/unsigned mismatch -#pragma warning(disable:4018) // more "signed/unsigned mismatch" -#pragma warning(disable:4312) // Converting int to T* using reinterpret_cast (issue on x64 platform) -#pragma warning(disable:4180) // qualifier applied to function type has no meaning -#pragma warning(disable:4800) // Forcing result to true or false -#endif - -#ifdef __clang__ -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wsign-compare" -#elif defined __GNUC__ -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wsign-compare" -#endif - -namespace Catch { - - class ITransientExpression { - bool m_isBinaryExpression; - bool m_result; - - public: - auto isBinaryExpression() const -> bool { return m_isBinaryExpression; } - auto getResult() const -> bool { return m_result; } - virtual void streamReconstructedExpression( std::ostream &os ) const = 0; - - ITransientExpression( bool isBinaryExpression, bool result ) - : m_isBinaryExpression( isBinaryExpression ), - m_result( result ) - {} - - ITransientExpression() = default; - ITransientExpression(ITransientExpression const&) = default; - ITransientExpression& operator=(ITransientExpression const&) = default; - - // We don't actually need a virtual destructor, but many static analysers - // complain if it's not here :-( - virtual ~ITransientExpression(); // = default; - - friend std::ostream& operator<<(std::ostream& out, ITransientExpression const& expr) { - expr.streamReconstructedExpression(out); - return out; - } - }; - - void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs ); - - template - class BinaryExpr : public ITransientExpression { - LhsT m_lhs; - StringRef m_op; - RhsT m_rhs; - - void streamReconstructedExpression( std::ostream &os ) const override { - formatReconstructedExpression - ( os, Catch::Detail::stringify( m_lhs ), m_op, Catch::Detail::stringify( m_rhs ) ); - } - - public: - BinaryExpr( bool comparisonResult, LhsT lhs, StringRef op, RhsT rhs ) - : ITransientExpression{ true, comparisonResult }, - m_lhs( lhs ), - m_op( op ), - m_rhs( rhs ) - {} - - template - auto operator && ( T ) const -> BinaryExpr const { - static_assert(always_false::value, - "chained comparisons are not supported inside assertions, " - "wrap the expression inside parentheses, or decompose it"); - } - - template - auto operator || ( T ) const -> BinaryExpr const { - static_assert(always_false::value, - "chained comparisons are not supported inside assertions, " - "wrap the expression inside parentheses, or decompose it"); - } - - template - auto operator == ( T ) const -> BinaryExpr const { - static_assert(always_false::value, - "chained comparisons are not supported inside assertions, " - "wrap the expression inside parentheses, or decompose it"); - } - - template - auto operator != ( T ) const -> BinaryExpr const { - static_assert(always_false::value, - "chained comparisons are not supported inside assertions, " - "wrap the expression inside parentheses, or decompose it"); - } - - template - auto operator > ( T ) const -> BinaryExpr const { - static_assert(always_false::value, - "chained comparisons are not supported inside assertions, " - "wrap the expression inside parentheses, or decompose it"); - } - - template - auto operator < ( T ) const -> BinaryExpr const { - static_assert(always_false::value, - "chained comparisons are not supported inside assertions, " - "wrap the expression inside parentheses, or decompose it"); - } - - template - auto operator >= ( T ) const -> BinaryExpr const { - static_assert(always_false::value, - "chained comparisons are not supported inside assertions, " - "wrap the expression inside parentheses, or decompose it"); - } - - template - auto operator <= ( T ) const -> BinaryExpr const { - static_assert(always_false::value, - "chained comparisons are not supported inside assertions, " - "wrap the expression inside parentheses, or decompose it"); - } - }; - - template - class UnaryExpr : public ITransientExpression { - LhsT m_lhs; - - void streamReconstructedExpression( std::ostream &os ) const override { - os << Catch::Detail::stringify( m_lhs ); - } - - public: - explicit UnaryExpr( LhsT lhs ) - : ITransientExpression{ false, static_cast(lhs) }, - m_lhs( lhs ) - {} - }; - - - template - class ExprLhs { - LhsT m_lhs; - public: - explicit ExprLhs( LhsT lhs ) : m_lhs( lhs ) {} - -#define CATCH_INTERNAL_DEFINE_EXPRESSION_EQUALITY_OPERATOR( id, op ) \ - template < \ - typename RhsT, \ - std::enable_if_t< \ - Detail::is_##id##_comparable::value && \ - !std::is_arithmetic>::value, \ - int> = 0> \ - friend auto operator op( ExprLhs&& lhs, RhsT&& rhs ) \ - ->BinaryExpr { \ - return { \ - static_cast( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \ - } \ - template < \ - typename RhsT, \ - std::enable_if_t::value && \ - std::is_arithmetic::value, \ - int> = 0> \ - friend auto operator op( ExprLhs&& lhs, RhsT rhs ) \ - ->BinaryExpr { \ - return { \ - static_cast( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \ - } \ - template < \ - typename RhsT, \ - std::enable_if_t::value && \ - Detail::is_eq_0_comparable:: \ - value && /* We allow long because we want \ - `ptr op NULL to be accepted */ \ - ( std::is_same::value || \ - std::is_same::value ), \ - int> = 0> \ - friend auto operator op( ExprLhs&& lhs, RhsT rhs ) \ - ->BinaryExpr { \ - if ( rhs != 0 ) { \ - throw_test_failure_exception(); \ - } \ - return { \ - static_cast( lhs.m_lhs op 0 ), lhs.m_lhs, #op##_sr, rhs }; \ - } \ - template < \ - typename RhsT, \ - std::enable_if_t::value && \ - Detail::is_eq_0_comparable:: \ - value && /* We allow long because we want \ - `ptr op NULL` to be accepted */ \ - ( std::is_same::value || \ - std::is_same::value ), \ - int> = 0> \ - friend auto operator op( ExprLhs&& lhs, RhsT rhs ) \ - ->BinaryExpr { \ - if ( lhs.m_lhs != 0 ) { \ - throw_test_failure_exception(); \ - } \ - return { static_cast( 0 op rhs ), lhs.m_lhs, #op##_sr, rhs }; \ - } - CATCH_INTERNAL_DEFINE_EXPRESSION_EQUALITY_OPERATOR( eq, == ) - CATCH_INTERNAL_DEFINE_EXPRESSION_EQUALITY_OPERATOR( ne, != ) - - #undef CATCH_INTERNAL_DEFINE_EXPRESSION_EQUALITY_OPERATOR - - #define CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR( id, op ) \ - template < \ - typename RhsT, \ - std::enable_if_t< \ - Detail::is_##id##_comparable::value && \ - !std::is_arithmetic>::value, \ - int> = 0> \ - friend auto operator op( ExprLhs&& lhs, RhsT&& rhs ) \ - ->BinaryExpr { \ - return { \ - static_cast( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \ - } \ - template < \ - typename RhsT, \ - std::enable_if_t::value && \ - std::is_arithmetic::value, \ - int> = 0> \ - friend auto operator op( ExprLhs&& lhs, RhsT rhs ) \ - ->BinaryExpr { \ - return { \ - static_cast( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \ - } \ - template < \ - typename RhsT, \ - std::enable_if_t::value && \ - Detail::is_##id##_0_comparable::value && \ - std::is_same::value, \ - int> = 0> \ - friend auto operator op( ExprLhs&& lhs, RhsT rhs ) \ - ->BinaryExpr { \ - if ( rhs != 0 ) { \ - throw_test_failure_exception(); \ - } \ - return { \ - static_cast( lhs.m_lhs op 0 ), lhs.m_lhs, #op##_sr, rhs }; \ - } \ - template < \ - typename RhsT, \ - std::enable_if_t::value && \ - Detail::is_##id##_0_comparable::value && \ - std::is_same::value, \ - int> = 0> \ - friend auto operator op( ExprLhs&& lhs, RhsT rhs ) \ - ->BinaryExpr { \ - if ( lhs.m_lhs != 0 ) { \ - throw_test_failure_exception(); \ - } \ - return { static_cast( 0 op rhs ), lhs.m_lhs, #op##_sr, rhs }; \ - } - - CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR( lt, < ) - CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR( le, <= ) - CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR( gt, > ) - CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR( ge, >= ) - - #undef CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR - - - #define CATCH_INTERNAL_DEFINE_EXPRESSION_OPERATOR(op) \ - template>::value, int> = 0> \ - friend auto operator op ( ExprLhs && lhs, RhsT && rhs ) -> BinaryExpr { \ - return { static_cast(lhs.m_lhs op rhs), lhs.m_lhs, #op##_sr, rhs }; \ - } \ - template::value, int> = 0> \ - friend auto operator op ( ExprLhs && lhs, RhsT rhs ) -> BinaryExpr { \ - return { static_cast(lhs.m_lhs op rhs), lhs.m_lhs, #op##_sr, rhs }; \ - } - - CATCH_INTERNAL_DEFINE_EXPRESSION_OPERATOR(|) - CATCH_INTERNAL_DEFINE_EXPRESSION_OPERATOR(&) - CATCH_INTERNAL_DEFINE_EXPRESSION_OPERATOR(^) - - #undef CATCH_INTERNAL_DEFINE_EXPRESSION_OPERATOR - - template - friend auto operator && ( ExprLhs &&, RhsT && ) -> BinaryExpr { - static_assert(always_false::value, - "operator&& is not supported inside assertions, " - "wrap the expression inside parentheses, or decompose it"); - } - - template - friend auto operator || ( ExprLhs &&, RhsT && ) -> BinaryExpr { - static_assert(always_false::value, - "operator|| is not supported inside assertions, " - "wrap the expression inside parentheses, or decompose it"); - } - - auto makeUnaryExpr() const -> UnaryExpr { - return UnaryExpr{ m_lhs }; - } - }; - - struct Decomposer { - template>::value, int> = 0> - friend auto operator <= ( Decomposer &&, T && lhs ) -> ExprLhs { - return ExprLhs{ lhs }; - } - - template::value, int> = 0> - friend auto operator <= ( Decomposer &&, T value ) -> ExprLhs { - return ExprLhs{ value }; - } - }; - -} // end namespace Catch - -#ifdef _MSC_VER -#pragma warning(pop) -#endif -#ifdef __clang__ -# pragma clang diagnostic pop -#elif defined __GNUC__ -# pragma GCC diagnostic pop -#endif - -#endif // CATCH_DECOMPOSER_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_enforce.cpp b/lib/Catch2/src/catch2/internal/catch_enforce.cpp deleted file mode 100644 index 3f69640..0000000 --- a/lib/Catch2/src/catch2/internal/catch_enforce.cpp +++ /dev/null @@ -1,41 +0,0 @@ - -// 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 -#include - -#include - - -namespace Catch { -#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER) - [[noreturn]] - void throw_exception(std::exception const& e) { - Catch::cerr() << "Catch will terminate because it needed to throw an exception.\n" - << "The message was: " << e.what() << '\n'; - std::terminate(); - } -#endif - - [[noreturn]] - void throw_logic_error(std::string const& msg) { - throw_exception(std::logic_error(msg)); - } - - [[noreturn]] - void throw_domain_error(std::string const& msg) { - throw_exception(std::domain_error(msg)); - } - - [[noreturn]] - void throw_runtime_error(std::string const& msg) { - throw_exception(std::runtime_error(msg)); - } - - - -} // namespace Catch; diff --git a/lib/Catch2/src/catch2/internal/catch_enforce.hpp b/lib/Catch2/src/catch2/internal/catch_enforce.hpp deleted file mode 100644 index 076cea3..0000000 --- a/lib/Catch2/src/catch2/internal/catch_enforce.hpp +++ /dev/null @@ -1,54 +0,0 @@ - -// 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 -#ifndef CATCH_ENFORCE_HPP_INCLUDED -#define CATCH_ENFORCE_HPP_INCLUDED - -#include -#include -#include - -#include - -namespace Catch { -#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) - template - [[noreturn]] - void throw_exception(Ex const& e) { - throw e; - } -#else // ^^ Exceptions are enabled // Exceptions are disabled vv - [[noreturn]] - void throw_exception(std::exception const& e); -#endif - - [[noreturn]] - void throw_logic_error(std::string const& msg); - [[noreturn]] - void throw_domain_error(std::string const& msg); - [[noreturn]] - void throw_runtime_error(std::string const& msg); - -} // namespace Catch; - -#define CATCH_MAKE_MSG(...) \ - (Catch::ReusableStringStream() << __VA_ARGS__).str() - -#define CATCH_INTERNAL_ERROR(...) \ - Catch::throw_logic_error(CATCH_MAKE_MSG( CATCH_INTERNAL_LINEINFO << ": Internal Catch2 error: " << __VA_ARGS__)) - -#define CATCH_ERROR(...) \ - Catch::throw_domain_error(CATCH_MAKE_MSG( __VA_ARGS__ )) - -#define CATCH_RUNTIME_ERROR(...) \ - Catch::throw_runtime_error(CATCH_MAKE_MSG( __VA_ARGS__ )) - -#define CATCH_ENFORCE( condition, ... ) \ - do{ if( !(condition) ) CATCH_ERROR( __VA_ARGS__ ); } while(false) - - -#endif // CATCH_ENFORCE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_enum_values_registry.cpp b/lib/Catch2/src/catch2/internal/catch_enum_values_registry.cpp deleted file mode 100644 index 7e8bf5e..0000000 --- a/lib/Catch2/src/catch2/internal/catch_enum_values_registry.cpp +++ /dev/null @@ -1,73 +0,0 @@ - -// 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 -#include - -#include - -namespace Catch { - - IMutableEnumValuesRegistry::~IMutableEnumValuesRegistry() = default; - - namespace Detail { - - namespace { - // Extracts the actual name part of an enum instance - // In other words, it returns the Blue part of Bikeshed::Colour::Blue - StringRef extractInstanceName(StringRef enumInstance) { - // Find last occurrence of ":" - size_t name_start = enumInstance.size(); - while (name_start > 0 && enumInstance[name_start - 1] != ':') { - --name_start; - } - return enumInstance.substr(name_start, enumInstance.size() - name_start); - } - } - - std::vector parseEnums( StringRef enums ) { - auto enumValues = splitStringRef( enums, ',' ); - std::vector parsed; - parsed.reserve( enumValues.size() ); - for( auto const& enumValue : enumValues ) { - parsed.push_back(trim(extractInstanceName(enumValue))); - } - return parsed; - } - - EnumInfo::~EnumInfo() {} - - StringRef EnumInfo::lookup( int value ) const { - for( auto const& valueToName : m_values ) { - if( valueToName.first == value ) - return valueToName.second; - } - return "{** unexpected enum value **}"_sr; - } - - Catch::Detail::unique_ptr makeEnumInfo( StringRef enumName, StringRef allValueNames, std::vector const& values ) { - auto enumInfo = Catch::Detail::make_unique(); - enumInfo->m_name = enumName; - enumInfo->m_values.reserve( values.size() ); - - const auto valueNames = Catch::Detail::parseEnums( allValueNames ); - assert( valueNames.size() == values.size() ); - std::size_t i = 0; - for( auto value : values ) - enumInfo->m_values.emplace_back(value, valueNames[i++]); - - return enumInfo; - } - - EnumInfo const& EnumValuesRegistry::registerEnum( StringRef enumName, StringRef allValueNames, std::vector const& values ) { - m_enumInfos.push_back(makeEnumInfo(enumName, allValueNames, values)); - return *m_enumInfos.back(); - } - - } // Detail -} // Catch - diff --git a/lib/Catch2/src/catch2/internal/catch_enum_values_registry.hpp b/lib/Catch2/src/catch2/internal/catch_enum_values_registry.hpp deleted file mode 100644 index 999059a..0000000 --- a/lib/Catch2/src/catch2/internal/catch_enum_values_registry.hpp +++ /dev/null @@ -1,36 +0,0 @@ - -// 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 -#ifndef CATCH_ENUM_VALUES_REGISTRY_HPP_INCLUDED -#define CATCH_ENUM_VALUES_REGISTRY_HPP_INCLUDED - -#include -#include -#include - -#include - -namespace Catch { - - namespace Detail { - - Catch::Detail::unique_ptr makeEnumInfo( StringRef enumName, StringRef allValueNames, std::vector const& values ); - - class EnumValuesRegistry : public IMutableEnumValuesRegistry { - - std::vector> m_enumInfos; - - EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::vector const& values) override; - }; - - std::vector parseEnums( StringRef enums ); - - } // Detail - -} // Catch - -#endif // CATCH_ENUM_VALUES_REGISTRY_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_errno_guard.cpp b/lib/Catch2/src/catch2/internal/catch_errno_guard.cpp deleted file mode 100644 index 3bbf8b4..0000000 --- a/lib/Catch2/src/catch2/internal/catch_errno_guard.cpp +++ /dev/null @@ -1,16 +0,0 @@ - -// 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 - -#include - -namespace Catch { - ErrnoGuard::ErrnoGuard():m_oldErrno(errno){} - ErrnoGuard::~ErrnoGuard() { errno = m_oldErrno; } -} diff --git a/lib/Catch2/src/catch2/internal/catch_errno_guard.hpp b/lib/Catch2/src/catch2/internal/catch_errno_guard.hpp deleted file mode 100644 index df1237d..0000000 --- a/lib/Catch2/src/catch2/internal/catch_errno_guard.hpp +++ /dev/null @@ -1,27 +0,0 @@ - -// 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 -#ifndef CATCH_ERRNO_GUARD_HPP_INCLUDED -#define CATCH_ERRNO_GUARD_HPP_INCLUDED - -namespace Catch { - - //! Simple RAII class that stores the value of `errno` - //! at construction and restores it at destruction. - class ErrnoGuard { - public: - // Keep these outlined to avoid dragging in macros from - - ErrnoGuard(); - ~ErrnoGuard(); - private: - int m_oldErrno; - }; - -} - -#endif // CATCH_ERRNO_GUARD_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_exception_translator_registry.cpp b/lib/Catch2/src/catch2/internal/catch_exception_translator_registry.cpp deleted file mode 100644 index 2a240a9..0000000 --- a/lib/Catch2/src/catch2/internal/catch_exception_translator_registry.cpp +++ /dev/null @@ -1,80 +0,0 @@ - -// 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 -#include -#include -#include -#include - -namespace Catch { - - ExceptionTranslatorRegistry::~ExceptionTranslatorRegistry() { - } - - void ExceptionTranslatorRegistry::registerTranslator( Detail::unique_ptr&& translator ) { - m_translators.push_back( CATCH_MOVE( translator ) ); - } - -#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) - std::string ExceptionTranslatorRegistry::translateActiveException() const { - // Compiling a mixed mode project with MSVC means that CLR - // exceptions will be caught in (...) as well. However, these do - // do not fill-in std::current_exception and thus lead to crash - // when attempting rethrow. - // /EHa switch also causes structured exceptions to be caught - // here, but they fill-in current_exception properly, so - // at worst the output should be a little weird, instead of - // causing a crash. - if ( std::current_exception() == nullptr ) { - return "Non C++ exception. Possibly a CLR exception."; - } - - // First we try user-registered translators. If none of them can - // handle the exception, it will be rethrown handled by our defaults. - try { - return tryTranslators(); - } - // To avoid having to handle TFE explicitly everywhere, we just - // rethrow it so that it goes back up the caller. - catch( TestFailureException& ) { - std::rethrow_exception(std::current_exception()); - } - catch( std::exception const& ex ) { - return ex.what(); - } - catch( std::string const& msg ) { - return msg; - } - catch( const char* msg ) { - return msg; - } - catch(...) { - return "Unknown exception"; - } - } - - std::string ExceptionTranslatorRegistry::tryTranslators() const { - if (m_translators.empty()) { - std::rethrow_exception(std::current_exception()); - } else { - return m_translators[0]->translate(m_translators.begin() + 1, m_translators.end()); - } - } - -#else // ^^ Exceptions are enabled // Exceptions are disabled vv - std::string ExceptionTranslatorRegistry::translateActiveException() const { - CATCH_INTERNAL_ERROR("Attempted to translate active exception under CATCH_CONFIG_DISABLE_EXCEPTIONS!"); - } - - std::string ExceptionTranslatorRegistry::tryTranslators() const { - CATCH_INTERNAL_ERROR("Attempted to use exception translators under CATCH_CONFIG_DISABLE_EXCEPTIONS!"); - } -#endif - - -} diff --git a/lib/Catch2/src/catch2/internal/catch_exception_translator_registry.hpp b/lib/Catch2/src/catch2/internal/catch_exception_translator_registry.hpp deleted file mode 100644 index 2aafa68..0000000 --- a/lib/Catch2/src/catch2/internal/catch_exception_translator_registry.hpp +++ /dev/null @@ -1,31 +0,0 @@ - -// 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 -#ifndef CATCH_EXCEPTION_TRANSLATOR_REGISTRY_HPP_INCLUDED -#define CATCH_EXCEPTION_TRANSLATOR_REGISTRY_HPP_INCLUDED - -#include -#include - -#include -#include - -namespace Catch { - - class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry { - public: - ~ExceptionTranslatorRegistry() override; - void registerTranslator( Detail::unique_ptr&& translator ); - std::string translateActiveException() const override; - std::string tryTranslators() const; - - private: - ExceptionTranslators m_translators; - }; -} - -#endif // CATCH_EXCEPTION_TRANSLATOR_REGISTRY_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_fatal_condition_handler.cpp b/lib/Catch2/src/catch2/internal/catch_fatal_condition_handler.cpp deleted file mode 100644 index f9702b1..0000000 --- a/lib/Catch2/src/catch2/internal/catch_fatal_condition_handler.cpp +++ /dev/null @@ -1,243 +0,0 @@ - -// 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 - * This file provides platform specific implementations of FatalConditionHandler - * - * This means that there is a lot of conditional compilation, and platform - * specific code. Currently, Catch2 supports a dummy handler (if no - * handler is desired), and 2 platform specific handlers: - * * Windows' SEH - * * POSIX signals - * - * Consequently, various pieces of code below are compiled if either of - * the platform specific handlers is enabled, or if none of them are - * enabled. It is assumed that both cannot be enabled at the same time, - * and doing so should cause a compilation error. - * - * If another platform specific handler is added, the compile guards - * below will need to be updated taking these assumptions into account. - */ - -#include - -#include -#include -#include -#include -#include - -#include - -#if !defined( CATCH_CONFIG_WINDOWS_SEH ) && !defined( CATCH_CONFIG_POSIX_SIGNALS ) - -namespace Catch { - - // If neither SEH nor signal handling is required, the handler impls - // do not have to do anything, and can be empty. - void FatalConditionHandler::engage_platform() {} - void FatalConditionHandler::disengage_platform() noexcept {} - FatalConditionHandler::FatalConditionHandler() = default; - FatalConditionHandler::~FatalConditionHandler() = default; - -} // end namespace Catch - -#endif // !CATCH_CONFIG_WINDOWS_SEH && !CATCH_CONFIG_POSIX_SIGNALS - -#if defined( CATCH_CONFIG_WINDOWS_SEH ) && defined( CATCH_CONFIG_POSIX_SIGNALS ) -#error "Inconsistent configuration: Windows' SEH handling and POSIX signals cannot be enabled at the same time" -#endif // CATCH_CONFIG_WINDOWS_SEH && CATCH_CONFIG_POSIX_SIGNALS - -#if defined( CATCH_CONFIG_WINDOWS_SEH ) || defined( CATCH_CONFIG_POSIX_SIGNALS ) - -namespace { - //! Signals fatal error message to the run context - void reportFatal( char const * const message ) { - Catch::getCurrentContext().getResultCapture()->handleFatalErrorCondition( message ); - } - - //! Minimal size Catch2 needs for its own fatal error handling. - //! Picked empirically, so it might not be sufficient on all - //! platforms, and for all configurations. - constexpr std::size_t minStackSizeForErrors = 32 * 1024; -} // end unnamed namespace - -#endif // CATCH_CONFIG_WINDOWS_SEH || CATCH_CONFIG_POSIX_SIGNALS - -#if defined( CATCH_CONFIG_WINDOWS_SEH ) - -namespace Catch { - - struct SignalDefs { DWORD id; const char* name; }; - - // There is no 1-1 mapping between signals and windows exceptions. - // Windows can easily distinguish between SO and SigSegV, - // but SigInt, SigTerm, etc are handled differently. - static SignalDefs signalDefs[] = { - { EXCEPTION_ILLEGAL_INSTRUCTION, "SIGILL - Illegal instruction signal" }, - { EXCEPTION_STACK_OVERFLOW, "SIGSEGV - Stack overflow" }, - { EXCEPTION_ACCESS_VIOLATION, "SIGSEGV - Segmentation violation signal" }, - { EXCEPTION_INT_DIVIDE_BY_ZERO, "Divide by zero error" }, - }; - - static LONG CALLBACK topLevelExceptionFilter(PEXCEPTION_POINTERS ExceptionInfo) { - for (auto const& def : signalDefs) { - if (ExceptionInfo->ExceptionRecord->ExceptionCode == def.id) { - reportFatal(def.name); - } - } - // If its not an exception we care about, pass it along. - // This stops us from eating debugger breaks etc. - return EXCEPTION_CONTINUE_SEARCH; - } - - // Since we do not support multiple instantiations, we put these - // into global variables and rely on cleaning them up in outlined - // constructors/destructors - static LPTOP_LEVEL_EXCEPTION_FILTER previousTopLevelExceptionFilter = nullptr; - - - // For MSVC, we reserve part of the stack memory for handling - // memory overflow structured exception. - FatalConditionHandler::FatalConditionHandler() { - ULONG guaranteeSize = static_cast(minStackSizeForErrors); - if (!SetThreadStackGuarantee(&guaranteeSize)) { - // We do not want to fully error out, because needing - // the stack reserve should be rare enough anyway. - Catch::cerr() - << "Failed to reserve piece of stack." - << " Stack overflows will not be reported successfully."; - } - } - - // We do not attempt to unset the stack guarantee, because - // Windows does not support lowering the stack size guarantee. - FatalConditionHandler::~FatalConditionHandler() = default; - - - void FatalConditionHandler::engage_platform() { - // Register as a the top level exception filter. - previousTopLevelExceptionFilter = SetUnhandledExceptionFilter(topLevelExceptionFilter); - } - - void FatalConditionHandler::disengage_platform() noexcept { - if (SetUnhandledExceptionFilter(previousTopLevelExceptionFilter) != topLevelExceptionFilter) { - Catch::cerr() - << "Unexpected SEH unhandled exception filter on disengage." - << " The filter was restored, but might be rolled back unexpectedly."; - } - previousTopLevelExceptionFilter = nullptr; - } - -} // end namespace Catch - -#endif // CATCH_CONFIG_WINDOWS_SEH - -#if defined( CATCH_CONFIG_POSIX_SIGNALS ) - -#include - -namespace Catch { - - struct SignalDefs { - int id; - const char* name; - }; - - static SignalDefs signalDefs[] = { - { SIGINT, "SIGINT - Terminal interrupt signal" }, - { SIGILL, "SIGILL - Illegal instruction signal" }, - { SIGFPE, "SIGFPE - Floating point error signal" }, - { SIGSEGV, "SIGSEGV - Segmentation violation signal" }, - { SIGTERM, "SIGTERM - Termination request signal" }, - { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" } - }; - -// Older GCCs trigger -Wmissing-field-initializers for T foo = {} -// which is zero initialization, but not explicit. We want to avoid -// that. -#if defined(__GNUC__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wmissing-field-initializers" -#endif - - static char* altStackMem = nullptr; - static std::size_t altStackSize = 0; - static stack_t oldSigStack{}; - static struct sigaction oldSigActions[sizeof(signalDefs) / sizeof(SignalDefs)]{}; - - static void restorePreviousSignalHandlers() noexcept { - // We set signal handlers back to the previous ones. Hopefully - // nobody overwrote them in the meantime, and doesn't expect - // their signal handlers to live past ours given that they - // installed them after ours.. - for (std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { - sigaction(signalDefs[i].id, &oldSigActions[i], nullptr); - } - // Return the old stack - sigaltstack(&oldSigStack, nullptr); - } - - static void handleSignal( int sig ) { - char const * name = ""; - for (auto const& def : signalDefs) { - if (sig == def.id) { - name = def.name; - break; - } - } - // We need to restore previous signal handlers and let them do - // their thing, so that the users can have the debugger break - // when a signal is raised, and so on. - restorePreviousSignalHandlers(); - reportFatal( name ); - raise( sig ); - } - - FatalConditionHandler::FatalConditionHandler() { - assert(!altStackMem && "Cannot initialize POSIX signal handler when one already exists"); - if (altStackSize == 0) { - altStackSize = std::max(static_cast(SIGSTKSZ), minStackSizeForErrors); - } - altStackMem = new char[altStackSize](); - } - - FatalConditionHandler::~FatalConditionHandler() { - delete[] altStackMem; - // We signal that another instance can be constructed by zeroing - // out the pointer. - altStackMem = nullptr; - } - - void FatalConditionHandler::engage_platform() { - stack_t sigStack; - sigStack.ss_sp = altStackMem; - sigStack.ss_size = altStackSize; - sigStack.ss_flags = 0; - sigaltstack(&sigStack, &oldSigStack); - struct sigaction sa = { }; - - sa.sa_handler = handleSignal; - sa.sa_flags = SA_ONSTACK; - for (std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i) { - sigaction(signalDefs[i].id, &sa, &oldSigActions[i]); - } - } - -#if defined(__GNUC__) -# pragma GCC diagnostic pop -#endif - - - void FatalConditionHandler::disengage_platform() noexcept { - restorePreviousSignalHandlers(); - } - -} // end namespace Catch - -#endif // CATCH_CONFIG_POSIX_SIGNALS diff --git a/lib/Catch2/src/catch2/internal/catch_fatal_condition_handler.hpp b/lib/Catch2/src/catch2/internal/catch_fatal_condition_handler.hpp deleted file mode 100644 index ce07f9b..0000000 --- a/lib/Catch2/src/catch2/internal/catch_fatal_condition_handler.hpp +++ /dev/null @@ -1,69 +0,0 @@ - -// 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 -#ifndef CATCH_FATAL_CONDITION_HANDLER_HPP_INCLUDED -#define CATCH_FATAL_CONDITION_HANDLER_HPP_INCLUDED - -#include -#include - -#include - -namespace Catch { - - /** - * Wrapper for platform-specific fatal error (signals/SEH) handlers - * - * Tries to be cooperative with other handlers, and not step over - * other handlers. This means that unknown structured exceptions - * are passed on, previous signal handlers are called, and so on. - * - * Can only be instantiated once, and assumes that once a signal - * is caught, the binary will end up terminating. Thus, there - */ - class FatalConditionHandler { - bool m_started = false; - - // Install/disengage implementation for specific platform. - // Should be if-defed to work on current platform, can assume - // engage-disengage 1:1 pairing. - void engage_platform(); - void disengage_platform() noexcept; - public: - // Should also have platform-specific implementations as needed - FatalConditionHandler(); - ~FatalConditionHandler(); - - void engage() { - assert(!m_started && "Handler cannot be installed twice."); - m_started = true; - engage_platform(); - } - - void disengage() noexcept { - assert(m_started && "Handler cannot be uninstalled without being installed first"); - m_started = false; - disengage_platform(); - } - }; - - //! Simple RAII guard for (dis)engaging the FatalConditionHandler - class FatalConditionHandlerGuard { - FatalConditionHandler* m_handler; - public: - FatalConditionHandlerGuard(FatalConditionHandler* handler): - m_handler(handler) { - m_handler->engage(); - } - ~FatalConditionHandlerGuard() { - m_handler->disengage(); - } - }; - -} // end namespace Catch - -#endif // CATCH_FATAL_CONDITION_HANDLER_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_floating_point_helpers.cpp b/lib/Catch2/src/catch2/internal/catch_floating_point_helpers.cpp deleted file mode 100644 index e30ee43..0000000 --- a/lib/Catch2/src/catch2/internal/catch_floating_point_helpers.cpp +++ /dev/null @@ -1,32 +0,0 @@ - -// 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 - -#include - -namespace Catch { - namespace Detail { - - uint32_t convertToBits(float f) { - static_assert(sizeof(float) == sizeof(uint32_t), "Important ULP matcher assumption violated"); - uint32_t i; - std::memcpy(&i, &f, sizeof(f)); - return i; - } - - uint64_t convertToBits(double d) { - static_assert(sizeof(double) == sizeof(uint64_t), "Important ULP matcher assumption violated"); - uint64_t i; - std::memcpy(&i, &d, sizeof(d)); - return i; - } - - } // end namespace Detail -} // end namespace Catch - diff --git a/lib/Catch2/src/catch2/internal/catch_floating_point_helpers.hpp b/lib/Catch2/src/catch2/internal/catch_floating_point_helpers.hpp deleted file mode 100644 index ca883c6..0000000 --- a/lib/Catch2/src/catch2/internal/catch_floating_point_helpers.hpp +++ /dev/null @@ -1,103 +0,0 @@ - -// 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 -#ifndef CATCH_FLOATING_POINT_HELPERS_HPP_INCLUDED -#define CATCH_FLOATING_POINT_HELPERS_HPP_INCLUDED - -#include - -#include -#include -#include -#include -#include - -namespace Catch { - namespace Detail { - - uint32_t convertToBits(float f); - uint64_t convertToBits(double d); - - } // end namespace Detail - - - -#if defined( __GNUC__ ) || defined( __clang__ ) -# pragma GCC diagnostic push - // We do a bunch of direct compensations of floating point numbers, - // because we know what we are doing and actually do want the direct - // comparison behaviour. -# pragma GCC diagnostic ignored "-Wfloat-equal" -#endif - - /** - * Calculates the ULP distance between two floating point numbers - * - * The ULP distance of two floating point numbers is the count of - * valid floating point numbers representable between them. - * - * There are some exceptions between how this function counts the - * distance, and the interpretation of the standard as implemented. - * by e.g. `nextafter`. For this function it always holds that: - * * `(x == y) => ulpDistance(x, y) == 0` (so `ulpDistance(-0, 0) == 0`) - * * `ulpDistance(maxFinite, INF) == 1` - * * `ulpDistance(x, -x) == 2 * ulpDistance(x, 0)` - * - * \pre `!isnan( lhs )` - * \pre `!isnan( rhs )` - * \pre floating point numbers are represented in IEEE-754 format - */ - template - uint64_t ulpDistance( FP lhs, FP rhs ) { - assert( std::numeric_limits::is_iec559 && - "ulpDistance assumes IEEE-754 format for floating point types" ); - assert( !Catch::isnan( lhs ) && - "Distance between NaN and number is not meaningful" ); - assert( !Catch::isnan( rhs ) && - "Distance between NaN and number is not meaningful" ); - - // We want X == Y to imply 0 ULP distance even if X and Y aren't - // bit-equal (-0 and 0), or X - Y != 0 (same sign infinities). - if ( lhs == rhs ) { return 0; } - - // We need a properly typed positive zero for type inference. - static constexpr FP positive_zero{}; - - // We want to ensure that +/- 0 is always represented as positive zero - if ( lhs == positive_zero ) { lhs = positive_zero; } - if ( rhs == positive_zero ) { rhs = positive_zero; } - - // If arguments have different signs, we can handle them by summing - // how far are they from 0 each. - if ( std::signbit( lhs ) != std::signbit( rhs ) ) { - return ulpDistance( std::abs( lhs ), positive_zero ) + - ulpDistance( std::abs( rhs ), positive_zero ); - } - - // When both lhs and rhs are of the same sign, we can just - // read the numbers bitwise as integers, and then subtract them - // (assuming IEEE). - uint64_t lc = Detail::convertToBits( lhs ); - uint64_t rc = Detail::convertToBits( rhs ); - - // The ulp distance between two numbers is symmetric, so to avoid - // dealing with overflows we want the bigger converted number on the lhs - if ( lc < rc ) { - std::swap( lc, rc ); - } - - return lc - rc; - } - -#if defined( __GNUC__ ) || defined( __clang__ ) -# pragma GCC diagnostic pop -#endif - - -} // end namespace Catch - -#endif // CATCH_FLOATING_POINT_HELPERS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_getenv.cpp b/lib/Catch2/src/catch2/internal/catch_getenv.cpp deleted file mode 100644 index a9a592c..0000000 --- a/lib/Catch2/src/catch2/internal/catch_getenv.cpp +++ /dev/null @@ -1,37 +0,0 @@ - -// 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 - -#include -#include - -#include - -namespace Catch { - namespace Detail { - -#if !defined (CATCH_CONFIG_GETENV) - char const* getEnv( char const* ) { return nullptr; } -#else - - char const* getEnv( char const* varName ) { -# if defined( _MSC_VER ) -# pragma warning( push ) -# pragma warning( disable : 4996 ) // use getenv_s instead of getenv -# endif - - return std::getenv( varName ); - -# if defined( _MSC_VER ) -# pragma warning( pop ) -# endif - } -#endif -} // namespace Detail -} // namespace Catch diff --git a/lib/Catch2/src/catch2/internal/catch_getenv.hpp b/lib/Catch2/src/catch2/internal/catch_getenv.hpp deleted file mode 100644 index 31ef797..0000000 --- a/lib/Catch2/src/catch2/internal/catch_getenv.hpp +++ /dev/null @@ -1,20 +0,0 @@ - -// 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 -#ifndef CATCH_GETENV_HPP_INCLUDED -#define CATCH_GETENV_HPP_INCLUDED - -namespace Catch { -namespace Detail { - - //! Wrapper over `std::getenv` that compiles on UWP (and always returns nullptr there) - char const* getEnv(char const* varName); - -} -} - -#endif // CATCH_GETENV_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_istream.cpp b/lib/Catch2/src/catch2/internal/catch_istream.cpp deleted file mode 100644 index 489396e..0000000 --- a/lib/Catch2/src/catch2/internal/catch_istream.cpp +++ /dev/null @@ -1,159 +0,0 @@ - -// 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 -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace Catch { - - Catch::IStream::~IStream() = default; - -namespace Detail { - namespace { - template - class StreamBufImpl : public std::streambuf { - char data[bufferSize]; - WriterF m_writer; - - public: - StreamBufImpl() { - setp( data, data + sizeof(data) ); - } - - ~StreamBufImpl() noexcept override { - StreamBufImpl::sync(); - } - - private: - int overflow( int c ) override { - sync(); - - if( c != EOF ) { - if( pbase() == epptr() ) - m_writer( std::string( 1, static_cast( c ) ) ); - else - sputc( static_cast( c ) ); - } - return 0; - } - - int sync() override { - if( pbase() != pptr() ) { - m_writer( std::string( pbase(), static_cast( pptr() - pbase() ) ) ); - setp( pbase(), epptr() ); - } - return 0; - } - }; - - /////////////////////////////////////////////////////////////////////////// - - struct OutputDebugWriter { - - void operator()( std::string const& str ) { - if ( !str.empty() ) { - writeToDebugConsole( str ); - } - } - }; - - /////////////////////////////////////////////////////////////////////////// - - class FileStream : public IStream { - std::ofstream m_ofs; - public: - FileStream( std::string const& filename ) { - m_ofs.open( filename.c_str() ); - CATCH_ENFORCE( !m_ofs.fail(), "Unable to open file: '" << filename << '\'' ); - m_ofs << std::unitbuf; - } - ~FileStream() override = default; - public: // IStream - std::ostream& stream() override { - return m_ofs; - } - }; - - /////////////////////////////////////////////////////////////////////////// - - class CoutStream : public IStream { - std::ostream m_os; - public: - // Store the streambuf from cout up-front because - // cout may get redirected when running tests - CoutStream() : m_os( Catch::cout().rdbuf() ) {} - ~CoutStream() override = default; - - public: // IStream - std::ostream& stream() override { return m_os; } - bool isConsole() const override { return true; } - }; - - class CerrStream : public IStream { - std::ostream m_os; - - public: - // Store the streambuf from cerr up-front because - // cout may get redirected when running tests - CerrStream(): m_os( Catch::cerr().rdbuf() ) {} - ~CerrStream() override = default; - - public: // IStream - std::ostream& stream() override { return m_os; } - bool isConsole() const override { return true; } - }; - - /////////////////////////////////////////////////////////////////////////// - - class DebugOutStream : public IStream { - Detail::unique_ptr> m_streamBuf; - std::ostream m_os; - public: - DebugOutStream() - : m_streamBuf( Detail::make_unique>() ), - m_os( m_streamBuf.get() ) - {} - - ~DebugOutStream() override = default; - - public: // IStream - std::ostream& stream() override { return m_os; } - }; - - } // unnamed namespace -} // namespace Detail - - /////////////////////////////////////////////////////////////////////////// - - auto makeStream( std::string const& filename ) -> Detail::unique_ptr { - if ( filename.empty() || filename == "-" ) { - return Detail::make_unique(); - } - if( filename[0] == '%' ) { - if ( filename == "%debug" ) { - return Detail::make_unique(); - } else if ( filename == "%stderr" ) { - return Detail::make_unique(); - } else if ( filename == "%stdout" ) { - return Detail::make_unique(); - } else { - CATCH_ERROR( "Unrecognised stream: '" << filename << '\'' ); - } - } - return Detail::make_unique( filename ); - } - -} diff --git a/lib/Catch2/src/catch2/internal/catch_istream.hpp b/lib/Catch2/src/catch2/internal/catch_istream.hpp deleted file mode 100644 index e6b9a2d..0000000 --- a/lib/Catch2/src/catch2/internal/catch_istream.hpp +++ /dev/null @@ -1,54 +0,0 @@ - -// 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 -#ifndef CATCH_ISTREAM_HPP_INCLUDED -#define CATCH_ISTREAM_HPP_INCLUDED - -#include -#include - -#include -#include -#include -#include - -namespace Catch { - - class IStream { - public: - virtual ~IStream(); // = default - virtual std::ostream& stream() = 0; - /** - * Best guess on whether the instance is writing to a console (e.g. via stdout/stderr) - * - * This is useful for e.g. Win32 colour support, because the Win32 - * API manipulates console directly, unlike POSIX escape codes, - * that can be written anywhere. - * - * Due to variety of ways to change where the stdout/stderr is - * _actually_ being written, users should always assume that - * the answer might be wrong. - */ - virtual bool isConsole() const { return false; } - }; - - /** - * Creates a stream wrapper that writes to specific file. - * - * Also recognizes 4 special filenames - * * `-` for stdout - * * `%stdout` for stdout - * * `%stderr` for stderr - * * `%debug` for platform specific debugging output - * - * \throws if passed an unrecognized %-prefixed stream - */ - auto makeStream( std::string const& filename ) -> Detail::unique_ptr; - -} - -#endif // CATCH_STREAM_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_lazy_expr.cpp b/lib/Catch2/src/catch2/internal/catch_lazy_expr.cpp deleted file mode 100644 index 56a5ae5..0000000 --- a/lib/Catch2/src/catch2/internal/catch_lazy_expr.cpp +++ /dev/null @@ -1,29 +0,0 @@ - -// 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 -#include - -namespace Catch { - - auto operator << (std::ostream& os, LazyExpression const& lazyExpr) -> std::ostream& { - if (lazyExpr.m_isNegated) - os << '!'; - - if (lazyExpr) { - if (lazyExpr.m_isNegated && lazyExpr.m_transientExpression->isBinaryExpression()) - os << '(' << *lazyExpr.m_transientExpression << ')'; - else - os << *lazyExpr.m_transientExpression; - } else { - os << "{** error - unchecked empty expression requested **}"; - } - return os; - } - -} // namespace Catch diff --git a/lib/Catch2/src/catch2/internal/catch_lazy_expr.hpp b/lib/Catch2/src/catch2/internal/catch_lazy_expr.hpp deleted file mode 100644 index 36e0ac5..0000000 --- a/lib/Catch2/src/catch2/internal/catch_lazy_expr.hpp +++ /dev/null @@ -1,40 +0,0 @@ - -// 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 -#ifndef CATCH_LAZY_EXPR_HPP_INCLUDED -#define CATCH_LAZY_EXPR_HPP_INCLUDED - -#include - -namespace Catch { - - class ITransientExpression; - - class LazyExpression { - friend class AssertionHandler; - friend struct AssertionStats; - friend class RunContext; - - ITransientExpression const* m_transientExpression = nullptr; - bool m_isNegated; - public: - LazyExpression( bool isNegated ): - m_isNegated(isNegated) - {} - LazyExpression(LazyExpression const& other) = default; - LazyExpression& operator = ( LazyExpression const& ) = delete; - - explicit operator bool() const { - return m_transientExpression != nullptr; - } - - friend auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream&; - }; - -} // namespace Catch - -#endif // CATCH_LAZY_EXPR_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_leak_detector.cpp b/lib/Catch2/src/catch2/internal/catch_leak_detector.cpp deleted file mode 100644 index 7389eaf..0000000 --- a/lib/Catch2/src/catch2/internal/catch_leak_detector.cpp +++ /dev/null @@ -1,38 +0,0 @@ - -// 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 -#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/lib/Catch2/src/catch2/internal/catch_leak_detector.hpp b/lib/Catch2/src/catch2/internal/catch_leak_detector.hpp deleted file mode 100644 index 94c8f32..0000000 --- a/lib/Catch2/src/catch2/internal/catch_leak_detector.hpp +++ /dev/null @@ -1,19 +0,0 @@ - -// 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 -#ifndef CATCH_LEAK_DETECTOR_HPP_INCLUDED -#define CATCH_LEAK_DETECTOR_HPP_INCLUDED - -namespace Catch { - - struct LeakDetector { - LeakDetector(); - ~LeakDetector(); - }; - -} -#endif // CATCH_LEAK_DETECTOR_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_list.cpp b/lib/Catch2/src/catch2/internal/catch_list.cpp deleted file mode 100644 index 263781d..0000000 --- a/lib/Catch2/src/catch2/internal/catch_list.cpp +++ /dev/null @@ -1,123 +0,0 @@ - -// 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 - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace Catch { - namespace { - - void listTests(IEventListener& reporter, IConfig const& config) { - auto const& testSpec = config.testSpec(); - auto matchedTestCases = filterTests(getAllTestCasesSorted(config), testSpec, config); - reporter.listTests(matchedTestCases); - } - - void listTags(IEventListener& reporter, IConfig const& config) { - auto const& testSpec = config.testSpec(); - std::vector matchedTestCases = filterTests(getAllTestCasesSorted(config), testSpec, config); - - std::map tagCounts; - for (auto const& testCase : matchedTestCases) { - for (auto const& tagName : testCase.getTestCaseInfo().tags) { - auto it = tagCounts.find(tagName.original); - if (it == tagCounts.end()) - it = tagCounts.insert(std::make_pair(tagName.original, TagInfo())).first; - it->second.add(tagName.original); - } - } - - std::vector infos; infos.reserve(tagCounts.size()); - for (auto& tagc : tagCounts) { - infos.push_back(CATCH_MOVE(tagc.second)); - } - - reporter.listTags(infos); - } - - void listReporters(IEventListener& reporter) { - std::vector descriptions; - - IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories(); - descriptions.reserve(factories.size()); - for (auto const& fac : factories) { - descriptions.push_back({ fac.first, fac.second->getDescription() }); - } - - reporter.listReporters(descriptions); - } - - void listListeners(IEventListener& reporter) { - std::vector descriptions; - - auto const& factories = - getRegistryHub().getReporterRegistry().getListeners(); - descriptions.reserve( factories.size() ); - for ( auto const& fac : factories ) { - descriptions.push_back( { fac->getName(), fac->getDescription() } ); - } - - reporter.listListeners( descriptions ); - } - - } // end anonymous namespace - - void TagInfo::add( StringRef spelling ) { - ++count; - spellings.insert( spelling ); - } - - std::string TagInfo::all() const { - // 2 per tag for brackets '[' and ']' - size_t size = spellings.size() * 2; - for (auto const& spelling : spellings) { - size += spelling.size(); - } - - std::string out; out.reserve(size); - for (auto const& spelling : spellings) { - out += '['; - out += spelling; - out += ']'; - } - return out; - } - - bool list( IEventListener& reporter, Config const& config ) { - bool listed = false; - if (config.listTests()) { - listed = true; - listTests(reporter, config); - } - if (config.listTags()) { - listed = true; - listTags(reporter, config); - } - if (config.listReporters()) { - listed = true; - listReporters(reporter); - } - if ( config.listListeners() ) { - listed = true; - listListeners( reporter ); - } - return listed; - } - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/internal/catch_list.hpp b/lib/Catch2/src/catch2/internal/catch_list.hpp deleted file mode 100644 index 9b4abd8..0000000 --- a/lib/Catch2/src/catch2/internal/catch_list.hpp +++ /dev/null @@ -1,43 +0,0 @@ - -// 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 -#ifndef CATCH_LIST_HPP_INCLUDED -#define CATCH_LIST_HPP_INCLUDED - -#include - -#include -#include - - -namespace Catch { - - class IEventListener; - class Config; - - - struct ReporterDescription { - std::string name, description; - }; - struct ListenerDescription { - StringRef name; - std::string description; - }; - - struct TagInfo { - void add(StringRef spelling); - std::string all() const; - - std::set spellings; - std::size_t count = 0; - }; - - bool list( IEventListener& reporter, Config const& config ); - -} // end namespace Catch - -#endif // CATCH_LIST_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_main.cpp b/lib/Catch2/src/catch2/internal/catch_main.cpp deleted file mode 100644 index 503b540..0000000 --- a/lib/Catch2/src/catch2/internal/catch_main.cpp +++ /dev/null @@ -1,39 +0,0 @@ - -// 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 -#include -#include -#include -#include - -namespace Catch { - CATCH_INTERNAL_START_WARNINGS_SUPPRESSION - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS - static LeakDetector leakDetector; - CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION -} - -// Allow users of amalgamated .cpp file to remove our main and provide their own. -#if !defined(CATCH_AMALGAMATED_CUSTOM_MAIN) - -#if defined(CATCH_CONFIG_WCHAR) && defined(CATCH_PLATFORM_WINDOWS) && defined(_UNICODE) && !defined(DO_NOT_USE_WMAIN) -// Standard C/C++ Win32 Unicode wmain entry point -extern "C" int __cdecl wmain (int argc, wchar_t * argv[], wchar_t * []) { -#else -// Standard C/C++ main entry point -int main (int argc, char * argv[]) { -#endif - - // We want to force the linker not to discard the global variable - // and its constructor, as it (optionally) registers leak detector - (void)&Catch::leakDetector; - - return Catch::Session().run( argc, argv ); -} - -#endif // !defined(CATCH_AMALGAMATED_CUSTOM_MAIN diff --git a/lib/Catch2/src/catch2/internal/catch_message_info.cpp b/lib/Catch2/src/catch2/internal/catch_message_info.cpp deleted file mode 100644 index e0e9dc7..0000000 --- a/lib/Catch2/src/catch2/internal/catch_message_info.cpp +++ /dev/null @@ -1,25 +0,0 @@ - -// 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 - -namespace Catch { - - MessageInfo::MessageInfo( StringRef _macroName, - SourceLineInfo const& _lineInfo, - ResultWas::OfType _type ) - : macroName( _macroName ), - lineInfo( _lineInfo ), - type( _type ), - sequence( ++globalCount ) - {} - - // This may need protecting if threading support is added - unsigned int MessageInfo::globalCount = 0; - -} // end namespace Catch diff --git a/lib/Catch2/src/catch2/internal/catch_message_info.hpp b/lib/Catch2/src/catch2/internal/catch_message_info.hpp deleted file mode 100644 index d265842..0000000 --- a/lib/Catch2/src/catch2/internal/catch_message_info.hpp +++ /dev/null @@ -1,42 +0,0 @@ - -// 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 -#ifndef CATCH_MESSAGE_INFO_HPP_INCLUDED -#define CATCH_MESSAGE_INFO_HPP_INCLUDED - -#include -#include -#include - -#include - -namespace Catch { - - struct MessageInfo { - MessageInfo( StringRef _macroName, - SourceLineInfo const& _lineInfo, - ResultWas::OfType _type ); - - StringRef macroName; - std::string message; - SourceLineInfo lineInfo; - ResultWas::OfType type; - unsigned int sequence; - - bool operator == (MessageInfo const& other) const { - return sequence == other.sequence; - } - bool operator < (MessageInfo const& other) const { - return sequence < other.sequence; - } - private: - static unsigned int globalCount; - }; - -} // end namespace Catch - -#endif // CATCH_MESSAGE_INFO_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_meta.hpp b/lib/Catch2/src/catch2/internal/catch_meta.hpp deleted file mode 100644 index 0ac1ca3..0000000 --- a/lib/Catch2/src/catch2/internal/catch_meta.hpp +++ /dev/null @@ -1,48 +0,0 @@ - -// 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 -#ifndef CATCH_META_HPP_INCLUDED -#define CATCH_META_HPP_INCLUDED - -#include - -namespace Catch { - template - struct always_false : std::false_type {}; - - template struct true_given : std::true_type {}; - struct is_callable_tester { - template - static true_given()(std::declval()...))> test(int); - template - static std::false_type test(...); - }; - - template - struct is_callable; - - template - struct is_callable : decltype(is_callable_tester::test(0)) {}; - - -#if defined(__cpp_lib_is_invocable) && __cpp_lib_is_invocable >= 201703 - // std::result_of is deprecated in C++17 and removed in C++20. Hence, it is - // replaced with std::invoke_result here. - template - using FunctionReturnType = std::remove_reference_t>>; -#else - template - using FunctionReturnType = std::remove_reference_t>>; -#endif - -} // namespace Catch - -namespace mpl_{ - struct na; -} - -#endif // CATCH_META_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_move_and_forward.hpp b/lib/Catch2/src/catch2/internal/catch_move_and_forward.hpp deleted file mode 100644 index 383d85c..0000000 --- a/lib/Catch2/src/catch2/internal/catch_move_and_forward.hpp +++ /dev/null @@ -1,19 +0,0 @@ - -// 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 -#ifndef CATCH_MOVE_AND_FORWARD_HPP_INCLUDED -#define CATCH_MOVE_AND_FORWARD_HPP_INCLUDED - -#include - -//! Replacement for std::move with better compile time performance -#define CATCH_MOVE(...) static_cast&&>(__VA_ARGS__) - -//! Replacement for std::forward with better compile time performance -#define CATCH_FORWARD(...) static_cast(__VA_ARGS__) - -#endif // CATCH_MOVE_AND_FORWARD_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_noncopyable.hpp b/lib/Catch2/src/catch2/internal/catch_noncopyable.hpp deleted file mode 100644 index eb0823e..0000000 --- a/lib/Catch2/src/catch2/internal/catch_noncopyable.hpp +++ /dev/null @@ -1,28 +0,0 @@ - -// 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 -#ifndef CATCH_NONCOPYABLE_HPP_INCLUDED -#define CATCH_NONCOPYABLE_HPP_INCLUDED - -namespace Catch { - namespace Detail { - - //! Deriving classes become noncopyable and nonmovable - class NonCopyable { - NonCopyable( NonCopyable const& ) = delete; - NonCopyable( NonCopyable&& ) = delete; - NonCopyable& operator=( NonCopyable const& ) = delete; - NonCopyable& operator=( NonCopyable&& ) = delete; - - protected: - NonCopyable() noexcept = default; - }; - - } // namespace Detail -} // namespace Catch - -#endif // CATCH_NONCOPYABLE_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_optional.hpp b/lib/Catch2/src/catch2/internal/catch_optional.hpp deleted file mode 100644 index ac3714e..0000000 --- a/lib/Catch2/src/catch2/internal/catch_optional.hpp +++ /dev/null @@ -1,100 +0,0 @@ - -// 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 -#ifndef CATCH_OPTIONAL_HPP_INCLUDED -#define CATCH_OPTIONAL_HPP_INCLUDED - -#include - -namespace Catch { - - // An optional type - template - class Optional { - public: - Optional() : nullableValue( nullptr ) {} - Optional( T const& _value ) - : nullableValue( new( storage ) T( _value ) ) - {} - Optional( Optional const& _other ) - : nullableValue( _other ? new( storage ) T( *_other ) : nullptr ) - {} - - ~Optional() { - reset(); - } - - Optional& operator= ( Optional const& _other ) { - if( &_other != this ) { - reset(); - if( _other ) - nullableValue = new( storage ) T( *_other ); - } - return *this; - } - Optional& operator = ( T const& _value ) { - reset(); - nullableValue = new( storage ) T( _value ); - return *this; - } - - void reset() { - if( nullableValue ) - nullableValue->~T(); - nullableValue = nullptr; - } - - T& operator*() { - assert(nullableValue); - return *nullableValue; - } - T const& operator*() const { - assert(nullableValue); - return *nullableValue; - } - T* operator->() { - assert(nullableValue); - return nullableValue; - } - const T* operator->() const { - assert(nullableValue); - return nullableValue; - } - - T valueOr( T const& defaultValue ) const { - return nullableValue ? *nullableValue : defaultValue; - } - - bool some() const { return nullableValue != nullptr; } - bool none() const { return nullableValue == nullptr; } - - bool operator !() const { return nullableValue == nullptr; } - explicit operator bool() const { - return some(); - } - - friend bool operator==(Optional const& a, Optional const& b) { - if (a.none() && b.none()) { - return true; - } else if (a.some() && b.some()) { - return *a == *b; - } else { - return false; - } - } - friend bool operator!=(Optional const& a, Optional const& b) { - return !( a == b ); - } - - private: - T *nullableValue; - alignas(alignof(T)) char storage[sizeof(T)]; - }; - -} // end namespace Catch - -#endif // CATCH_OPTIONAL_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_output_redirect.cpp b/lib/Catch2/src/catch2/internal/catch_output_redirect.cpp deleted file mode 100644 index 02f7c98..0000000 --- a/lib/Catch2/src/catch2/internal/catch_output_redirect.cpp +++ /dev/null @@ -1,146 +0,0 @@ - -// 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 -#include -#include - -#include -#include -#include - -#if defined(CATCH_CONFIG_NEW_CAPTURE) - #if defined(_MSC_VER) - #include //_dup and _dup2 - #define dup _dup - #define dup2 _dup2 - #define fileno _fileno - #else - #include // dup and dup2 - #endif -#endif - - -namespace Catch { - - RedirectedStream::RedirectedStream( std::ostream& originalStream, std::ostream& redirectionStream ) - : m_originalStream( originalStream ), - m_redirectionStream( redirectionStream ), - m_prevBuf( m_originalStream.rdbuf() ) - { - m_originalStream.rdbuf( m_redirectionStream.rdbuf() ); - } - - RedirectedStream::~RedirectedStream() { - m_originalStream.rdbuf( m_prevBuf ); - } - - RedirectedStdOut::RedirectedStdOut() : m_cout( Catch::cout(), m_rss.get() ) {} - auto RedirectedStdOut::str() const -> std::string { return m_rss.str(); } - - RedirectedStdErr::RedirectedStdErr() - : m_cerr( Catch::cerr(), m_rss.get() ), - m_clog( Catch::clog(), m_rss.get() ) - {} - auto RedirectedStdErr::str() const -> std::string { return m_rss.str(); } - - RedirectedStreams::RedirectedStreams(std::string& redirectedCout, std::string& redirectedCerr) - : m_redirectedCout(redirectedCout), - m_redirectedCerr(redirectedCerr) - {} - - RedirectedStreams::~RedirectedStreams() { - m_redirectedCout += m_redirectedStdOut.str(); - m_redirectedCerr += m_redirectedStdErr.str(); - } - -#if defined(CATCH_CONFIG_NEW_CAPTURE) - -#if defined(_MSC_VER) - TempFile::TempFile() { - if (tmpnam_s(m_buffer)) { - CATCH_RUNTIME_ERROR("Could not get a temp filename"); - } - if (fopen_s(&m_file, m_buffer, "w+")) { - char buffer[100]; - if (strerror_s(buffer, errno)) { - CATCH_RUNTIME_ERROR("Could not translate errno to a string"); - } - CATCH_RUNTIME_ERROR("Could not open the temp file: '" << m_buffer << "' because: " << buffer); - } - } -#else - TempFile::TempFile() { - m_file = std::tmpfile(); - if (!m_file) { - CATCH_RUNTIME_ERROR("Could not create a temp file."); - } - } - -#endif - - TempFile::~TempFile() { - // TBD: What to do about errors here? - std::fclose(m_file); - // We manually create the file on Windows only, on Linux - // it will be autodeleted -#if defined(_MSC_VER) - std::remove(m_buffer); -#endif - } - - - FILE* TempFile::getFile() { - return m_file; - } - - std::string TempFile::getContents() { - std::stringstream sstr; - char buffer[100] = {}; - std::rewind(m_file); - while (std::fgets(buffer, sizeof(buffer), m_file)) { - sstr << buffer; - } - return sstr.str(); - } - - OutputRedirect::OutputRedirect(std::string& stdout_dest, std::string& stderr_dest) : - m_originalStdout(dup(1)), - m_originalStderr(dup(2)), - m_stdoutDest(stdout_dest), - m_stderrDest(stderr_dest) { - dup2(fileno(m_stdoutFile.getFile()), 1); - dup2(fileno(m_stderrFile.getFile()), 2); - } - - OutputRedirect::~OutputRedirect() { - Catch::cout() << std::flush; - fflush(stdout); - // Since we support overriding these streams, we flush cerr - // even though std::cerr is unbuffered - Catch::cerr() << std::flush; - Catch::clog() << std::flush; - fflush(stderr); - - dup2(m_originalStdout, 1); - dup2(m_originalStderr, 2); - - m_stdoutDest += m_stdoutFile.getContents(); - m_stderrDest += m_stderrFile.getContents(); - } - -#endif // CATCH_CONFIG_NEW_CAPTURE - -} // namespace Catch - -#if defined(CATCH_CONFIG_NEW_CAPTURE) - #if defined(_MSC_VER) - #undef dup - #undef dup2 - #undef fileno - #endif -#endif diff --git a/lib/Catch2/src/catch2/internal/catch_output_redirect.hpp b/lib/Catch2/src/catch2/internal/catch_output_redirect.hpp deleted file mode 100644 index dc89223..0000000 --- a/lib/Catch2/src/catch2/internal/catch_output_redirect.hpp +++ /dev/null @@ -1,118 +0,0 @@ - -// 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 -#ifndef CATCH_OUTPUT_REDIRECT_HPP_INCLUDED -#define CATCH_OUTPUT_REDIRECT_HPP_INCLUDED - -#include -#include -#include - -#include -#include -#include - -namespace Catch { - - class RedirectedStream { - std::ostream& m_originalStream; - std::ostream& m_redirectionStream; - std::streambuf* m_prevBuf; - - public: - RedirectedStream( std::ostream& originalStream, std::ostream& redirectionStream ); - ~RedirectedStream(); - }; - - class RedirectedStdOut { - ReusableStringStream m_rss; - RedirectedStream m_cout; - public: - RedirectedStdOut(); - auto str() const -> std::string; - }; - - // StdErr has two constituent streams in C++, std::cerr and std::clog - // This means that we need to redirect 2 streams into 1 to keep proper - // order of writes - class RedirectedStdErr { - ReusableStringStream m_rss; - RedirectedStream m_cerr; - RedirectedStream m_clog; - public: - RedirectedStdErr(); - auto str() const -> std::string; - }; - - class RedirectedStreams { - public: - RedirectedStreams(RedirectedStreams const&) = delete; - RedirectedStreams& operator=(RedirectedStreams const&) = delete; - RedirectedStreams(RedirectedStreams&&) = delete; - RedirectedStreams& operator=(RedirectedStreams&&) = delete; - - RedirectedStreams(std::string& redirectedCout, std::string& redirectedCerr); - ~RedirectedStreams(); - private: - std::string& m_redirectedCout; - std::string& m_redirectedCerr; - RedirectedStdOut m_redirectedStdOut; - RedirectedStdErr m_redirectedStdErr; - }; - -#if defined(CATCH_CONFIG_NEW_CAPTURE) - - // Windows's implementation of std::tmpfile is terrible (it tries - // to create a file inside system folder, thus requiring elevated - // privileges for the binary), so we have to use tmpnam(_s) and - // create the file ourselves there. - class TempFile { - public: - TempFile(TempFile const&) = delete; - TempFile& operator=(TempFile const&) = delete; - TempFile(TempFile&&) = delete; - TempFile& operator=(TempFile&&) = delete; - - TempFile(); - ~TempFile(); - - std::FILE* getFile(); - std::string getContents(); - - private: - std::FILE* m_file = nullptr; - #if defined(_MSC_VER) - char m_buffer[L_tmpnam] = { 0 }; - #endif - }; - - - class OutputRedirect { - public: - OutputRedirect(OutputRedirect const&) = delete; - OutputRedirect& operator=(OutputRedirect const&) = delete; - OutputRedirect(OutputRedirect&&) = delete; - OutputRedirect& operator=(OutputRedirect&&) = delete; - - - OutputRedirect(std::string& stdout_dest, std::string& stderr_dest); - ~OutputRedirect(); - - private: - int m_originalStdout = -1; - int m_originalStderr = -1; - TempFile m_stdoutFile; - TempFile m_stderrFile; - std::string& m_stdoutDest; - std::string& m_stderrDest; - }; - -#endif - -} // end namespace Catch - -#endif // CATCH_OUTPUT_REDIRECT_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_parse_numbers.cpp b/lib/Catch2/src/catch2/internal/catch_parse_numbers.cpp deleted file mode 100644 index 390b8c8..0000000 --- a/lib/Catch2/src/catch2/internal/catch_parse_numbers.cpp +++ /dev/null @@ -1,49 +0,0 @@ - -// 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 - -#include -#include - -#include - -namespace Catch { - - Optional parseUInt(std::string const& input, int base) { - auto trimmed = trim( input ); - // std::stoull is annoying and accepts numbers starting with '-', - // it just negates them into unsigned int - if ( trimmed.empty() || trimmed[0] == '-' ) { - return {}; - } - - CATCH_TRY { - size_t pos = 0; - const auto ret = std::stoull( trimmed, &pos, base ); - - // We did not consume the whole input, so there is an issue - // This can be bunch of different stuff, like multiple numbers - // in the input, or invalid digits/characters and so on. Either - // way, we do not want to return the partially parsed result. - if ( pos != trimmed.size() ) { - return {}; - } - // Too large - if ( ret > std::numeric_limits::max() ) { - return {}; - } - return static_cast(ret); - } CATCH_CATCH_ANON( std::exception const& ) { - // There was a larger issue with the input, e.g. the parsed - // number would be too large to fit within ull. - return {}; - } - } - -} // namespace Catch diff --git a/lib/Catch2/src/catch2/internal/catch_parse_numbers.hpp b/lib/Catch2/src/catch2/internal/catch_parse_numbers.hpp deleted file mode 100644 index 3dabf95..0000000 --- a/lib/Catch2/src/catch2/internal/catch_parse_numbers.hpp +++ /dev/null @@ -1,26 +0,0 @@ - -// 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 -#ifndef CATCH_PARSE_NUMBERS_HPP_INCLUDED -#define CATCH_PARSE_NUMBERS_HPP_INCLUDED - -#include - -#include - -namespace Catch { - - /** - * Parses unsigned int from the input, using provided base - * - * Effectively a wrapper around std::stoul but with better error checking - * e.g. "-1" is rejected, instead of being parsed as UINT_MAX. - */ - Optional parseUInt(std::string const& input, int base = 10); -} - -#endif // CATCH_PARSE_NUMBERS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_platform.hpp b/lib/Catch2/src/catch2/internal/catch_platform.hpp deleted file mode 100644 index b11d9cc..0000000 --- a/lib/Catch2/src/catch2/internal/catch_platform.hpp +++ /dev/null @@ -1,37 +0,0 @@ - -// 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 -#ifndef CATCH_PLATFORM_HPP_INCLUDED -#define CATCH_PLATFORM_HPP_INCLUDED - -// See e.g.: -// https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h.auto.html -#ifdef __APPLE__ -# include -# if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) || \ - (defined(TARGET_OS_MAC) && TARGET_OS_MAC == 1) -# define CATCH_PLATFORM_MAC -# elif (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE == 1) -# define CATCH_PLATFORM_IPHONE -# endif - -#elif defined(linux) || defined(__linux) || defined(__linux__) -# define CATCH_PLATFORM_LINUX - -#elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) -# define CATCH_PLATFORM_WINDOWS - -# if defined( WINAPI_FAMILY ) && ( WINAPI_FAMILY == WINAPI_FAMILY_APP ) -# define CATCH_PLATFORM_WINDOWS_UWP -# endif - -#elif defined(__ORBIS__) || defined(__PROSPERO__) -# define CATCH_PLATFORM_PLAYSTATION - -#endif - -#endif // CATCH_PLATFORM_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_polyfills.cpp b/lib/Catch2/src/catch2/internal/catch_polyfills.cpp deleted file mode 100644 index 96efad5..0000000 --- a/lib/Catch2/src/catch2/internal/catch_polyfills.cpp +++ /dev/null @@ -1,34 +0,0 @@ - -// 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 -#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 diff --git a/lib/Catch2/src/catch2/internal/catch_polyfills.hpp b/lib/Catch2/src/catch2/internal/catch_polyfills.hpp deleted file mode 100644 index 23a9332..0000000 --- a/lib/Catch2/src/catch2/internal/catch_polyfills.hpp +++ /dev/null @@ -1,16 +0,0 @@ - -// 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 -#ifndef CATCH_POLYFILLS_HPP_INCLUDED -#define CATCH_POLYFILLS_HPP_INCLUDED - -namespace Catch { - bool isnan(float f); - bool isnan(double d); -} - -#endif // CATCH_POLYFILLS_HPP_INCLUDED diff --git a/lib/Catch2/src/catch2/internal/catch_preprocessor.hpp b/lib/Catch2/src/catch2/internal/catch_preprocessor.hpp deleted file mode 100644 index 08e844d..0000000 --- a/lib/Catch2/src/catch2/internal/catch_preprocessor.hpp +++ /dev/null @@ -1,237 +0,0 @@ - -// 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 -#ifndef CATCH_PREPROCESSOR_HPP_INCLUDED -#define CATCH_PREPROCESSOR_HPP_INCLUDED - -#include - -#if defined(__GNUC__) -// We need to silence "empty __VA_ARGS__ warning", and using just _Pragma does not work -#pragma GCC system_header -#endif - - -#define CATCH_RECURSION_LEVEL0(...) __VA_ARGS__ -#define CATCH_RECURSION_LEVEL1(...) CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL2(...) CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL3(...) CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL4(...) CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL5(...) CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(__VA_ARGS__))) - -#ifdef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#define INTERNAL_CATCH_EXPAND_VARGS(...) __VA_ARGS__ -// MSVC needs more evaluations -#define CATCH_RECURSION_LEVEL6(...) CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(__VA_ARGS__))) -#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL6(CATCH_RECURSION_LEVEL6(__VA_ARGS__)) -#else -#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL5(__VA_ARGS__) -#endif - -#define CATCH_REC_END(...) -#define CATCH_REC_OUT - -#define CATCH_EMPTY() -#define CATCH_DEFER(id) id CATCH_EMPTY() - -#define CATCH_REC_GET_END2() 0, CATCH_REC_END -#define CATCH_REC_GET_END1(...) CATCH_REC_GET_END2 -#define CATCH_REC_GET_END(...) CATCH_REC_GET_END1 -#define CATCH_REC_NEXT0(test, next, ...) next CATCH_REC_OUT -#define CATCH_REC_NEXT1(test, next) CATCH_DEFER ( CATCH_REC_NEXT0 ) ( test, next, 0) -#define CATCH_REC_NEXT(test, next) CATCH_REC_NEXT1(CATCH_REC_GET_END test, next) - -#define CATCH_REC_LIST0(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST1(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0) ) ( f, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST2(f, x, peek, ...) f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) - -#define CATCH_REC_LIST0_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST1_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0_UD) ) ( f, userdata, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST2_UD(f, userdata, x, peek, ...) f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) - -// Applies the function macro `f` to each of the remaining parameters, inserts commas between the results, -// and passes userdata as the first parameter to each invocation, -// e.g. CATCH_REC_LIST_UD(f, x, a, b, c) evaluates to f(x, a), f(x, b), f(x, c) -#define CATCH_REC_LIST_UD(f, userdata, ...) CATCH_RECURSE(CATCH_REC_LIST2_UD(f, userdata, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) - -#define CATCH_REC_LIST(f, ...) CATCH_RECURSE(CATCH_REC_LIST2(f, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) - -#define INTERNAL_CATCH_STRINGIZE(...) INTERNAL_CATCH_STRINGIZE2(__VA_ARGS__) -#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#define INTERNAL_CATCH_STRINGIZE2(...) #__VA_ARGS__ -#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) -#else -// MSVC is adding extra space and needs another indirection to expand INTERNAL_CATCH_NOINTERNAL_CATCH_DEF -#define INTERNAL_CATCH_STRINGIZE2(...) INTERNAL_CATCH_STRINGIZE3(__VA_ARGS__) -#define INTERNAL_CATCH_STRINGIZE3(...) #__VA_ARGS__ -#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) (INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) + 1) -#endif - -#define INTERNAL_CATCH_MAKE_NAMESPACE2(...) ns_##__VA_ARGS__ -#define INTERNAL_CATCH_MAKE_NAMESPACE(name) INTERNAL_CATCH_MAKE_NAMESPACE2(name) - -#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) decltype(get_wrapper()) -#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)) -#else -#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) INTERNAL_CATCH_EXPAND_VARGS(decltype(get_wrapper())) -#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__))) -#endif - -#define INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(...)\ - CATCH_REC_LIST(INTERNAL_CATCH_MAKE_TYPE_LIST,__VA_ARGS__) - -#define INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_0) INTERNAL_CATCH_REMOVE_PARENS(_0) -#define INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_0, _1) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_1) -#define INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_0, _1, _2) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_1, _2) -#define INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_0, _1, _2, _3) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_1, _2, _3) -#define INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_0, _1, _2, _3, _4) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_1, _2, _3, _4) -#define INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_0, _1, _2, _3, _4, _5) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_1, _2, _3, _4, _5) -#define INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_0, _1, _2, _3, _4, _5, _6) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_1, _2, _3, _4, _5, _6) -#define INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_0, _1, _2, _3, _4, _5, _6, _7) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_1, _2, _3, _4, _5, _6, _7) -#define INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_1, _2, _3, _4, _5, _6, _7, _8) -#define INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9) -#define INTERNAL_CATCH_REMOVE_PARENS_11_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10) - -#define INTERNAL_CATCH_VA_NARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N - -#define INTERNAL_CATCH_TYPE_GEN\ - template struct TypeList {};\ - template\ - constexpr auto get_wrapper() noexcept -> TypeList { return {}; }\ - template class...> struct TemplateTypeList{};\ - template class...Cs>\ - constexpr auto get_wrapper() noexcept -> TemplateTypeList { return {}; }\ - template\ - struct append;\ - template\ - struct rewrap;\ - template class, typename...>\ - struct create;\ - template class, typename>\ - struct convert;\ - \ - template \ - struct append { using type = T; };\ - template< template class L1, typename...E1, template class L2, typename...E2, typename...Rest>\ - struct append, L2, Rest...> { using type = typename append, Rest...>::type; };\ - template< template class L1, typename...E1, typename...Rest>\ - struct append, TypeList, Rest...> { using type = L1; };\ - \ - template< template class Container, template class List, typename...elems>\ - struct rewrap, List> { using type = TypeList>; };\ - template< template class Container, template class List, class...Elems, typename...Elements>\ - struct rewrap, List, Elements...> { using type = typename append>, typename rewrap, Elements...>::type>::type; };\ - \ - template