| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | 
//              Copyright Catch2 Authors// Distributed under the Boost Software License, Version 1.0.//   (See accompanying file LICENSE_1_0.txt or copy at//        https://www.boost.org/LICENSE_1_0.txt)// SPDX-License-Identifier: BSL-1.0/**\file * Test that the cumulative reporter base stores both assertions and * benchmarks, and stores them in the right order. * * This is done through a custom reporter that writes out the assertions * and benchmarks and checking that the output is in right order. */#include <catch2/catch_test_macros.hpp>#include <catch2/benchmark/catch_benchmark.hpp>#include <catch2/reporters/catch_reporter_cumulative_base.hpp>#include <catch2/reporters/catch_reporter_registrars.hpp>#include <iostream>#include <utility>class CumulativeBenchmarkReporter final : public Catch::CumulativeReporterBase {public:    CumulativeBenchmarkReporter(Catch::ReporterConfig&& _config) :        CumulativeReporterBase(std::move(_config)) {        m_preferences.shouldReportAllAssertions = true;    }    static std::string getDescription() {        return "Custom reporter for testing cumulative reporter base";    }    virtual void testRunEndedCumulative() override;};CATCH_REGISTER_REPORTER("testReporter", CumulativeBenchmarkReporter)#include <chrono>#include <thread>TEST_CASE("Some assertions and benchmarks") {    using namespace std::chrono_literals;    REQUIRE(1);    BENCHMARK("2") {        std::this_thread::sleep_for(1ms);    };    REQUIRE(3);    BENCHMARK("4") {        std::this_thread::sleep_for(1ms);    };    REQUIRE(5);}void CumulativeBenchmarkReporter::testRunEndedCumulative() {    auto const& testCases = m_testRun->children;    assert(testCases.size() == 1);    auto const& testCase = *testCases.front();    auto const& sections = testCase.children;    assert(sections.size() == 1);    auto const& section = *sections.front();    assert(section.childSections.empty());    for (auto const& aob : section.assertionsAndBenchmarks) {        if (aob.isAssertion()) {            auto const& assertion = aob.asAssertion();            std::cout << assertion.assertionResult.getExpandedExpression() << '\n';        }        if (aob.isBenchmark()) {            auto const& bench = aob.asBenchmark();            std::cout << bench.info.name << '\n';        }    }}
 |