Merge pull request #1764 from Kelimion/xxh3_tests

[xxhash] For the streaming tests, randomly select the size to use.
This commit is contained in:
Jeroen van Rijn
2022-05-02 19:30:40 +02:00
committed by GitHub
2 changed files with 26 additions and 6 deletions

View File

@@ -211,7 +211,9 @@ XXH3_update :: #force_inline proc(
length := len(input)
secret := state.custom_secret[:] if len(state.external_secret) == 0 else state.external_secret[:]
assert(len(input) > 0)
if len(input) == 0 {
return
}
state.total_length += u64(length)
assert(state.buffered_size <= XXH3_INTERNAL_BUFFER_SIZE)

View File

@@ -6,6 +6,8 @@ import "core:time"
import "core:testing"
import "core:fmt"
import "core:os"
import "core:math/rand"
import "core:intrinsics"
TEST_count := 0
TEST_fail := 0
@@ -202,6 +204,8 @@ test_xxhash_large :: proc(t: ^testing.T) {
for i, v in ZERO_VECTORS {
b := many_zeroes[:i]
fmt.printf("[test_xxhash_large] All at once. Size: %v\n", i)
xxh32 := xxhash.XXH32(b)
xxh64 := xxhash.XXH64(b)
xxh3_64 := xxhash.XXH3_64(b)
@@ -218,12 +222,25 @@ test_xxhash_large :: proc(t: ^testing.T) {
expect(t, xxh3_128 == v.xxh3_128, xxh3_128_error)
}
when #config(RAND_STATE, -1) >= 0 && #config(RAND_INC, -1) >= 0 {
random_seed := rand.Rand{
state = u64(#config(RAND_STATE, -1)),
inc = u64(#config(RAND_INC, -1)),
}
fmt.printf("Using user-selected seed {{%v,%v}} for update size randomness.\n", random_seed.state, random_seed.inc)
} else {
random_seed := rand.create(u64(intrinsics.read_cycle_counter()))
fmt.printf("Randonly selected seed {{%v,%v}} for update size randomness.\n", random_seed.state, random_seed.inc)
}
// Streamed
for i, v in ZERO_VECTORS {
b := many_zeroes[:i]
bytes_per_update := []int{1, 42, 13, 7, 16, 5, 23, 74, 1024, 511, 1023, 47}
update_size_idx: int
fmt.printf("[test_xxhash_large] Streamed. Size: %v\n", i)
// bytes_per_update := []int{1, 42, 13, 7, 16, 5, 23, 74, 1024, 511, 1023, 47}
// update_size_idx: int
xxh_32_state, xxh_32_err := xxhash.XXH32_create_state()
defer xxhash.XXH32_destroy_state(xxh_32_state)
@@ -244,9 +261,10 @@ test_xxhash_large :: proc(t: ^testing.T) {
// XXH3_128_update
for len(b) > 0 {
update_size := min(len(b), bytes_per_update[update_size_idx % len(bytes_per_update)])
update_size_idx += 1
update_size := min(len(b), rand.int_max(8192, &random_seed))
if update_size > 4096 {
update_size %= 73
}
xxhash.XXH32_update (xxh_32_state, b[:update_size])
xxhash.XXH64_update (xxh_64_state, b[:update_size])