Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/benchmarks
diff options
context:
space:
mode:
authorMartin Hořeňovský2026-07-28 22:08:55 +0200
committerMartin Hořeňovský2026-08-08 00:05:18 +0200
commit4cde12851773b32fc5a0171f262e4281c8e28b01 (patch)
treecdd11d3c9c86a2a6c9ba15fdfe69fd9555ecf850 /benchmarks
parent0b4d7a5a1696dbdfb23fccad8c50db9dc9a417ea (diff)
downloadcatch3-4cde12851773b32fc5a0171f262e4281c8e28b01.tar.gz
JSONReporter considers verbosity when listing tests
* Quiet verbosity provides just the test names * Normal verbosity adds tags * High verbosity add the source location of the tests Listing tests with the quiet verbosity results in about 1/4 of the previous output, which leads to measurably faster execution of `catch_discover_tests` when it does not need tags for labels. (If it does need tags, the output is about 1/2 of previous).
Diffstat (limited to 'benchmarks')
-rw-r--r--benchmarks/discover_tests/benchmark_discovery.py16
-rw-r--r--benchmarks/discover_tests/listing_template.json60
2 files changed, 21 insertions, 55 deletions
diff --git a/benchmarks/discover_tests/benchmark_discovery.py b/benchmarks/discover_tests/benchmark_discovery.py
index b3358607..55e6d494 100644
--- a/benchmarks/discover_tests/benchmark_discovery.py
+++ b/benchmarks/discover_tests/benchmark_discovery.py
@@ -8,6 +8,7 @@
# SPDX-License-Identifier: BSL-1.0
import argparse
+import copy
import json
import os
import re
@@ -33,14 +34,19 @@ def load_template(path: str) -> dict:
return catch_out
-def synthesize_listing(template_doc: dict, count: int, file) -> str:
+def synthesize_listing(template_doc: dict, count: int, file, with_tags: bool) -> str:
"""Writes JSON listing with exactly `count` test cases into `file`.
The template entries are cycled through, and each name is made unique by
appending an index, so that every registered CTest test has a distinct name.
"""
- doc_copy = template_doc.copy()
- template_tests = template_doc['listings']['tests']
+ # To avoid messing up the template tests by deletion, we have
+ # to take a deepcopy before the changes.
+ doc_copy = copy.deepcopy(template_doc)
+ template_tests = doc_copy['listings']['tests']
+ if not with_tags:
+ for test in template_tests:
+ del test['tags']
num_original = len(template_tests)
out_tests = []
@@ -176,10 +182,10 @@ def main():
os.makedirs(workdir, exist_ok=True)
for count in COUNTS:
listing_path = os.path.join(workdir, f"listing-{count}.json")
- with open(listing_path, "w", encoding="utf-8") as f:
- synthesize_listing(template_doc, count, f)
for add_tags in tag_modes:
+ with open(listing_path, "w", encoding="utf-8") as f:
+ synthesize_listing(template_doc, count, f, add_tags)
mode = "on" if add_tags else "off"
ctest_file = os.path.join(workdir, f"ctest-{count}-{mode}.cmake")
cmd = build_command(args, listing_path, ctest_file, add_tags)
diff --git a/benchmarks/discover_tests/listing_template.json b/benchmarks/discover_tests/listing_template.json
index 7e976162..d434dd5c 100644
--- a/benchmarks/discover_tests/listing_template.json
+++ b/benchmarks/discover_tests/listing_template.json
@@ -11,22 +11,14 @@
"tags": [
"function pointer",
"Tricky"
- ],
- "source-location": {
- "filename": "/mnt/c/ubuntu/Catch2/tests/SelfTest/UsageTests/Tricky.tests.cpp",
- "line": 266
- }
+ ]
},
{
"name": "Testing checked-if 4",
"tags": [
"!shouldfail",
"checked-if"
- ],
- "source-location": {
- "filename": "/mnt/c/ubuntu/Catch2/tests/SelfTest/UsageTests/Misc.tests.cpp",
- "line": 216
- }
+ ]
},
{
"name": "count_equidistant_floats - double",
@@ -34,11 +26,7 @@
"approvals",
"distance",
"floating-point"
- ],
- "source-location": {
- "filename": "/mnt/c/ubuntu/Catch2/tests/SelfTest/IntrospectiveTests/FloatingPoint.tests.cpp",
- "line": 103
- }
+ ]
},
{
"name": "Usage of AllTrue range matcher",
@@ -46,11 +34,7 @@
"matchers",
"quantifiers",
"templated"
- ],
- "source-location": {
- "filename": "/mnt/c/ubuntu/Catch2/tests/SelfTest/UsageTests/MatchersRanges.tests.cpp",
- "line": 372
- }
+ ]
},
{
"name": "Exception matchers that succeed",
@@ -58,11 +42,7 @@
"!throws",
"exceptions",
"matchers"
- ],
- "source-location": {
- "filename": "/mnt/c/ubuntu/Catch2/tests/SelfTest/UsageTests/Matchers.tests.cpp",
- "line": 428
- }
+ ]
},
{
"name": "A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - float",
@@ -70,22 +50,14 @@
"tags": [
"class",
"template"
- ],
- "source-location": {
- "filename": "/mnt/c/ubuntu/Catch2/tests/SelfTest/UsageTests/Class.tests.cpp",
- "line": 82
- }
+ ]
},
{
"name": "Approximate PI",
"tags": [
"Approx",
"PI"
- ],
- "source-location": {
- "filename": "/mnt/c/ubuntu/Catch2/tests/SelfTest/UsageTests/Approx.tests.cpp",
- "line": 134
- }
+ ]
},
{
"name": "TextFlow::Column respects width setting",
@@ -93,32 +65,20 @@
"approvals",
"column",
"TextFlow"
- ],
- "source-location": {
- "filename": "/mnt/c/ubuntu/Catch2/tests/SelfTest/IntrospectiveTests/TextFlow.tests.cpp",
- "line": 38
- }
+ ]
},
{
"name": "Generators internals",
"tags": [
"generators",
"internals"
- ],
- "source-location": {
- "filename": "/mnt/c/ubuntu/Catch2/tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp",
- "line": 24
- }
+ ]
},
{
"name": "Mayfail test case with nested sections",
"tags": [
"!mayfail"
- ],
- "source-location": {
- "filename": "/mnt/c/ubuntu/Catch2/tests/SelfTest/UsageTests/Condition.tests.cpp",
- "line": 83
- }
+ ]
}
]
}