diff --git a/CMakeLists.txt b/CMakeLists.txt
index 74a8b6c1..4d57dd1a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,7 +14,7 @@ if (CMAKE_BINARY_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
endif()
-project(Catch2 LANGUAGES CXX VERSION 2.13.3)
+project(Catch2 LANGUAGES CXX VERSION 2.13.4)
# Provide path for scripts
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/CMake")
diff --git a/README.md b/README.md
index c2b89110..0e9cf5b4 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
[](https://discord.gg/4CWS9zD)
-The latest version of the single header can be downloaded directly using this link
+The latest version of the single header can be downloaded directly using this link
## Catch2 is released!
diff --git a/docs/cmake-integration.md b/docs/cmake-integration.md
index 4dc226c6..1cab907a 100644
--- a/docs/cmake-integration.md
+++ b/docs/cmake-integration.md
@@ -177,7 +177,7 @@ the output file name e.g. ".xml".
### `ParseAndAddCatchTests.cmake`
⚠ This script is [deprecated](https://github.com/catchorg/Catch2/pull/2120)
-in Catch X.Y.Z and superseded by the above approach using `catch_discover_tests`.
+in Catch 2.13.4 and superseded by the above approach using `catch_discover_tests`.
See [#2092](https://github.com/catchorg/Catch2/issues/2092) for details.
`ParseAndAddCatchTests` works by parsing all implementation files
diff --git a/docs/release-notes.md b/docs/release-notes.md
index 476a781a..48f75bd0 100644
--- a/docs/release-notes.md
+++ b/docs/release-notes.md
@@ -2,6 +2,7 @@
# Release notes
**Contents**
+[2.13.4](#2134)
[2.13.3](#2133)
[2.13.2](#2132)
[2.13.1](#2131)
@@ -44,6 +45,22 @@
[Even Older versions](#even-older-versions)
+## 2.13.4
+
+### Improvements
+* Improved the hashing algorithm used for shuffling test cases (#2070)
+ * `TEST_CASE`s that differ only in the last character should be properly shuffled
+ * Note that this means that v2.13.4 gives you a different order of test cases than 2.13.3, even given the same seed.
+
+### Miscellaneous
+* Deprecated `ParseAndAddCatchTests` CMake integration (#2092)
+ * It is impossible to implement it properly for all the different test case variants Catch2 provides, and there are better options provided.
+ * Use `catch_discover_tests` instead, which uses runtime information about available tests.
+* Fixed bug in `catch_discover_tests` that would cause it to fail when used in specific project structures (#2119)
+* Added Bazel build file
+* Added an experimental static library target to CMake
+
+
## 2.13.3
### Fixes
diff --git a/include/catch.hpp b/include/catch.hpp
index 77f29c40..f588eaa1 100644
--- a/include/catch.hpp
+++ b/include/catch.hpp
@@ -11,7 +11,7 @@
#define CATCH_VERSION_MAJOR 2
#define CATCH_VERSION_MINOR 13
-#define CATCH_VERSION_PATCH 3
+#define CATCH_VERSION_PATCH 4
#ifdef __clang__
# pragma clang system_header
diff --git a/include/internal/catch_version.cpp b/include/internal/catch_version.cpp
index 599f5666..c9864434 100644
--- a/include/internal/catch_version.cpp
+++ b/include/internal/catch_version.cpp
@@ -37,7 +37,7 @@ namespace Catch {
}
Version const& libraryVersion() {
- static Version version( 2, 13, 3, "", 0 );
+ static Version version( 2, 13, 4, "", 0 );
return version;
}
diff --git a/single_include/catch2/catch.hpp b/single_include/catch2/catch.hpp
index 2a2d77a2..0384171a 100644
--- a/single_include/catch2/catch.hpp
+++ b/single_include/catch2/catch.hpp
@@ -1,6 +1,6 @@
/*
- * Catch v2.13.3
- * Generated: 2020-10-31 18:20:31.045274
+ * Catch v2.13.4
+ * Generated: 2020-12-29 14:48:00.116107
* ----------------------------------------------------------
* This file has been merged from multiple headers. Please don't edit it directly
* Copyright (c) 2020 Two Blue Cubes Ltd. All rights reserved.
@@ -15,7 +15,7 @@
#define CATCH_VERSION_MAJOR 2
#define CATCH_VERSION_MINOR 13
-#define CATCH_VERSION_PATCH 3
+#define CATCH_VERSION_PATCH 4
#ifdef __clang__
# pragma clang system_header
@@ -14126,24 +14126,28 @@ namespace Catch {
namespace {
struct TestHasher {
- explicit TestHasher(Catch::SimplePcg32& rng_instance) {
- basis = rng_instance();
- basis <<= 32;
- basis |= rng_instance();
- }
+ using hash_t = uint64_t;
- uint64_t basis;
+ explicit TestHasher( hash_t hashSuffix ):
+ m_hashSuffix{ hashSuffix } {}
- uint64_t operator()(TestCase const& t) const {
- // Modified FNV-1a hash
- static constexpr uint64_t prime = 1099511628211;
- uint64_t hash = basis;
- for (const char c : t.name) {
+ uint32_t operator()( TestCase const& t ) const {
+ // FNV-1a hash with multiplication fold.
+ const hash_t prime = 1099511628211u;
+ hash_t hash = 14695981039346656037u;
+ for ( const char c : t.name ) {
hash ^= c;
hash *= prime;
}
- return hash;
+ hash ^= m_hashSuffix;
+ hash *= prime;
+ const uint32_t low{ static_cast( hash ) };
+ const uint32_t high{ static_cast( hash >> 32 ) };
+ return low * high;
}
+
+ private:
+ hash_t m_hashSuffix;
};
} // end unnamed namespace
@@ -14161,9 +14165,9 @@ namespace Catch {
case RunTests::InRandomOrder: {
seedRng( config );
- TestHasher h( rng() );
+ TestHasher h{ config.rngSeed() };
- using hashedTest = std::pair;
+ using hashedTest = std::pair;
std::vector indexed_tests;
indexed_tests.reserve( unsortedTestCases.size() );
@@ -15316,7 +15320,7 @@ namespace Catch {
}
Version const& libraryVersion() {
- static Version version( 2, 13, 3, "", 0 );
+ static Version version( 2, 13, 4, "", 0 );
return version;
}