2026-05-21 23:38:52 +03:00
|
|
|
package util
|
2026-02-23 19:37:05 +00:00
|
|
|
|
|
|
|
|
import (
|
2026-06-15 01:20:30 +03:00
|
|
|
"bytes"
|
|
|
|
|
"fmt"
|
2026-02-23 19:37:05 +00:00
|
|
|
"hash/crc32"
|
2026-06-15 01:20:30 +03:00
|
|
|
"io"
|
|
|
|
|
"os"
|
2026-02-23 19:37:05 +00:00
|
|
|
"testing"
|
2026-06-15 01:20:30 +03:00
|
|
|
|
|
|
|
|
"gordenko.dev/dima/textutil"
|
2026-02-23 19:37:05 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var page = make([]byte, 4096)
|
|
|
|
|
var ieeeTable = crc32.MakeTable(crc32.IEEE)
|
|
|
|
|
|
|
|
|
|
func BenchmarkCRC32C(b *testing.B) {
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
|
crc32.Checksum(page, castagnoliTable)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BenchmarkCRC32IEEE(b *testing.B) {
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
|
crc32.Checksum(page, ieeeTable)
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-06-15 01:20:30 +03:00
|
|
|
|
|
|
|
|
func TestHash(t *testing.T) {
|
|
|
|
|
raw, err := os.ReadFile("../b")
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
buf, err := textutil.ParseHex(string(raw))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fmt.Println(CalculateCRC32(buf))
|
|
|
|
|
|
|
|
|
|
w := bytes.NewBuffer(nil)
|
|
|
|
|
w.Write([]byte{
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, // size (max 9 byte)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
hasher := NewHasher()
|
|
|
|
|
|
|
|
|
|
multi := io.MultiWriter(w, hasher)
|
|
|
|
|
|
|
|
|
|
i := 0
|
|
|
|
|
for i < len(buf) {
|
|
|
|
|
end := i + 50
|
|
|
|
|
if end >= len(buf) {
|
|
|
|
|
end = len(buf)
|
|
|
|
|
}
|
|
|
|
|
multi.Write(buf[i:end])
|
|
|
|
|
i += 50
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fmt.Println(hasher.Sum32())
|
|
|
|
|
}
|