<feed xmlns='http://www.w3.org/2005/Atom'>
<title>catch3/src/catch2, branch 0.1.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>Fix typos in comments</title>
<updated>2026-09-14T11:23:10+00:00</updated>
<author>
<name>anarch</name>
</author>
<published>2026-09-13T04:39:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=889700e9799becb812ebb2c0fcf3b888f975e0ea'/>
<id>889700e9799becb812ebb2c0fcf3b888f975e0ea</id>
<content type='text'>
Three misspellings in comments: "reuired" -&gt; "required",
"ambigous" -&gt; "ambiguous", "neccessarily" -&gt; "necessarily".

Per docs/contributing.md, the amalgamated files under extras/ are left
untouched even though they carry the same typos.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Three misspellings in comments: "reuired" -&gt; "required",
"ambigous" -&gt; "ambiguous", "neccessarily" -&gt; "necessarily".

Per docs/contributing.md, the amalgamated files under extras/ are left
untouched even though they carry the same typos.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Better handling of ANSI escape codes in TextFlow</title>
<updated>2026-09-13T21:35:34+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-09-13T21:35:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=8e2f6f7a876e127a08b1864d028199d6e0961fc6'/>
<id>8e2f6f7a876e127a08b1864d028199d6e0961fc6</id>
<content type='text'>
The new implementation keeps track of found escape codes in a separate
vector, which has two advantages:
1) The handling of inputs without any escape codes is much faster. As
   this will be the case for majority of inputs, this should provide
   nice speedup all around.
2) We no longer mangle unrelated 0xFFs in the user-provided input.

Closes #3199
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The new implementation keeps track of found escape codes in a separate
vector, which has two advantages:
1) The handling of inputs without any escape codes is much faster. As
   this will be the case for majority of inputs, this should provide
   nice speedup all around.
2) We no longer mangle unrelated 0xFFs in the user-provided input.

Closes #3199
</pre>
</div>
</content>
</entry>
<entry>
<title>Add some missing CATCH_MOVEs</title>
<updated>2026-09-11T09:27:33+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-09-11T07:41:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=b7f1a83ff0c36990a9840bcb3de56a848d24a893'/>
<id>b7f1a83ff0c36990a9840bcb3de56a848d24a893</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</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>Avoid per-input alloc+copy in WildcardPattern::matches</title>
<updated>2026-09-11T09:21:22+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-09-09T18:15:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=5e47f48ecc68ff48c3c085d93502559038141693'/>
<id>5e47f48ecc68ff48c3c085d93502559038141693</id>
<content type='text'>
The old implementation always forced copy (and likely alloc) for
each input when matching it. The new implementation uses the
case-insensitive comparators to avoid all that.

This provides interesting performance improvement for selecting
individual test, doing something like `./tests/SelfTest "ABC*"`
is almost 10% faster.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The old implementation always forced copy (and likely alloc) for
each input when matching it. The new implementation uses the
case-insensitive comparators to avoid all that.

This provides interesting performance improvement for selecting
individual test, doing something like `./tests/SelfTest "ABC*"`
is almost 10% faster.
</pre>
</div>
</content>
</entry>
<entry>
<title>Faster selection of tests to run</title>
<updated>2026-09-11T09:16:10+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-09-07T21:15:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=ab13a28d125b50a458667e972ed56400af7ad931'/>
<id>ab13a28d125b50a458667e972ed56400af7ad931</id>
<content type='text'>
Similar to the change that removed `std::set` from the test registration
path, this saves an allocation per test to run, and is faster to boot.

Technically, the performance of selecting tests for multiple OR-joined
filters, each of which selects many (most) tests is a bit slower,
but that is not very common use case.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Similar to the change that removed `std::set` from the test registration
path, this saves an allocation per test to run, and is faster to boot.

Technically, the performance of selecting tests for multiple OR-joined
filters, each of which selects many (most) tests is a bit slower,
but that is not very common use case.
</pre>
</div>
</content>
</entry>
<entry>
<title>Move filtered test cases into the FilterMatch instead of copying</title>
<updated>2026-09-11T09:16:05+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-09-07T19:20:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=ed393f09c729a706fb1fa1f2aa1742e206a48b65'/>
<id>ed393f09c729a706fb1fa1f2aa1742e206a48b65</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Use locale-independent toLower</title>
<updated>2026-09-11T09:15:58+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2026-09-06T21:23:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=6a5075bf73273ecb83fca61efdfde2fa1a2690bf'/>
<id>6a5075bf73273ecb83fca61efdfde2fa1a2690bf</id>
<content type='text'>
We generally do not even try to pretend to support more than plain ASCII,
because doing unicode in old C++ standards is a pain and a half. For
`toLower`, we used to wrap `std::tolower` with multiple casts to avoid UB,
but calling into it is relatively slow, and it tries to handle different
locales, which could cause unexpected results.

In addition, the new implementation is significantly faster, which helps
speed up the initial process bring up (as comparing tags, and thus test
cases is now faster).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We generally do not even try to pretend to support more than plain ASCII,
because doing unicode in old C++ standards is a pain and a half. For
`toLower`, we used to wrap `std::tolower` with multiple casts to avoid UB,
but calling into it is relatively slow, and it tries to handle different
locales, which could cause unexpected results.

In addition, the new implementation is significantly faster, which helps
speed up the initial process bring up (as comparing tags, and thus test
cases is now faster).
</pre>
</div>
</content>
</entry>
</feed>
