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 @@ [![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.io/badge/Discord-Chat!-brightgreen.svg)](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; }