// Copyright Epic Games, Inc. All Rights Reserved. #include #include #include #include namespace zen { XXH3_128 XXH3_128::Zero; // Initialized to all zeros XXH3_128 XXH3_128::FromHexString(const char* InString) { return FromHexString({InString, sizeof(XXH3_128::Hash) * 2}); } XXH3_128 XXH3_128::FromHexString(std::string_view InString) { ZEN_ASSERT(InString.size() == 2 * sizeof(XXH3_128::Hash)); XXH3_128 Xx; ParseHexBytes(InString.data(), InString.size(), Xx.Hash); return Xx; } const char* XXH3_128::ToHexString(char* OutString /* 40 characters + NUL terminator */) const { ToHexBytes(Hash, sizeof(XXH3_128), OutString); OutString[2 * sizeof(XXH3_128)] = '\0'; return OutString; } StringBuilderBase& XXH3_128::ToHexString(StringBuilderBase& OutBuilder) const { String_t str; ToHexString(str); OutBuilder.AppendRange(str, &str[StringLength]); return OutBuilder; } ////////////////////////////////////////////////////////////////////////// // // Unit tests // #if ZEN_WITH_TESTS void xxhash_forcelink() { } TEST_CASE("XXH3_128") { using namespace std::literals; const std::string_view ShortString{"1234"}; const std::string_view LongString{ "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"}; SUBCASE("short_deprecated") { XXH3_128Stream_deprecated x; x.Append(ShortString.data(), ShortString.size()); const XXH3_128 Hash = x.GetHash(); CHECK(Hash == XXH3_128::FromHexString("0d44dd7fde8ea2b4ba961e1a26f71f21"sv)); } SUBCASE("short") { XXH3_128Stream x; x.Append(ShortString.data(), ShortString.size()); const XXH3_128 Hash = x.GetHash(); CHECK(Hash == XXH3_128::FromHexString("9a4dea864648af82823c8c03e6dd2202"sv)); CHECK(Hash == XXH3_128::HashMemory(ShortString.data(), ShortString.size())); } SUBCASE("long") { XXH3_128Stream x; x.Append(LongString.data(), LongString.size()); const XXH3_128 Hash = x.GetHash(); CHECK(Hash == XXH3_128::FromHexString("fbd5e72f7a5894590d1ef49dfcc58b7d"sv)); CHECK(Hash == XXH3_128::HashMemory(LongString.data(), LongString.size())); } } #endif } // namespace zen