<feed xmlns='http://www.w3.org/2005/Atom'>
<title>catch3/src/catch2/catch_test_case_info.cpp, branch docs/describe-catch3</title>
<subtitle>Progmasoft Catch3: an independently maintained C++17 test framework with a parallel runner, property checks, snapshots and structured results.</subtitle>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/'/>
<entry>
<title>Replace Catch2's runner with the Catch3 runner</title>
<updated>2026-10-23T20:25:41+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-10-23T20:25:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=93d4e7dbebab867e0a7f59fc25308460a7a76280'/>
<id>93d4e7dbebab867e0a7f59fc25308460a7a76280</id>
<content type='text'>
Catch3 keeps Catch2's API for writing tests (test cases, sections,
assertions, matchers, generators, listeners, benchmarks) and replaces its
session, command line and reporters with a runner of its own.

The runner starts the test binary again as worker processes that take the
next test when they are free. A crash, an exit or a hang ends one test, not
the run. On top of that it adds:

- retries that tell deterministic, flaky and order-dependent failures
  apart, and a bisection that names the test leaving state behind;
- a history of verdicts and durations, kept under a file lock, that drives
  automatic quarantine, adaptive time limits, predictive ordering,
  incremental runs, failure replay and analytics;
- selection by change, past failure or prediction, dependency closure,
  and sharding by a stable hash or by recorded durations;
- tags for serial and isolated tests, shared resources, dependencies,
  time limits and retries;
- a failure category, a signature, an analysis and a replay command for
  every failure;
- console, JUnit XML (with flakyFailure and rerunFailure), JSON and Chrome
  trace reports, and a versioned discovery listing (--list=json);
- a temporary directory per test (TMPDIR, TMP, TEMP and
  TestTemporaryDirectory());
- Bazel's test environment: XML output file, test filter, sharding, seed,
  premature exit file and undeclared outputs.

The command line is parsed by a hand-written, typed parser. Catch::Session
remains as a thin facade over the runner for custom main functions.

The result model in Progmasoft/Catch3/Results.hpp was rewritten around
tests and attempts, and the JUnit writer now writes it. The property
engine's example database is updated under a file lock with an atomic
rename, so parallel workers can write it at the same time.

Removed: Clara, the command-line and reporter-spec parsers, every reporter
and CATCH_REGISTER_REPORTER, listing, text flow, console colour and width,
the JSON and XML writers, sharding in the test registry, approval tests and
their baselines, Conan packaging, and the unused third_party/clara.hpp.
Listeners keep working; reporters' list and skip events are gone.

The Catch2 library is now compiled as C++20; code that includes only
Catch2's headers still needs C++14. Duplicate test cases are still refused
at start-up. Version 0.3.0.

ExtraTests now turn exceptions off for clang-cl with MSVC-style options,
which -fno-exceptions did not do.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Catch3 keeps Catch2's API for writing tests (test cases, sections,
assertions, matchers, generators, listeners, benchmarks) and replaces its
session, command line and reporters with a runner of its own.

The runner starts the test binary again as worker processes that take the
next test when they are free. A crash, an exit or a hang ends one test, not
the run. On top of that it adds:

- retries that tell deterministic, flaky and order-dependent failures
  apart, and a bisection that names the test leaving state behind;
- a history of verdicts and durations, kept under a file lock, that drives
  automatic quarantine, adaptive time limits, predictive ordering,
  incremental runs, failure replay and analytics;
- selection by change, past failure or prediction, dependency closure,
  and sharding by a stable hash or by recorded durations;
- tags for serial and isolated tests, shared resources, dependencies,
  time limits and retries;
- a failure category, a signature, an analysis and a replay command for
  every failure;
- console, JUnit XML (with flakyFailure and rerunFailure), JSON and Chrome
  trace reports, and a versioned discovery listing (--list=json);
- a temporary directory per test (TMPDIR, TMP, TEMP and
  TestTemporaryDirectory());
- Bazel's test environment: XML output file, test filter, sharding, seed,
  premature exit file and undeclared outputs.

The command line is parsed by a hand-written, typed parser. Catch::Session
remains as a thin facade over the runner for custom main functions.

The result model in Progmasoft/Catch3/Results.hpp was rewritten around
tests and attempts, and the JUnit writer now writes it. The property
engine's example database is updated under a file lock with an atomic
rename, so parallel workers can write it at the same time.

Removed: Clara, the command-line and reporter-spec parsers, every reporter
and CATCH_REGISTER_REPORTER, listing, text flow, console colour and width,
the JSON and XML writers, sharding in the test registry, approval tests and
their baselines, Conan packaging, and the unused third_party/clara.hpp.
Listeners keep working; reporters' list and skip events are gone.

The Catch2 library is now compiled as C++20; code that includes only
Catch2's headers still needs C++14. Duplicate test cases are still refused
at start-up. Version 0.3.0.

ExtraTests now turn exceptions off for clang-cl with MSVC-style options,
which -fno-exceptions did not do.
</pre>
</div>
</content>
</entry>
<entry>
<title>Don't check tags for being special twice during test case registration</title>
<updated>2026-09-11T09:27:31+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-09-10T21:40:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=58a5f8bd8c3a40359ed96127ac976f7ddf4b8f01'/>
<id>58a5f8bd8c3a40359ed96127ac976f7ddf4b8f01</id>
<content type='text'>
Previously we would check if the tag is special to validate that it isn't
reserved, and then to actually get the test case properties. We also did
the first check in particularly terrible order, leading to a lot of wasted
work.

The new implementation does property extraction while checking validity,
and is structured to avoid as much work as possible by early checks.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously we would check if the tag is special to validate that it isn't
reserved, and then to actually get the test case properties. We also did
the first check in particularly terrible order, leading to a lot of wasted
work.

The new implementation does property extraction while checking validity,
and is structured to avoid as much work as possible by early checks.
</pre>
</div>
</content>
</entry>
<entry>
<title>Inline sort + unique for &lt;= 2 tags</title>
<updated>2026-09-11T09:27:24+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-09-09T20:42:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=ee4b6eadb7f82b4a866324a3c29637d743880bcc'/>
<id>ee4b6eadb7f82b4a866324a3c29637d743880bcc</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>TestCaseInfo constructor reserves vector for tags</title>
<updated>2026-09-11T09:21:24+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-09-09T20:35:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=2f03f0079fc8c7be54265386fbc26ae2f3ff10f0'/>
<id>2f03f0079fc8c7be54265386fbc26ae2f3ff10f0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Faster check for duplicated test cases</title>
<updated>2026-09-06T18:08:25+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-09-06T17:02:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=5fe473f202a322ab10ee10bf64fcae63593286cf'/>
<id>5fe473f202a322ab10ee10bf64fcae63593286cf</id>
<content type='text'>
By avoiding `std::set`, we save 1 allocation per checked test case,
and the sort + pairwise check has much nicer cache behaviour, leading
to much faster check.

Overall, the check is only a tiny part of the startup overhead, but
the improvement is large enough that it ends up measurable in binaries
with many tests (e.g. `SelfTest`).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
By avoiding `std::set`, we save 1 allocation per checked test case,
and the sort + pairwise check has much nicer cache behaviour, leading
to much faster check.

Overall, the check is only a tiny part of the startup overhead, but
the improvement is large enough that it ends up measurable in binaries
with many tests (e.g. `SelfTest`).
</pre>
</div>
</content>
</entry>
<entry>
<title>Sprinkle some constexpr around to make Jason happy</title>
<updated>2024-09-13T14:40:11+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2024-09-13T09:16:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=18df97df00848e91bfe1b63408bba19f8b8237ae'/>
<id>18df97df00848e91bfe1b63408bba19f8b8237ae</id>
<content type='text'>
Most of these will not matter in practice due to C++14 imposing
significant limitations on what else we can make constexpr, and we cannot
have references outliving the constexpr context either way.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Most of these will not matter in practice due to C++14 imposing
significant limitations on what else we can make constexpr, and we cannot
have references outliving the constexpr context either way.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix OOB access when computing -# tag for file without extension</title>
<updated>2024-02-10T22:27:19+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2024-02-08T21:10:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=2a5de4e4476b7297e2f4e37b79ef9141a1829947'/>
<id>2a5de4e4476b7297e2f4e37b79ef9141a1829947</id>
<content type='text'>
It is unlikely that this would ever come in practice, but there
is no reason to fix it.

Related to #2798
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It is unlikely that this would ever come in practice, but there
is no reason to fix it.

Related to #2798
</pre>
</div>
</content>
</entry>
<entry>
<title>Cleanup includes in sources</title>
<updated>2023-12-23T10:23:32+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-12-21T17:42:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=9aadc3a53d7208f8b44260dfef26b18671f7edd0'/>
<id>9aadc3a53d7208f8b44260dfef26b18671f7edd0</id>
<content type='text'>
Mainly just removes some unused includes, but sometimes the include
is replaced by a smaller header instead.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Mainly just removes some unused includes, but sometimes the include
is replaced by a smaller header instead.
</pre>
</div>
</content>
</entry>
<entry>
<title>Improve error messages for TEST_CASE tag parsing errors</title>
<updated>2023-05-20T19:13:48+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-05-20T17:25:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=a153fce72402c74bb8480c0776f86f889b658fc1'/>
<id>a153fce72402c74bb8480c0776f86f889b658fc1</id>
<content type='text'>
Also removes a duplicated test case checking for empty tag error.

Related to #2650
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Also removes a duplicated test case checking for empty tag error.

Related to #2650
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix references to license file</title>
<updated>2022-10-28T09:30:15+00:00</updated>
<author>
<name>Lars Toenning</name>
</author>
<published>2022-10-28T09:22:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=f1084fb30990fe40c8f5b70034970c7eb4e1da72'/>
<id>f1084fb30990fe40c8f5b70034970c7eb4e1da72</id>
<content type='text'>
The license file was renamed with 6a502cc2f5fedd59b3495b58708f0d6d987ed9e1
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The license file was renamed with 6a502cc2f5fedd59b3495b58708f0d6d987ed9e1
</pre>
</div>
</content>
</entry>
</feed>
