<feed xmlns='http://www.w3.org/2005/Atom'>
<title>catch3/src/catch2, branch v3.5.1</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.5.1</title>
<updated>2023-12-31T14:15:04+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-12-31T14:15:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=f981c9cbcac07a2690e5a86767eba490b5465463'/>
<id>f981c9cbcac07a2690e5a86767eba490b5465463</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Handle linking to liblog when [cross] building for Android using meson. (#2784)</title>
<updated>2023-12-28T22:40:42+00:00</updated>
<author>
<name>影月 零</name>
</author>
<published>2023-12-28T22:40:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=c8262e1f40c8308a47ff22ad92286f4c3c54425d'/>
<id>c8262e1f40c8308a47ff22ad92286f4c3c54425d</id>
<content type='text'>
* Alter meson for Android cross builds.

* Handle liblog linking on Termux as well as the Android NDK.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Alter meson for Android cross builds.

* Handle liblog linking on Termux as well as the Android NDK.</pre>
</div>
</content>
</entry>
<entry>
<title>Move-enable various parts of TextFlow</title>
<updated>2023-12-27T20:43:49+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-12-27T20:43:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=b52d97855d794175e69abc6f0eceee9ec3c1bd0e'/>
<id>b52d97855d794175e69abc6f0eceee9ec3c1bd0e</id>
<content type='text'>
This removes about 200 pointless copies from printing the help
message (the original motivation for the change), and also nicely
improves performance of the various reporters that depend on
TextFlow.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This removes about 200 pointless copies from printing the help
message (the original motivation for the change), and also nicely
improves performance of the various reporters that depend on
TextFlow.
</pre>
</div>
</content>
</entry>
<entry>
<title>Avoid copying TokenStreams while parsing</title>
<updated>2023-12-27T20:14:12+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-12-27T20:11:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=eaafd076743407e930a11297425f33c1f78220b0'/>
<id>eaafd076743407e930a11297425f33c1f78220b0</id>
<content type='text'>
The code is now even worse mess than before, due to the ad-hoc
implementation of Result-ish type based on virtual functions in
Clara, but it has dropped the allocations for empty binary down
to 151.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The code is now even worse mess than before, due to the ad-hoc
implementation of Result-ish type based on virtual functions in
Clara, but it has dropped the allocations for empty binary down
to 151.
</pre>
</div>
</content>
</entry>
<entry>
<title>Args and TokenStream use StringRefs instead of std::strings</title>
<updated>2023-12-27T15:24:33+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-12-27T15:19:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=5d637d4c6b72dc21e2e198894ba0527729fba535'/>
<id>5d637d4c6b72dc21e2e198894ba0527729fba535</id>
<content type='text'>
Because TokenStream is copied around a lot, moving it to use
`StringRef` removes _a lot_ of allocations per `Opt` in the parser.
Args are not copied around much, but changing them as well makes it
obvious that they do not participate in the ownership.

The changes add up to removing ~180 allocations for "empty"
invocation of the test binary.
(`./tests/ExtraTests/NoTests --allow-running-no-tests -o /dev/null`
is down to 317 allocs)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Because TokenStream is copied around a lot, moving it to use
`StringRef` removes _a lot_ of allocations per `Opt` in the parser.
Args are not copied around much, but changing them as well makes it
obvious that they do not participate in the ownership.

The changes add up to removing ~180 allocations for "empty"
invocation of the test binary.
(`./tests/ExtraTests/NoTests --allow-running-no-tests -o /dev/null`
is down to 317 allocs)
</pre>
</div>
</content>
</entry>
<entry>
<title>Use StringRef for Opt's optNames</title>
<updated>2023-12-26T15:03:22+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-12-26T13:01:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=cd3c7ebe873c3da91ce57c6b2221ba95ee7f93e6'/>
<id>cd3c7ebe873c3da91ce57c6b2221ba95ee7f93e6</id>
<content type='text'>
Removes another ~70 allocations.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Removes another ~70 allocations.
</pre>
</div>
</content>
</entry>
<entry>
<title>Enable moving Opts into Parser</title>
<updated>2023-12-26T14:41:07+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-12-26T10:57:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=5d5f42f99b7409b6b051182fae69fd22f8877a6d'/>
<id>5d5f42f99b7409b6b051182fae69fd22f8877a6d</id>
<content type='text'>
This also required keeping the reference type in the fluent interface
for Opts.

Removes another ~40 allocations.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This also required keeping the reference type in the fluent interface
for Opts.

Removes another ~40 allocations.
</pre>
</div>
</content>
</entry>
<entry>
<title>Avoid copying Clara::Parser for every inserted Opt</title>
<updated>2023-12-26T14:11:48+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-12-26T10:55:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=c57e349d1d62fcdf96aef576a5c200ae2078daad'/>
<id>c57e349d1d62fcdf96aef576a5c200ae2078daad</id>
<content type='text'>
This prevents the full construction from being O(N^2) in number
of `Opt`s, and also reduces the number of allocations for running
no tests significantly:

`tests/SelfTest`: 7705 -&gt; 6095
`tests/ExtraTests/NoTests` 2215 -&gt; 605
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This prevents the full construction from being O(N^2) in number
of `Opt`s, and also reduces the number of allocations for running
no tests significantly:

`tests/SelfTest`: 7705 -&gt; 6095
`tests/ExtraTests/NoTests` 2215 -&gt; 605
</pre>
</div>
</content>
</entry>
<entry>
<title>Cleanup help string construction in Clara</title>
<updated>2023-12-26T13:57:29+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-12-23T15:06:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=822c44a20395c6194d527110d59f7513a55b885c'/>
<id>822c44a20395c6194d527110d59f7513a55b885c</id>
<content type='text'>
* Clara::Opt::getHelpColumns returns single item

  It could never return multiple items, but for some reason it
  was wrapping that single item in a vector.

* Use ReusableStringStream in Clara
* Reserve HelpColumns ahead of time
* Use StringRef for descriptions in HelpColumn type

The combination of these changes ends up removing about 7% (~200)
of allocations when Catch2 has to prepare output for `-h`.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Clara::Opt::getHelpColumns returns single item

  It could never return multiple items, but for some reason it
  was wrapping that single item in a vector.

* Use ReusableStringStream in Clara
* Reserve HelpColumns ahead of time
* Use StringRef for descriptions in HelpColumn type

The combination of these changes ends up removing about 7% (~200)
of allocations when Catch2 has to prepare output for `-h`.
</pre>
</div>
</content>
</entry>
<entry>
<title>Store Opt/Arg hint and description as StringRef</title>
<updated>2023-12-26T13:40:45+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-12-23T15:02:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=2295d2c8ccc0dba4b35adb95ef8946a05996df87'/>
<id>2295d2c8ccc0dba4b35adb95ef8946a05996df87</id>
<content type='text'>
There is no good reason for these to be std::strings, as these
are just (optional) constants for nice user output. This ends up
reducing the allocations significantly.

When measuring allocations when running no tests, the changes are
`tests/SelfTest` 9213 -&gt; 7705
`tests/ExtraTests/NoTests` 3723 -&gt; 2215
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There is no good reason for these to be std::strings, as these
are just (optional) constants for nice user output. This ends up
reducing the allocations significantly.

When measuring allocations when running no tests, the changes are
`tests/SelfTest` 9213 -&gt; 7705
`tests/ExtraTests/NoTests` 3723 -&gt; 2215
</pre>
</div>
</content>
</entry>
</feed>
