| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package core
- import "testing"
- // TestXXH32Vectors 对照 xxHash 参考实现的公开测试向量, 验证纯 Go 实现逐位一致。
- // 这三个向量 (空串/"a"/"abc") 是 xxHash 官方文档与多个独立实现共同引用的标准值。
- func TestXXH32Vectors(t *testing.T) {
- cases := []struct {
- in string
- want uint32
- }{
- {"", 0x02CC5D05},
- {"a", 0x550D7456},
- {"abc", 0x32D153FF},
- }
- for _, c := range cases {
- if got := XXH32([]byte(c.in)); got != c.want {
- t.Errorf("XXH32(%q) = %08x, 想要 %08x", c.in, got, c.want)
- }
- }
- }
- // TestXXH32StripePath 跨 16 字节条纹阈值的输入 (验证四累加器路径与尾部路径的组合),
- // 钉死"同输入必得同值"的确定性 + 单比特雪崩敏感性。
- func TestXXH32StripePath(t *testing.T) {
- long := make([]byte, 4096)
- for i := range long {
- long[i] = byte(i * 7)
- }
- if XXH32(long) != XXH32(long) {
- t.Fatal("XXH32 非确定性")
- }
- b := make([]byte, 4096)
- copy(b, long)
- b[2048] ^= 0x01
- if XXH32(long) == XXH32(b) {
- t.Fatal("单比特翻转未改变 CRC —— 雪崩失效")
- }
- // 4KB 固定输入的回归锚: 算法正确性由上方官方向量背书 (尾部/空输入路径),
- // 此处钉死条纹路径 (>=16B 四累加器) 的实现值, 任何实现漂移立即暴露。
- const ref = 0xC1FF0304
- if got := XXH32(long); got != ref {
- t.Errorf("XXH32(4KB pattern) = %08x, 想要 %08x —— 条纹路径实现漂移", got, ref)
- }
- }
|