[libc++] Add regression test for std::hash implementation in ABI v1 Differential Revision: https://reviews.llvm.org/D144107 GitOrigin-RevId: 23d43e6977576ed318a9c81cec256d75f5d49ded
diff --git a/test/libcxx/utilities/utility/__murmur2_or_cityhash.pass.cpp b/test/libcxx/utilities/utility/__murmur2_or_cityhash.abi-v1.pass.cpp similarity index 63% copy from test/libcxx/utilities/utility/__murmur2_or_cityhash.pass.cpp copy to test/libcxx/utilities/utility/__murmur2_or_cityhash.abi-v1.pass.cpp index 13fc9c3..3f8557a 100644 --- a/test/libcxx/utilities/utility/__murmur2_or_cityhash.pass.cpp +++ b/test/libcxx/utilities/utility/__murmur2_or_cityhash.abi-v1.pass.cpp
@@ -6,13 +6,14 @@ // //===----------------------------------------------------------------------===// -// Test the CityHash implementation is correct. - // UNSUPPORTED: c++03 -// In ABI v1, our CityHash implementation is incorrect and fixing it would -// be an ABI break. -// REQUIRES: libcpp-abi-version=2 +// Test that the CityHash implementation returns the results we expect. +// +// Note that this implementation is technically incorrect, however changing it is +// an ABI break. This test ensures that we don't unintentionally break the ABI v1 +// by "fixing" the hash implementation. +// REQUIRES: libcpp-abi-version=1 #include <cassert> #include <string> @@ -33,15 +34,16 @@ int main(int, char**) { const std::pair<std::string, uint64_t> TestCases[] = { - {CityHash[0], CHOOSE_BY_ENDIANESS(0x4382a8d0fe8edb17ULL, 0xca84e809bef16fbcULL)}, - {CityHash[1], CHOOSE_BY_ENDIANESS(0xecefb080a6854061ULL, 0xd7feb824250272dcULL)}, - {CityHash[2], CHOOSE_BY_ENDIANESS(0x169ea3aebf908d6dULL, 0xea8cef3ca6f6e368ULL)}, - {CityHash[3], CHOOSE_BY_ENDIANESS(0xe18298a2760f09faULL, 0xf33a7700bb7a94a8ULL)}, + {CityHash[0], CHOOSE_BY_ENDIANESS(0x87c69099911bab7eULL, 0x297621d7fa436a3ULL)}, + {CityHash[1], CHOOSE_BY_ENDIANESS(0x87c69099911bab7eULL, 0xb17be531dde56e57ULL)}, + {CityHash[2], CHOOSE_BY_ENDIANESS(0x85322632e188694aULL, 0xe14f578b688e266dULL)}, + {CityHash[3], CHOOSE_BY_ENDIANESS(0x85322632e188694aULL, 0xca5a764a0450eac6ULL)}, }; std::__murmur2_or_cityhash<uint64_t> h64; for (const auto& test_case : TestCases) { assert(h64(test_case.first.data(), test_case.first.size()) == test_case.second); } + return 0; }
diff --git a/test/libcxx/utilities/utility/__murmur2_or_cityhash.pass.cpp b/test/libcxx/utilities/utility/__murmur2_or_cityhash.abi-v2.pass.cpp similarity index 96% rename from test/libcxx/utilities/utility/__murmur2_or_cityhash.pass.cpp rename to test/libcxx/utilities/utility/__murmur2_or_cityhash.abi-v2.pass.cpp index 13fc9c3..01f8b88 100644 --- a/test/libcxx/utilities/utility/__murmur2_or_cityhash.pass.cpp +++ b/test/libcxx/utilities/utility/__murmur2_or_cityhash.abi-v2.pass.cpp
@@ -6,10 +6,10 @@ // //===----------------------------------------------------------------------===// -// Test the CityHash implementation is correct. - // UNSUPPORTED: c++03 +// Test that the CityHash implementation is correct. +// // In ABI v1, our CityHash implementation is incorrect and fixing it would // be an ABI break. // REQUIRES: libcpp-abi-version=2