mirror of
https://github.com/catchorg/Catch2.git
synced 2025-09-28 07:15:39 +02:00
Speed up processing mostly visible strings in convertIntoString
This commit causes small (~5%) slowdown when processing strings that consist mostly of escaped characters, but improves throughput by about 100% for strings that consist mostly of characters that do not need escaping.
This commit is contained in:
@@ -6,11 +6,13 @@
|
||||
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
|
||||
#include <catch2/benchmark/catch_benchmark.hpp>
|
||||
#include <catch2/catch_template_test_macros.hpp>
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
#include <catch2/generators/catch_generators.hpp>
|
||||
#include <catch2/internal/catch_enum_values_registry.hpp>
|
||||
#include <catch2/matchers/catch_matchers_string.hpp>
|
||||
#include <catch2/matchers/catch_matchers_vector.hpp>
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
#include <catch2/catch_template_test_macros.hpp>
|
||||
|
||||
#include <chrono>
|
||||
|
||||
@@ -139,3 +141,26 @@ TEST_CASE( "Exception thrown inside stringify does not fail the test", "[toStrin
|
||||
ThrowsOnStringification tos;
|
||||
CHECK( tos == tos );
|
||||
}
|
||||
|
||||
TEST_CASE( "string escaping benchmark", "[toString][!benchmark]" ) {
|
||||
const auto input_length = GENERATE( as<size_t>{}, 10, 100, 10'000, 100'000 );
|
||||
std::string test_input( input_length, 'a' );
|
||||
BENCHMARK( "no-escape string, no-escaping, len=" +
|
||||
std::to_string( input_length ) ) {
|
||||
return Catch::Detail::convertIntoString( test_input, false );
|
||||
};
|
||||
BENCHMARK( "no-escape string, escaping, len=" +
|
||||
std::to_string( input_length ) ) {
|
||||
return Catch::Detail::convertIntoString( test_input, true );
|
||||
};
|
||||
|
||||
std::string escape_input( input_length, '\r' );
|
||||
BENCHMARK( "full escape string, no-escaping, len=" +
|
||||
std::to_string( input_length ) ) {
|
||||
return Catch::Detail::convertIntoString( escape_input, false );
|
||||
};
|
||||
BENCHMARK( "full escape string, escaping, len=" +
|
||||
std::to_string( input_length ) ) {
|
||||
return Catch::Detail::convertIntoString( escape_input, true );
|
||||
};
|
||||
}
|
||||
|
Reference in New Issue
Block a user