From: Pieter Lexis Date: Mon, 24 Nov 2025 12:45:45 +0000 (+0100) Subject: chore(benchmarks): port misc.hh benchmarks from speedtest to catch2 X-Git-Tag: rec-5.4.0-beta1~51^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F16349%2Fhead;p=thirdparty%2Fpdns.git chore(benchmarks): port misc.hh benchmarks from speedtest to catch2 --- diff --git a/pdns/dnsdistdist/bench-misc_hh.cc b/pdns/dnsdistdist/bench-misc_hh.cc new file mode 100644 index 0000000000..f2a5b4f096 --- /dev/null +++ b/pdns/dnsdistdist/bench-misc_hh.cc @@ -0,0 +1,83 @@ +/* + * This file is part of PowerDNS or dnsdist. + * Copyright -- PowerDNS.COM B.V. and its contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * In addition, for the avoidance of any doubt, permission is granted to + * link this program with OpenSSL and to (re)distribute the binaries + * produced as the result of such linking. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#include "misc.hh" + +#define CATCH_CONFIG_NO_MAIN +#include +#include +#include + +TEST_CASE("misc.hh/stringtok", "[misc.hh]") +{ + std::vector> inStrings{ + {0, ""}, + {1, "the"}, + {3, "the quick brown"}, + {5, "the quick brown fox jumped"}, + {7, "the quick brown fox jumped over the"}, + {9, "the quick brown fox jumped over the lazy fox"}, + }; + + vector tokParts; + vector> vtokParts; + + for (auto const& inStr : inStrings) { + string benchmarkNameSuffix("stringtok " + std::to_string(inStr.first) + " words"); + BENCHMARK_ADVANCED(benchmarkNameSuffix.c_str())(Catch::Benchmark::Chronometer meter) + { + // SetUp + tokParts.clear(); + meter.measure([&inStr, &tokParts] { + stringtok(tokParts, inStr.second); + }); + }; + + string vtokBenchmarkName("v" + benchmarkNameSuffix); + BENCHMARK_ADVANCED(vtokBenchmarkName.c_str())(Catch::Benchmark::Chronometer meter) + { + // SetUp + vtokParts.clear(); + meter.measure([&inStr, &vtokParts] { + vstringtok(vtokParts, inStr.second); + }); + }; + } +} + +TEST_CASE("misc.hh/pdns_iequals", "[misc.hh]") +{ + static string first("www.powerdns.com"); + static string second("www.example.com"); + + BENCHMARK("std::string") + { + return pdns_iequals(first, second); + }; + + static const char* first_cstr = first.c_str(); + static const char* second_cstr = second.c_str(); + + BENCHMARK("const char*") + { + return pdns_iequals(first_cstr, second_cstr); + }; +} diff --git a/pdns/dnsdistdist/meson.build b/pdns/dnsdistdist/meson.build index 61545d3210..faa30ffe3c 100644 --- a/pdns/dnsdistdist/meson.build +++ b/pdns/dnsdistdist/meson.build @@ -599,6 +599,7 @@ benchmark_sources = files( src_dir / 'bench-dnsdist-dnsparser_cc.cc', src_dir / 'bench-dnsdist-opentelemetry_cc.cc', src_dir / 'bench-dnsdist-rings_cc.cc', + src_dir / 'bench-misc_hh.cc', ) if get_option('benchmark') @@ -667,7 +668,7 @@ if get_option('unit-tests') endif if get_option('benchmark') - benchmark('benchmarkrunner', benchmarkrunner) + benchmark('benchmarkrunner', benchmarkrunner, timeout:240) endif # Man-pages.