<feed xmlns='http://www.w3.org/2005/Atom'>
<title>catch3/tests/ExtraTests, branch v3.13.0</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>Improve test for --warn InfiniteGenerators</title>
<updated>2026-02-13T20:30:26+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-02-13T20:30:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=b6c7b217d4bcb5030ce1e04180f35d02bcf5d93f'/>
<id>b6c7b217d4bcb5030ce1e04180f35d02bcf5d93f</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add --warn InfiniteGenerators</title>
<updated>2026-02-10T08:37:19+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-02-10T08:16:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=daadf42a0e21ac09abc1f286f875078b24e2dd4d'/>
<id>daadf42a0e21ac09abc1f286f875078b24e2dd4d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix _NullFile for MinGW</title>
<updated>2026-01-12T08:29:19+00:00</updated>
<author>
<name>dragon-archer</name>
</author>
<published>2026-01-11T10:54:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=fcbf006c7835fe766c5a21bfecce9f4f6dfc13a6'/>
<id>fcbf006c7835fe766c5a21bfecce9f4f6dfc13a6</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add UNSCOPED_CAPTURE</title>
<updated>2026-01-11T13:53:08+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-01-08T13:35:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=2580eadc4230eedf1b66841bdd27a8aacc2412a5'/>
<id>2580eadc4230eedf1b66841bdd27a8aacc2412a5</id>
<content type='text'>
Closes #2954
Closes #3010
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Closes #2954
Closes #3010
</pre>
</div>
</content>
</entry>
<entry>
<title>Thread safety in assertions is no longer experimental</title>
<updated>2025-12-28T20:02:50+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-12-28T20:02:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=970ec144f56d78703c51d08a855844e91c8560a8'/>
<id>970ec144f56d78703c51d08a855844e91c8560a8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix lifetime issues when using UNSCOPED_X message macros</title>
<updated>2025-12-26T14:53:30+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-12-26T14:31:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=eb3811c555eccd2de8b63ba16e0f62c444970acf'/>
<id>eb3811c555eccd2de8b63ba16e0f62c444970acf</id>
<content type='text'>
The original implementation of `UNSCOPED_X` message macros used a
clever hack to make the original implementation simpler: construct
an instance of `ScopedMessage` to manage its lifetime, but store
it in a vector, so its lifetime is not actually scope-based, and
we can manage it through the vector instance.

This hack made it so that the lifetime of the vector that manages
the fake `ScopedMessage`s must be outlived by the vector with the
actual messages. Originally this wasn't a problem, because they both
lived inside the run context instance. However, since then these
vectors became globals and thread-local. When this happened, it
still wasn't a problem; the two globals were declared in the right
order, so they were destroyed in the right order as well.

Then, in f80956a43a3e276686ed59531b41617282d75a0c, these globals
were turned into magic static globals to improve their behaviour
in MSVC's Debug build mode. This caused their lifetimes to be
runtime-dependent; if a specific test thread added its first scoped
message before it added first unscoped message, the lifetimes
would be correct. If it instead added first unscoped message
before adding first scoped message, then there **might** be
invalid reads during thread destruction.

The fix is simple: do things properly and manage the lifetime of
messages in `UNSCOPED_X` explicitly. Then we don't have to deal
with the destruction of fake `ScopedMessage`s while the thread is
being destroyed, and the lifetime of the two vectors is no longer
tied together.

I also threw them both into a new type, to encapsulate some of the
unscoped message logic.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The original implementation of `UNSCOPED_X` message macros used a
clever hack to make the original implementation simpler: construct
an instance of `ScopedMessage` to manage its lifetime, but store
it in a vector, so its lifetime is not actually scope-based, and
we can manage it through the vector instance.

This hack made it so that the lifetime of the vector that manages
the fake `ScopedMessage`s must be outlived by the vector with the
actual messages. Originally this wasn't a problem, because they both
lived inside the run context instance. However, since then these
vectors became globals and thread-local. When this happened, it
still wasn't a problem; the two globals were declared in the right
order, so they were destroyed in the right order as well.

Then, in f80956a43a3e276686ed59531b41617282d75a0c, these globals
were turned into magic static globals to improve their behaviour
in MSVC's Debug build mode. This caused their lifetimes to be
runtime-dependent; if a specific test thread added its first scoped
message before it added first unscoped message, the lifetimes
would be correct. If it instead added first unscoped message
before adding first scoped message, then there **might** be
invalid reads during thread destruction.

The fix is simple: do things properly and manage the lifetime of
messages in `UNSCOPED_X` explicitly. Then we don't have to deal
with the destruction of fake `ScopedMessage`s while the thread is
being destroyed, and the lifetime of the two vectors is no longer
tied together.

I also threw them both into a new type, to encapsulate some of the
unscoped message logic.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add tests for assertion thread safety</title>
<updated>2025-12-01T09:45:07+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-11-09T10:07:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=e849735e11f23ce9ec819e053b107f2ec3c3c1c4'/>
<id>e849735e11f23ce9ec819e053b107f2ec3c3c1c4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix lazy removal of unscoped messages also removing still valid msgs</title>
<updated>2025-11-30T13:30:19+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-11-30T11:56:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=985a3f44605bf3ee7bd4a0c6129ca69ec53a7ebe'/>
<id>985a3f44605bf3ee7bd4a0c6129ca69ec53a7ebe</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Disable test for deprecated CATCH_CONFIG_BAZEL_SUPPORT option</title>
<updated>2025-09-28T10:57:55+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-09-28T10:46:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=4be9de6c549af6e1e4c5fda1e3adf9c9ec4ae515'/>
<id>4be9de6c549af6e1e4c5fda1e3adf9c9ec4ae515</id>
<content type='text'>
Because it requires full rebuild of the base library, it adds about
20% to the build time of the test suite. Between the fact that the
option is deprecated, and that Bazel has added the `BAZEL_TEST`
env var _years_ ago, nobody should be using it, and the chance
of breakage is tiny, the test is not worth its compile-time cost.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Because it requires full rebuild of the base library, it adds about
20% to the build time of the test suite. Between the fact that the
option is deprecated, and that Bazel has added the `BAZEL_TEST`
env var _years_ ago, nobody should be using it, and the chance
of breakage is tiny, the test is not worth its compile-time cost.
</pre>
</div>
</content>
</entry>
<entry>
<title>Improve QNX support</title>
<updated>2025-09-22T13:36:46+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-09-22T13:12:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=9048c24fa7c6b568d52f76cbf06bbd62b7f83556'/>
<id>9048c24fa7c6b568d52f76cbf06bbd62b7f83556</id>
<content type='text'>
This cherry-picks the source changes from PR made by @pkleymonov-qnx,
without including the build path changes that are irrelevant unless
we can add a QNX target to our CI.

Close #2953
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This cherry-picks the source changes from PR made by @pkleymonov-qnx,
without including the build path changes that are irrelevant unless
we can add a QNX target to our CI.

Close #2953
</pre>
</div>
</content>
</entry>
</feed>
