UNPKG

salsify-experiences-sdk

Version:

SDK to be used by commerce websites to implement product experiences.

46 lines (41 loc) 1.73 kB
import { murmurHash3 } from '../hash' import { webcrypto } from 'crypto' describe('murmurHash3', () => { test('it hashes', () => { expect(murmurHash3('foo', 0)).toEqual(4138058784) // test suite from https://en.wikipedia.org/wiki/MurmurHash expect(murmurHash3('', 0x00000000)).toEqual(0x00000000) expect(murmurHash3('', 0x00000001)).toEqual(0x514e28b7) expect(murmurHash3('', 0xffffffff)).toEqual(0x81f16f39) expect(murmurHash3('test', 0x00000000)).toEqual(0xba6bd213) expect(murmurHash3('test', 0x9747b28c)).toEqual(0x704b81dc) expect(murmurHash3('Hello, world!', 0x00000000)).toEqual(0xc0363e43) expect(murmurHash3('Hello, world!', 0x9747b28c)).toEqual(0x24884cba) expect(murmurHash3('The quick brown fox jumps over the lazy dog', 0x00000000)).toEqual(0x2e4ff723) expect(murmurHash3('The quick brown fox jumps over the lazy dog', 0x9747b28c)).toEqual(0x2fa826cd) }) test('it produces different hashes for different keys', () => { expect(murmurHash3('foo', 0)).toEqual(4138058784) expect(murmurHash3('bar', 0)).toEqual(1158584717) }) test('it produces different hashes for different seeds', () => { expect(murmurHash3('foo', 0)).toEqual(4138058784) expect(murmurHash3('foo', 1)).toEqual(884891506) }) test('it produces hashes between 0 and 2^32 (exclusive)', () => { let min = Number.MAX_SAFE_INTEGER let max = 0 const iterations = 100000 for (let i = 0; i < iterations; i++) { const hash = murmurHash3(webcrypto.randomUUID(), 0) if (hash < min) { min = hash } if (hash > max) { max = hash } } expect(min).toBeGreaterThan(0) expect(max).toBeLessThan(Math.pow(2, 32)) }) })