CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
126 lines
4.0 KiB
C++
126 lines
4.0 KiB
C++
//===- llvm/unittest/Support/xxhashTest.cpp -------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/xxhash.h"
|
|
#include "llvm/ADT/ArrayRef.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace llvm;
|
|
|
|
/* use #define to make them constant, required for initialization */
|
|
#define PRIME32 2654435761U
|
|
#define PRIME64 11400714785074694797ULL
|
|
|
|
/*
|
|
* Fills a test buffer with pseudorandom data.
|
|
*
|
|
* This is used in the sanity check - its values must not be changed.
|
|
*/
|
|
static void fillTestBuffer(uint8_t *buffer, size_t len) {
|
|
uint64_t byteGen = PRIME32;
|
|
|
|
assert(buffer != NULL);
|
|
|
|
for (size_t i = 0; i < len; i++) {
|
|
buffer[i] = (uint8_t)(byteGen >> 56);
|
|
byteGen *= PRIME64;
|
|
}
|
|
}
|
|
|
|
TEST(xxhashTest, xxh3) {
|
|
constexpr size_t size = 2243;
|
|
uint8_t a[size];
|
|
uint64_t x = 1;
|
|
for (size_t i = 0; i < size; ++i) {
|
|
x ^= x << 13;
|
|
x ^= x >> 7;
|
|
x ^= x << 17;
|
|
a[i] = uint8_t(x);
|
|
}
|
|
|
|
#define F(len, expected) \
|
|
EXPECT_EQ(uint64_t(expected), xxh3_64bits(ArrayRef(a, size_t(len))))
|
|
F(0, 0x2d06800538d394c2);
|
|
F(1, 0xd0d496e05c553485);
|
|
F(2, 0x84d625edb7055eac);
|
|
F(3, 0x6ea2d59aca5c3778);
|
|
F(4, 0xbf65290914e80242);
|
|
F(5, 0xc01fd099ad4fc8e4);
|
|
F(6, 0x9e3ea8187399caa5);
|
|
F(7, 0x9da8b60540644f5a);
|
|
F(8, 0xabc1413da6cd0209);
|
|
F(9, 0x8bc89400bfed51f6);
|
|
F(16, 0x7e46916754d7c9b8);
|
|
F(17, 0xed4be912ba5f836d);
|
|
F(32, 0xf59b59b58c304fd1);
|
|
F(33, 0x9013fb74ca603e0c);
|
|
F(64, 0xfa5271fcce0db1c3);
|
|
F(65, 0x79c42431727f1012);
|
|
F(96, 0x591ee0ddf9c9ccd1);
|
|
F(97, 0x8ffc6a3111fe19da);
|
|
F(128, 0x06a146ee9a2da378);
|
|
F(129, 0xbc7138129bf065da);
|
|
F(403, 0xcefeb3ffa532ad8c);
|
|
F(512, 0xcdfa6b6268e3650f);
|
|
F(513, 0x4bb5d42742f9765f);
|
|
F(2048, 0x330ce110cbb79eae);
|
|
F(2049, 0x3ba6afa0249fef9a);
|
|
F(2240, 0xd61d4d2a94e926a8);
|
|
F(2243, 0x0979f786a24edde7);
|
|
#undef F
|
|
}
|
|
|
|
TEST(xxhashTest, xxh3_128bits) {
|
|
#define SANITY_BUFFER_SIZE 2367
|
|
uint8_t sanityBuffer[SANITY_BUFFER_SIZE];
|
|
|
|
fillTestBuffer(sanityBuffer, sizeof(sanityBuffer));
|
|
|
|
#define F(len, expected) \
|
|
EXPECT_EQ(XXH128_hash_t(expected), \
|
|
xxh3_128bits(ArrayRef(sanityBuffer, size_t(len))))
|
|
|
|
F(0, (XXH128_hash_t{0x6001C324468D497FULL,
|
|
0x99AA06D3014798D8ULL})); /* empty string */
|
|
F(1, (XXH128_hash_t{0xC44BDFF4074EECDBULL,
|
|
0xA6CD5E9392000F6AULL})); /* 1 - 3 */
|
|
F(6, (XXH128_hash_t{0x3E7039BDDA43CFC6ULL,
|
|
0x082AFE0B8162D12AULL})); /* 4 - 8 */
|
|
F(12, (XXH128_hash_t{0x061A192713F69AD9ULL,
|
|
0x6E3EFD8FC7802B18ULL})); /* 9 - 16 */
|
|
F(24, (XXH128_hash_t{0x1E7044D28B1B901DULL,
|
|
0x0CE966E4678D3761ULL})); /* 17 - 32 */
|
|
F(48, (XXH128_hash_t{0xF942219AED80F67BULL,
|
|
0xA002AC4E5478227EULL})); /* 33 - 64 */
|
|
F(81, (XXH128_hash_t{0x5E8BAFB9F95FB803ULL,
|
|
0x4952F58181AB0042ULL})); /* 65 - 96 */
|
|
F(222, (XXH128_hash_t{0xF1AEBD597CEC6B3AULL,
|
|
0x337E09641B948717ULL})); /* 129-240 */
|
|
F(403,
|
|
(XXH128_hash_t{
|
|
0xCDEB804D65C6DEA4ULL,
|
|
0x1B6DE21E332DD73DULL})); /* one block, last stripe is overlapping */
|
|
F(512,
|
|
(XXH128_hash_t{
|
|
0x617E49599013CB6BULL,
|
|
0x18D2D110DCC9BCA1ULL})); /* one block, finishing at stripe boundary */
|
|
F(2048,
|
|
(XXH128_hash_t{
|
|
0xDD59E2C3A5F038E0ULL,
|
|
0xF736557FD47073A5ULL})); /* 2 blocks, finishing at block boundary */
|
|
F(2240,
|
|
(XXH128_hash_t{
|
|
0x6E73A90539CF2948ULL,
|
|
0xCCB134FBFA7CE49DULL})); /* 3 blocks, finishing at stripe boundary */
|
|
F(2367,
|
|
(XXH128_hash_t{
|
|
0xCB37AEB9E5D361EDULL,
|
|
0xE89C0F6FF369B427ULL})); /* 3 blocks, last stripe is overlapping */
|
|
#undef F
|
|
}
|