Files
nodarium/packages/utils/src/fastHash.test.ts
Max Richter 548e445eb7
All checks were successful
Deploy to GitHub Pages / build_site (push) Successful in 2m4s
fix: correctly show hide geometries in geometrypool
2025-12-03 22:59:06 +01:00

55 lines
1.2 KiB
TypeScript

import { test, expect } from 'vitest';
import { fastHashArrayBuffer, fastHashString } from './fastHash';
test('fastHashString doesnt produce clashes', () => {
const hashA = fastHashString('abcdef');
const hashB = fastHashString('abcdeg');
const hashC = fastHashString('abcdeg');
expect(hashA).not.toEqual(hashB);
expect(hashB).toEqual(hashC);
});
test("fastHashArray doesnt product collisions", () => {
const a = new Int32Array(1000);
const hash_a = fastHashArrayBuffer(a);
a[0] = 1;
const hash_b = fastHashArrayBuffer(a);
expect(hash_a).not.toEqual(hash_b);
});
test('fastHashArray is fast(ish) < 20ms', () => {
const a = new Int32Array(10_000);
const t0 = performance.now();
fastHashArrayBuffer(a);
const t1 = performance.now();
a[0] = 1;
fastHashArrayBuffer(a);
const t2 = performance.now();
expect(t1 - t0).toBeLessThan(20);
expect(t2 - t1).toBeLessThan(20);
});
// test if the fastHashArray function is deterministic
test('fastHashArray is deterministic', () => {
const a = new Int32Array(1000);
a[42] = 69;
const b = new Int32Array(1000);
b[42] = 69;
const hashA = fastHashArrayBuffer(a);
const hashB = fastHashArrayBuffer(b);
expect(hashA).toEqual(hashB);
});