Commit Graph

21 Commits

Author SHA1 Message Date
Martin Hořeňovský
2a8a8a7210 Add configuration option to make assertions thread-safe
All the previous refactoring to make the assertion fast paths
smaller and faster also allows us to implement the fast paths
just with thread-local and atomic variables, without full mutexes.

However, the performance overhead of thread-safe assertions is
still significant for single threaded usage:

|  slowdown |  Debug  | Release |
|-----------|--------:|--------:|
| fast path |   1.04x |   1.43x |
| slow path |   1.16x |   1.22x |

Thus, we don't make the assertions thread-safe by default, and instead
provide a build-time configuration option that the users can set to get
thread-safe assertions.

This commit is functional, but it still needs some follow-up work:
 * We do not need full seq_cst increments for the atomic counters,
   and using weaker ones can be faster.
 * We brute-force updating the reporter-friendly totals from internal
   atomic counters by doing it everywhere. We should properly trace
   where this is needed instead.
 * Message macros (`INFO`, `UNSCOPED_INFO`, `CAPTURE`, etc) are not
   made thread safe in this commit, but they can be made thread safe
   in the future, by building on top of this work.
 * Add more tests, including with thread-sanitizer, and compiled
   examples to the repository. Right now, these changes have been
   compiled with tsan manually, but these tests are not added to CI.

Closes #2948
2025-07-24 10:10:00 +02:00
Chris Thrasher
4c93a595a1 Fix typos 2025-04-26 22:46:42 -06:00
Martin Hořeňovský
31588bb4f5 v3.7.0 2024-08-14 12:05:21 +02:00
Keith Stockdale
f7cd0ba051 TEST_CASE_PERSISTENT_FIXTURE: A new fixture macro for allowing persistent fixtures throughout a TEST_CASE (#2885)
This PR introduces a new `TEST_CASE` macro called `TEST_CASE_PERSISTENT_FIXTURE`. `TEST_CASE_PERSISTENT_FIXTURE` offers the same functionality as `TEST_CASE_METHOD` except for one difference. The object on which the test method is invoked is only created once for all invocations of the test case. The object is created just after the `testCaseStarting` event is broadcast and the object is destroyed just before the `testCaseEnding` event is broadcast.

The main motivation for this new functionality is to allow `TEST_CASE`s to do expensive setup and teardown once per `TEST_CASE`, without having to resort to abusing event listeners or static function variables with manual initialization.


Implements #1602

---------

Co-authored-by: Martin Hořeňovský <martin.horenovsky@gmail.com>
2024-08-05 17:01:41 +02:00
Martin Hořeňovský
6a422bae0b Trim superfluous whitespace in docs 2022-10-17 15:02:45 +02:00
Sam Cunliffe
d1394a7064 Link to SECTIONS doc at top of test fixtures page.
I came here looking for a way to use a fixture. But what I really wanted was better done in the SECTION macro. Feels like a link right at the top would've made it clearer faster.
2022-10-15 16:59:52 +02:00
Frank Dana
a369267874 test-fixtures.md: Line-wrap code examples (#2464)
* test-fixtures.md: Line-wrap code examples

* relinebreak

Co-authored-by: Martin Hořeňovský <martin.horenovsky@gmail.com>
2022-06-19 16:24:59 +02:00
Jozef Grajciar
037ddbc75c Fix introduced in version placeholders
Resolves #2082
2021-03-13 10:26:12 +01:00
Clare Macrae
e7c3bdb351 Add 'Introduced in Catch 2.8.0.' text 2019-08-02 19:18:47 +02:00
Clare Macrae
9aab958667 Add section headers, so I can later say when features were introduced 2019-08-02 19:18:47 +02:00
Clare Macrae
8cd58f75ec Add missing struct Template_Fixture_2 so that the example compiles.
Code copied from projects/SelfTest/UsageTests/Class.tests.cpp
2019-08-02 19:18:47 +02:00
Jozef Grajciar
e90d5a86e4 docs for TEMPLATE_LIST_TEST_CASE 2019-06-15 15:40:39 +02:00
Jozef Grajciar
732e4b06db docs for signature based parametrised test cases 2019-05-23 21:03:47 +02:00
Jozef Grajciar
5b4ffd3c93 Docs: added docs for TEMPLATE_PRODUCT_TEST_CASE 2018-12-10 08:24:08 +01:00
Martin Hořeňovský
00d4f5d3c6 Add documentation for templated tests 2018-11-16 21:21:30 +01:00
Martin Moene
071f49b12b Add page titles 2017-08-24 22:56:27 +02:00
Martin Moene
6c09b45a20 Let toplevel links to .md files link to .md#top 2017-08-24 19:40:36 +02:00
Martin Moene
e8225052f1 Add html anchor 'top' 2017-08-24 19:40:36 +02:00
Antoine Wendlinger
8d326424f3 Minor typo fix 2017-01-07 22:05:18 +01:00
Phil Nash
32186db1b0 Added first cut of docs for configuring Catch
- initially just covers new colour config
- also updated all [Home] links in footers to go to local readme
2014-10-21 18:25:57 +01:00
Phil Nash
c22cfc4a95 Addd test-fixtures docs from wiki 2013-06-28 17:45:08 +01:00