1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
// Copyright Epic Games, Inc. All Rights Reserved.
#include <zencore/xxhash.h>
#include <zencore/string.h>
#include <zencore/testing.h>
#include <gsl/gsl-lite.hpp>
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
|