diff options
| author | Martin Hořeňovský | 2026-07-28 22:08:55 +0200 |
|---|---|---|
| committer | Martin Hořeňovský | 2026-08-08 00:05:18 +0200 |
| commit | 4cde12851773b32fc5a0171f262e4281c8e28b01 (patch) | |
| tree | cdd11d3c9c86a2a6c9ba15fdfe69fd9555ecf850 /benchmarks | |
| parent | 0b4d7a5a1696dbdfb23fccad8c50db9dc9a417ea (diff) | |
| download | catch3-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.py | 16 | ||||
| -rw-r--r-- | benchmarks/discover_tests/listing_template.json | 60 |
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 - } + ] } ] } |