1//===- llvm/unittest/Support/xxhashTest.cpp -------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "llvm/Support/xxhash.h"
10#include "gtest/gtest.h"
11
12using namespace llvm;
13
14TEST(xxhashTest, Basic) {
15 EXPECT_EQ(0xef46db3751d8e999U, xxHash64(StringRef()));
16 EXPECT_EQ(0x33bf00a859c4ba3fU, xxHash64("foo"));
17 EXPECT_EQ(0x48a37c90ad27a659U, xxHash64("bar"));
18 EXPECT_EQ(0x69196c1b3af0bff9U,
19 xxHash64("0123456789abcdefghijklmnopqrstuvwxyz"));
20}
21
22TEST(xxhashTest, xxh3) {
23 constexpr size_t size = 2243;
24 uint8_t a[size];
25 uint64_t x = 1;
26 for (size_t i = 0; i < size; ++i) {
27 x ^= x << 13;
28 x ^= x >> 7;
29 x ^= x << 17;
30 a[i] = uint8_t(x);
31 }
32
33#define F(len, expected) \
34 EXPECT_EQ(uint64_t(expected), xxh3_64bits(ArrayRef(a, size_t(len))))
35 F(0, 0x2d06800538d394c2);
36 F(1, 0xd0d496e05c553485);
37 F(2, 0x84d625edb7055eac);
38 F(3, 0x6ea2d59aca5c3778);
39 F(4, 0xbf65290914e80242);
40 F(5, 0xc01fd099ad4fc8e4);
41 F(6, 0x9e3ea8187399caa5);
42 F(7, 0x9da8b60540644f5a);
43 F(8, 0xabc1413da6cd0209);
44 F(9, 0x8bc89400bfed51f6);
45 F(16, 0x7e46916754d7c9b8);
46 F(17, 0xed4be912ba5f836d);
47 F(32, 0xf59b59b58c304fd1);
48 F(33, 0x9013fb74ca603e0c);
49 F(64, 0xfa5271fcce0db1c3);
50 F(65, 0x79c42431727f1012);
51 F(96, 0x591ee0ddf9c9ccd1);
52 F(97, 0x8ffc6a3111fe19da);
53 F(128, 0x06a146ee9a2da378);
54 F(129, 0xbc7138129bf065da);
55 F(403, 0xcefeb3ffa532ad8c);
56 F(512, 0xcdfa6b6268e3650f);
57 F(513, 0x4bb5d42742f9765f);
58 F(2048, 0x330ce110cbb79eae);
59 F(2049, 0x3ba6afa0249fef9a);
60 F(2240, 0xd61d4d2a94e926a8);
61 F(2243, 0x0979f786a24edde7);
62#undef F
63}
64

source code of llvm/unittests/Support/xxhashTest.cpp