A modern, C++-native, test framework for unit-tests, TDD and BDD - using C++14, C++17 and later (C++11 support is in v2.x branch, and C++03 on the Catch1.x branch)
Go to file
John Bytheway 26b2c3e7e2
Change random test shuffling technique (refactored)
Previously a random test ordering was obtained by applying std::shuffle
to the tests in declaration order.  This has two problems:

- It depends on the declaration order, so the order in which the tests
  will be run will be platform-specific.
- When trying to debug accidental inter-test dependencies, it is helpful
  to be able to find a minimal subset of tests which exhibits the issue.
  However, any change to the set of tests being run will completely
  change the test ordering, making it difficult or impossible to reduce
  the set of tests being run in any reasonably efficient manner.

Therefore, change the randomization approach to resolve both these
issues.

Generate a random value based on the user-provided RNG seed.  Convert
every test case to an integer by hashing a combination of that value
with the test name.  Sort the test cases by this integer.

The test names and RNG are platform-independent, so this should be
consistent across platforms.  Also, removing one test does not change
the integer value associated with the remaining tests, so they remain in
the same order.

To hash, use the FNV-1a hash, except with the basis being our randomly
selected value rather than the fixed basis set in the algorithm.  Cannot
use std::hash, because it is important that the result be
platform-independent.
2020-05-01 12:32:38 +02:00
.conan [conan] Fix the Conan package for multiple static library use 2020-01-25 22:39:50 +01:00
.github Add a FUNDING file 2019-06-07 19:15:35 +02:00
CMake Update Catch2-provided pkg-config 2020-03-18 10:51:35 +01:00
data/artwork Move artwork/ to data/artwork/ 2019-12-06 11:36:12 +01:00
docs Add vcpkg installation instructions (#1898) 2020-05-01 09:31:41 +02:00
examples Avoid recompiling main for each example 2020-04-24 21:13:07 +02:00
extras Change PARSE_CATCH_TESTS_ADD_FIXTURE_IN_TEST_NAME conditional. 2020-05-01 09:30:31 +02:00
single_include/catch2 v2.10.2 2019-10-24 18:41:25 +02:00
src Change random test shuffling technique (refactored) 2020-05-01 12:32:38 +02:00
tests Fix bug in test spec parser handling of escaping in ORed patterns 2020-05-01 09:56:34 +02:00
third_party Fix vendored dep because upstream is non-responsive 2019-04-10 20:17:25 +02:00
tools Move all scripts to Python3 2020-04-29 21:28:52 +02:00
.gitattributes Update gitattributes 2018-07-23 10:15:52 +02:00
.gitignore Update Conan recipe 2018-11-19 15:27:47 +01:00
.travis.yml Add development build option to CMake and enable it on CI 2020-02-26 16:07:26 +01:00
CMakeLists.txt Development build defaults to off 2020-04-25 18:18:45 +02:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2017-08-17 07:45:12 +01:00
LICENSE.txt Renamed licence file, license should now be detected by github 2017-03-20 08:59:25 +01:00
README.md Remove Obj-C(++) support 2020-04-24 20:42:52 +02:00
appveyor.yml Fix coverage collection on AppVeyor 2020-01-31 14:44:40 +01:00
codecov.yml Do not count test files into coverage 2020-02-02 14:51:41 +01:00
conanfile.py [conan] Fix the Conan package for multiple static library use 2020-01-25 22:39:50 +01:00

README.md

catch logo

Github Releases Build Status Build status codecov Try online Join the chat in Discord: https://discord.gg/4CWS9zD

The latest version of the single header can be downloaded directly using this link

Catch2 is released!

If you've been using an earlier version of Catch, please see the Breaking Changes section of the release notes before moving to Catch2. You might also like to read this blog post for more details.

What's the Catch?

Catch2 is a multi-paradigm test framework for C++.

How to use it

This documentation comprises these three parts:

More