<feed xmlns='http://www.w3.org/2005/Atom'>
<title>catch3/src/catch2/internal/catch_run_context.cpp, branch v3.3.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>Don't take ownership of SECTION's name for inactive sections</title>
<updated>2023-01-29T09:44:20+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-01-27T23:35:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=65ffee518944372b35a885aa521ac28406f8b8fb'/>
<id>65ffee518944372b35a885aa521ac28406f8b8fb</id>
<content type='text'>
This eliminates 1945 (432709 -&gt; 430764) allocations from running
`./tests/SelfTest -o /dev/null`. In general terms, this saves
an allocation every time an unvisited `SECTION` is passed, which
means that the saved allocations are quadratic in number of sibling
(same level) `SECTION`s in a test case.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This eliminates 1945 (432709 -&gt; 430764) allocations from running
`./tests/SelfTest -o /dev/null`. In general terms, this saves
an allocation every time an unvisited `SECTION` is passed, which
means that the saved allocations are quadratic in number of sibling
(same level) `SECTION`s in a test case.
</pre>
</div>
</content>
</entry>
<entry>
<title>Avoid allocations when looking for trackers</title>
<updated>2023-01-29T09:14:20+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-01-27T21:12:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=43f02027e47310e200f20f5c3a1de6fe281e2f81'/>
<id>43f02027e47310e200f20f5c3a1de6fe281e2f81</id>
<content type='text'>
Now we delay allocating owning `NameAndLocation` instances until
we construct a new tracker (because a tracker's lifetime can be
significantly different from the underlying tracked-thing's name).

This saves 4239 allocations (436948 -&gt; 432709) when running
`./tests/SelfTest -o /dev/null`, at some cost to code clarity
due to introducing a new ref type, `NameAndLocationRef`.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Now we delay allocating owning `NameAndLocation` instances until
we construct a new tracker (because a tracker's lifetime can be
significantly different from the underlying tracked-thing's name).

This saves 4239 allocations (436948 -&gt; 432709) when running
`./tests/SelfTest -o /dev/null`, at some cost to code clarity
due to introducing a new ref type, `NameAndLocationRef`.
</pre>
</div>
</content>
</entry>
<entry>
<title>Clean up extraneous copies in Messages</title>
<updated>2023-01-28T21:14:37+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-01-28T21:01:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=906552f8c831d0dd1917484b53dd080537f19acd'/>
<id>906552f8c831d0dd1917484b53dd080537f19acd</id>
<content type='text'>
This removes 109 allocations from running `tests/SelfTest`
(437057 -&gt; 436948).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This removes 109 allocations from running `tests/SelfTest`
(437057 -&gt; 436948).
</pre>
</div>
</content>
</entry>
<entry>
<title>Move AssertionResultData into AssertionResult in RunContext</title>
<updated>2023-01-28T18:57:38+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-01-28T18:57:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=e5d1eb757fe399ff312d837a318dcf17b495d32e'/>
<id>e5d1eb757fe399ff312d837a318dcf17b495d32e</id>
<content type='text'>
When running `./tests/SelfTest -o /dev/null`, this saves 109
allocations (437167 -&gt; 437058).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When running `./tests/SelfTest -o /dev/null`, this saves 109
allocations (437167 -&gt; 437058).
</pre>
</div>
</content>
</entry>
<entry>
<title>Move SectionEndInfo into sectionEnded call in SECTION's destructor</title>
<updated>2023-01-28T12:00:30+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-01-28T12:00:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=2403f5620e60b41d84e35a88bacbb8bd8e1d92a8'/>
<id>2403f5620e60b41d84e35a88bacbb8bd8e1d92a8</id>
<content type='text'>
When running `./tests/SelfTest -o /dev/null`, this saves 1272
allocations (437439 -&gt; 437167). In general, this saves multiple
allocations per end of an entered `SECTION`, if the section name
was too long for SSO, because `RunContext::sectionEnded` can then
move the section's name further down the callstack.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When running `./tests/SelfTest -o /dev/null`, this saves 1272
allocations (437439 -&gt; 437167). In general, this saves multiple
allocations per end of an entered `SECTION`, if the section name
was too long for SSO, because `RunContext::sectionEnded` can then
move the section's name further down the callstack.
</pre>
</div>
</content>
</entry>
<entry>
<title>Stop exceptions in generator constructors from aborting the binary</title>
<updated>2023-01-22T15:04:16+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2023-01-17T10:04:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=8359a6b244a26cffabd4440b17fac8b1392815af'/>
<id>8359a6b244a26cffabd4440b17fac8b1392815af</id>
<content type='text'>
Fixes #2615
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes #2615
</pre>
</div>
</content>
</entry>
<entry>
<title>Add new SKIP macro for skipping tests at runtime (#2360)</title>
<updated>2023-01-12T14:01:47+00:00</updated>
<author>
<name>Philip Salzmann</name>
</author>
<published>2023-01-12T14:01:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=d548be26e3c54abc7e0b076319057d334e3ac589'/>
<id>d548be26e3c54abc7e0b076319057d334e3ac589</id>
<content type='text'>
* Add new SKIP macro for skipping tests at runtime

This adds a new `SKIP` macro for dynamically skipping tests at runtime.
The "skipped" status of a test case is treated as a first-class citizen,
like "succeeded" or "failed", and is reported with a new color on the
console.

* Don't show "skipped assertions" in console/compact reporters

Also extend skip tests to cover a few more use cases.

* Return exit code 4 if all test cases are skipped

* Use LightGrey for the skip colour

This isn't great, but is better than the deep blue that was borderline
invisible on dark backgrounds. The fix is to redo the colouring
a bit, including introducing light-blue that is actually visible.

* Add support for explicit skips in all reporters

* --allow-running-no-tests also allows all tests to be skipped

* Add docs for SKIP macro, deprecate IEventListener::skipTest

Co-authored-by: Martin Hořeňovský &lt;martin.horenovsky@gmail.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Add new SKIP macro for skipping tests at runtime

This adds a new `SKIP` macro for dynamically skipping tests at runtime.
The "skipped" status of a test case is treated as a first-class citizen,
like "succeeded" or "failed", and is reported with a new color on the
console.

* Don't show "skipped assertions" in console/compact reporters

Also extend skip tests to cover a few more use cases.

* Return exit code 4 if all test cases are skipped

* Use LightGrey for the skip colour

This isn't great, but is better than the deep blue that was borderline
invisible on dark backgrounds. The fix is to redo the colouring
a bit, including introducing light-blue that is actually visible.

* Add support for explicit skips in all reporters

* --allow-running-no-tests also allows all tests to be skipped

* Add docs for SKIP macro, deprecate IEventListener::skipTest

Co-authored-by: Martin Hořeňovský &lt;martin.horenovsky@gmail.com&gt;</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>
<entry>
<title>Fix Wunused-variable warning for MinGW</title>
<updated>2022-07-11T20:28:15+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2022-07-11T20:28:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=3bd0c58878bb4d413a4ef9ed701ec08e407420ab'/>
<id>3bd0c58878bb4d413a4ef9ed701ec08e407420ab</id>
<content type='text'>
Closes #2132
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Closes #2132
</pre>
</div>
</content>
</entry>
<entry>
<title>Only reseed the internal RNG when a test is first entered</title>
<updated>2022-05-17T19:49:26+00:00</updated>
<author>
<name>Martin Hořeňovský</name>
</author>
<published>2022-05-17T19:49:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/catch3/commit/?id=dcafc605f3232f5109e3f86ac8d8281e6ed611d2'/>
<id>dcafc605f3232f5109e3f86ac8d8281e6ed611d2</id>
<content type='text'>
This fixes multiple issues with random generators, with the most
important one being that multiple nested generators could return
values from the same sequence, due to internal implementation
details of `GENERATE`, and how they interact with test case
paths.

The cost of doing this is that given this simple `TEST_CASE`,
```cpp
TEST_CASE("foo") {
    auto i = GENERATE(take(10, random(0, 100));
    SECTION("A") {
        auto j = GENERATE(take(10, random(0, 100));
    }
    SECTION("B") {
        auto k = GENERATE(take(10, random(0, 100));
    }
}
```

`k` will have different values between running the test as
a whole, e.g. with `./tests "foo"`, and running only the "B"
section with `./tests "foo" -c "B"`.

I consider this an acceptable cost, because the only alternative
would be very messy to implement, and add a lot of brittle and
complex code for relatively little benefit.

If this calculation changes, we will need to instead walk
the current tracker tree whenever a random generator is being
constructed, check for random generators on the path to root,
and take a seed from them.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This fixes multiple issues with random generators, with the most
important one being that multiple nested generators could return
values from the same sequence, due to internal implementation
details of `GENERATE`, and how they interact with test case
paths.

The cost of doing this is that given this simple `TEST_CASE`,
```cpp
TEST_CASE("foo") {
    auto i = GENERATE(take(10, random(0, 100));
    SECTION("A") {
        auto j = GENERATE(take(10, random(0, 100));
    }
    SECTION("B") {
        auto k = GENERATE(take(10, random(0, 100));
    }
}
```

`k` will have different values between running the test as
a whole, e.g. with `./tests "foo"`, and running only the "B"
section with `./tests "foo" -c "B"`.

I consider this an acceptable cost, because the only alternative
would be very messy to implement, and add a lot of brittle and
complex code for relatively little benefit.

If this calculation changes, we will need to instead walk
the current tracker tree whenever a random generator is being
constructed, check for random generators on the path to root,
and take a seed from them.
</pre>
</div>
</content>
</entry>
</feed>
