<feed xmlns='http://www.w3.org/2005/Atom'>
<title>catch3, branch v3.11.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>v3.11.0</title>
<updated>2025-09-30T08:54:31+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-09-30T08:54:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=b3fb4b9feafcd8d91c5cb510a4775143fdbef02f'/>
<id>b3fb4b9feafcd8d91c5cb510a4775143fdbef02f</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add Tuple sponsorship banner to readme</title>
<updated>2025-09-30T08:34:21+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-09-21T09:27:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=6500dc81496878a02e1dfef8ed358257a209fdaf'/>
<id>6500dc81496878a02e1dfef8ed358257a209fdaf</id>
<content type='text'>
Until December.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Until December.
</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>Support Bazel's TEST_RANDOM_SEED</title>
<updated>2025-09-28T08:48:08+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-09-27T21:20:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=91b3b3bf4057e2a7e41bf1edd3e2c68b31bb3747'/>
<id>91b3b3bf4057e2a7e41bf1edd3e2c68b31bb3747</id>
<content type='text'>
As with other Bazel env vars, it overrides the corresponding CLI
parameter if both are set.

Closes #3021
Closes #3024
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
As with other Bazel env vars, it overrides the corresponding CLI
parameter if both are set.

Closes #3021
Closes #3024
</pre>
</div>
</content>
</entry>
<entry>
<title>Speed up processing mostly visible strings in convertIntoString</title>
<updated>2025-09-27T20:43:14+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-09-22T20:41:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=a00d6544375e92ccedec786aaee47ac392ea4900'/>
<id>a00d6544375e92ccedec786aaee47ac392ea4900</id>
<content type='text'>
This commit causes small (~5%) slowdown when processing strings
that consist mostly of escaped characters, but improves throughput
by about 100% for strings that consist mostly of characters that
do not need escaping.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This commit causes small (~5%) slowdown when processing strings
that consist mostly of escaped characters, but improves throughput
by about 100% for strings that consist mostly of characters that
do not need escaping.
</pre>
</div>
</content>
</entry>
<entry>
<title>Inline the `getResultCapture` helper into header.</title>
<updated>2025-09-27T11:24:46+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-09-23T13:23:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=756ae05d307168eaa27bd904dbd8e591a6406889'/>
<id>756ae05d307168eaa27bd904dbd8e591a6406889</id>
<content type='text'>
We still keep the error check in the function, but hide it in an
outlined function inside a .cpp file, to promote inlining of the
retrieval part.

In the future, we should explore two things

1) Skipping over the context retrieval here, allowing direct access.
   I currently do not see a way to do this while keeping the
   "greppability" of mutable vs immutable accesses that is there now,
   but it would help a lot when inlining is not enabled.
2) Removing the error check, to make the function trivially inlinable,
   and without branches.

**runtime difference**

| --------- | Debug | Release |
|:----------|------:|--------:|
| Slow path |  0.98 |    1.07 |
| Fast path |  1.04 |    1.08 |

We lost bit of performance on the assertion slow path in debug mode,
but together with the previous commit, it comes out at net zero.
For other combinations, we see 5-10% perf improvement across the
two commits.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We still keep the error check in the function, but hide it in an
outlined function inside a .cpp file, to promote inlining of the
retrieval part.

In the future, we should explore two things

1) Skipping over the context retrieval here, allowing direct access.
   I currently do not see a way to do this while keeping the
   "greppability" of mutable vs immutable accesses that is there now,
   but it would help a lot when inlining is not enabled.
2) Removing the error check, to make the function trivially inlinable,
   and without branches.

**runtime difference**

| --------- | Debug | Release |
|:----------|------:|--------:|
| Slow path |  0.98 |    1.07 |
| Fast path |  1.04 |    1.08 |

We lost bit of performance on the assertion slow path in debug mode,
but together with the previous commit, it comes out at net zero.
For other combinations, we see 5-10% perf improvement across the
two commits.
</pre>
</div>
</content>
</entry>
<entry>
<title>Keep the main Context instance as static value, not pointer</title>
<updated>2025-09-27T11:24:44+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2025-09-23T09:32:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=a2e41916f2cc0adbd27fc3d9cb89e9615fea1ad8'/>
<id>a2e41916f2cc0adbd27fc3d9cb89e9615fea1ad8</id>
<content type='text'>
This allows us to remove the lazy init checks, improving the inlining
potential when retrieving current context, thus slightly improving
the performance of assertions.

**runtime difference**

| --------- | Debug | Release |
|:----------|------:|--------:|
| Slow path |  1.01 |    0.98 |
| Fast path |  1.02 |    1.02 |

There is small slowdown in case of Release build + assertions taking
the slow path, but

1) going through the slow path is rare
2) Given the code change, I believe this to be artifact of the
   optimizer in the old GCC version I am using locally.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This allows us to remove the lazy init checks, improving the inlining
potential when retrieving current context, thus slightly improving
the performance of assertions.

**runtime difference**

| --------- | Debug | Release |
|:----------|------:|--------:|
| Slow path |  1.01 |    0.98 |
| Fast path |  1.02 |    1.02 |

There is small slowdown in case of Release build + assertions taking
the slow path, but

1) going through the slow path is rare
2) Given the code change, I believe this to be artifact of the
   optimizer in the old GCC version I am using locally.
</pre>
</div>
</content>
</entry>
<entry>
<title>Allow composability of unhandled exception filters (#3033)</title>
<updated>2025-09-27T09:09:34+00:00</updated>
<author>
<name>Duncan Horn</name>
</author>
<published>2025-09-27T09:09:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=0e772cc0d29e7518f84a1ad11aa179167a6ab6bc'/>
<id>0e772cc0d29e7518f84a1ad11aa179167a6ab6bc</id>
<content type='text'>
The change is very simple. If a handler previously existed, Catch2 will invoke it after printing out its output. I've also updated the comment to better reflect that it's returning EXCEPTION_CONTINUE_SEARCH even in scenarios where the exception is one that the library cares about.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The change is very simple. If a handler previously existed, Catch2 will invoke it after printing out its output. I've also updated the comment to better reflect that it's returning EXCEPTION_CONTINUE_SEARCH even in scenarios where the exception is one that the library cares about.</pre>
</div>
</content>
</entry>
<entry>
<title>Changed GetOptions to use sequence</title>
<updated>2025-09-25T19:06:10+00:00</updated>
<author>
<name>Mason Wilie</name>
</author>
<published>2025-09-25T04:15:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=3bcd0a4e74b2bb5f6ec80ad464775442af84343c'/>
<id>3bcd0a4e74b2bb5f6ec80ad464775442af84343c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix ReusableStringStream to access the container under the lock (#3031)</title>
<updated>2025-09-25T11:31:49+00:00</updated>
<author>
<name>Duncan Horn</name>
</author>
<published>2025-09-25T11:31:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=f7e7fa0983e83b922cb6336ff3a55d33b2873943'/>
<id>f7e7fa0983e83b922cb6336ff3a55d33b2873943</id>
<content type='text'>
Commit 582200a made `ReusableStringStream`'s index reservation thread safe, however it's still accessing the `m_streams` vector outside the lock. This makes it so that the `add` call returns the pointer in addition to the index so that the lock doesn't need to get acquired again until destruction.

The issue with accessing `m_streams` outside the lock is that `add` can call `push_back` on the vector, which might re-allocate. If this re-allocation occurs concurrently with anther thread trying to index into this array, you get UB (typically a null pointer read).</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Commit 582200a made `ReusableStringStream`'s index reservation thread safe, however it's still accessing the `m_streams` vector outside the lock. This makes it so that the `add` call returns the pointer in addition to the index so that the lock doesn't need to get acquired again until destruction.

The issue with accessing `m_streams` outside the lock is that `add` can call `push_back` on the vector, which might re-allocate. If this re-allocation occurs concurrently with anther thread trying to index into this array, you get UB (typically a null pointer read).</pre>
</div>
</content>
</entry>
</feed>
