Skip to content

Instantly share code, notes, and snippets.

/niahash.c Secret

Created November 5, 2016 04:18
Show Gist options
  • Star 25 You must be signed in to star a gist
  • Fork 34 You must be signed in to fork a gist
  • Save anonymous/3e7d978c32a169a8f4a6248434b7d11c to your computer and use it in GitHub Desktop.
Save anonymous/3e7d978c32a169a8f4a6248434b7d11c to your computer and use it in GitHub Desktop.
niahash c
#include <stdint.h>
#include <string.h>
#define HI(n) ((uint64_t)(n)>>32)
#define LO(n) ((uint64_t)(n)&0xffffffff)
#define U128(high,low) ((__uint128_t)(uint64_t)high<<64 | (uint64_t)low)
#if 1
/* IOS 1.13.3 */
static uint64_t magic_table[16] = {
0x95C05F4D1512959E, 0xE4F3C46EEF0DCF07,
0x6238DC228F980AD2, 0x53F3E3BC49607092,
0x4E7BE7069078D625, 0x1016D709D1AD25FC,
0x044E89B8AC76E045, 0xE0B684DDA364BFA1,
0x90C533B835E89E5F, 0x3DAF462A74FA874F,
0xFEA54965DD3EF5A0, 0x287A5D7CCB31B970,
0xAE681046800752F8, 0x121C2D6EAF66EC6E,
0xEE8F8CA7E090FB20, 0xCE1AE25F48FE0A52,
};
#define ROUND_MAGIC U128(0x78F32468CD48D6DE,0x14C983660183C0AE)
#define FINAL_MAGIC0 0xBDB31B10864F3F87
#define FINAL_MAGIC1 0x5B7E9E828A9B8ABD
#endif
#if 0
/* Android 0.43.4 */
static uint64_t magic_table[16] = {
0x48CD0D725609F95F, 0x25D4A39B5ACB4330,
0x1C0C27978A3649A3, 0x5C7068B9C51C5E4B,
0x69A054CBE1369106, 0x4C318ED6A12B9645,
0xC751EECD2715C836, 0xAAEDCC7A92014B7A,
0xE91DB51D36F47460, 0x78EA4A974D9157B8,
0xE4E65C1A929E8AB1, 0x6BC61BB9C5988769,
0x78C7794B899D8819, 0xB338727B9C7600F7,
0x26BA60FCB9EDC151, 0xE7D74B3CD6293E6B,
};
#define ROUND_MAGIC U128(0x1A32C90D816A2F1F,0x76327D13FD037D57)
#define FINAL_MAGIC0 0x106245053E723AD8
#define FINAL_MAGIC1 0x1CDA65FFA125C8F6
#endif
#if 0
/* Android 0.41.4 */
static uint64_t magic_table[16] = {
0x475BD60F17CE7238, 0xC11B0E0066794E31,
0x75F5BD04F566D70C, 0x09F4F46E7CEC785C,
0x6A52B40820F5EBFF, 0x27F300DB7195A066,
0xBDFDE4DAC75939BF, 0xF7F239CFD77A36AB,
0x7013DEFA151CD579, 0x8864183CFD4C24F9,
0x21C426C79EA1445A, 0xB188FEAE415747BA,
0x127421C8D0BD9352, 0x8C7E6FC0526AD558,
0x7E33F449C404A71A, 0xE955B7D15DE757DC,
};
#define ROUND_MAGIC U128(0x232B242A99C10878,0x667EFDF872801CD8)
#define FINAL_MAGIC0 0xF6AC14F2D12AB0C1
#define FINAL_MAGIC1 0x101FF0340EC93F87
#endif
uint64_t compute_hash(const uint8_t *in, uint32_t len);
static __uint128_t hash_muladd(
__uint128_t hash, __uint128_t mul, __uint128_t add);
static __uint128_t hash_chunk(const uint8_t *chunk, int64_t size);
static uint64_t read_int64(const uint8_t *p);
uint64_t read_int64(const uint8_t *p)
{
// endian-safe read 64-bit integer
uint64_t n = 0;
for (int i = 7; i >= 0; i--) {
n = (n << 8) | p[i];
}
return n;
}
uint64_t compute_hash(const uint8_t *in, uint32_t len)
{
uint32_t num_chunks = len / 128;
// copy tail, pad with zeroes
uint8_t tail[128] = {0};
int tail_size = len % 128;
memcpy(tail, in + len - tail_size, tail_size);
__uint128_t hash;
if (num_chunks) {
// Hash the first 128 bytes
hash = hash_chunk(in, 128);
} else {
// Hash the tail
hash = hash_chunk(tail, tail_size);
}
hash += ROUND_MAGIC;
if (num_chunks) {
while (--num_chunks) {
in += 128;
hash = hash_muladd(hash, ROUND_MAGIC, hash_chunk(in, 128));
}
if (tail_size) {
hash = hash_muladd(hash, ROUND_MAGIC, hash_chunk(tail, tail_size));
}
}
// Finalize the hash
hash += U128(tail_size * 8, 0);
if (hash >= U128(0x7fffffffffffffff,0xffffffffffffffff)) {
hash++;
}
hash = hash << 1 >> 1;
uint64_t hash_high = hash >> 64;
uint64_t hash_low = hash;
uint64_t X = hash_high + HI(hash_low);
X = HI(X + HI(X) + 1) + hash_high;
uint64_t Y = (X << 32) + hash_low;
uint64_t A = X + FINAL_MAGIC0;
if (A < X) {
A += 0x101;
}
uint64_t B = Y + FINAL_MAGIC1;
if (B < Y) {
B += 0x101;
}
__uint128_t H = (__uint128_t) A * B;
H = 0x101 * (H >> 64) + (uint64_t) H;
H = 0x101 * (H >> 64) + (uint64_t) H;
if (H >> 64) {
H += 0x101;
}
if ((uint64_t) H > 0xFFFFFFFFFFFFFEFE) {
H += 0x101;
}
return (uint64_t) H;
}
__uint128_t hash_chunk(const uint8_t *chunk, int64_t size)
{
__uint128_t hash = 0;
for (int i = 0; i < 8; i++) {
int offset = i * 16;
if (offset >= size) {
break;
}
uint64_t a = read_int64(chunk + offset);
uint64_t b = read_int64(chunk + offset + 8);
hash += (__uint128_t) (a + magic_table[i * 2]) *
(__uint128_t) (b + magic_table[i * 2 + 1]);
}
return hash << 2 >> 2;
}
__uint128_t hash_muladd(__uint128_t hash, __uint128_t mul, __uint128_t add)
{
uint64_t a0 = LO(add), a1 = HI(add), a23 = add >> 64;
uint64_t m0 = LO(mul), m1 = HI(mul);
uint64_t m2 = LO(mul >> 64), m3 = HI(mul >> 64);
uint64_t h0 = LO(hash), h1 = HI(hash);
uint64_t h2 = LO(hash >> 64), h3 = HI(hash >> 64);
/* Column sums, before carry */
uint64_t c0 = (h0 * m0);
uint64_t c1 = (h0 * m1) + (h1 * m0);
uint64_t c2 = (h0 * m2) + (h1 * m1) + (h2 * m0);
uint64_t c3 = (h0 * m3) + (h1 * m2) + (h2 * m1) + (h3 * m0);
uint64_t c4 = (h1 * m3) + (h2 * m2) + (h3 * m1);
uint64_t c5 = (h2 * m3) + (h3 * m2);
uint64_t c6 = (h3 * m3);
/* Combine, add, and carry (bugs included) */
uint64_t r2 = c2 + (c6 << 1) + a23;
uint64_t r3 = c3 + HI(r2);
uint64_t r0 = c0 + (c4 << 1) + a0 + (r3 >> 31);
uint64_t r1 = c1 + (c5 << 1) + a1 + HI(r0);
/* Return as uint128_t */
__uint128_t result = ((r3 << 33 >> 1) | LO(r2)) + HI(r1);
return (result << 64) | (r1 << 32) | LO(r0);
}
@rob01786
Copy link

rob01786 commented Nov 5, 2016

Is iT possible to install this on a server for small scale scanning? I read that maybe that should work if so how can I do this?

@arivero
Copy link

arivero commented Nov 5, 2016

SMHasher results for this hash

[[[ Sanity Tests ]]]

Verification value 0xBA44D259 : PASS
Running sanity check 1 ..........PASS
Running AppendedZeroesTest..........PASS

[[[ Speed Tests ]]]

Small key speed test - 1-byte keys - 149.08 cycles/hash
Small key speed test - 2-byte keys - 154.85 cycles/hash
Small key speed test - 3-byte keys - 153.21 cycles/hash
Small key speed test - 4-byte keys - 151.02 cycles/hash
Small key speed test - 5-byte keys - 155.30 cycles/hash
Small key speed test - 6-byte keys - 157.42 cycles/hash
Small key speed test - 7-byte keys - 157.25 cycles/hash
Small key speed test - 8-byte keys - 158.99 cycles/hash
Small key speed test - 9-byte keys - 170.68 cycles/hash
Small key speed test - 10-byte keys - 168.97 cycles/hash
Small key speed test - 11-byte keys - 167.48 cycles/hash
Small key speed test - 12-byte keys - 163.14 cycles/hash
Small key speed test - 13-byte keys - 169.92 cycles/hash
Small key speed test - 14-byte keys - 169.76 cycles/hash
Small key speed test - 15-byte keys - 168.95 cycles/hash
Small key speed test - 16-byte keys - 161.58 cycles/hash
Small key speed test - 17-byte keys - 191.04 cycles/hash
Small key speed test - 18-byte keys - 188.11 cycles/hash
Small key speed test - 19-byte keys - 177.38 cycles/hash
Small key speed test - 20-byte keys - 174.95 cycles/hash
Small key speed test - 21-byte keys - 191.15 cycles/hash
Small key speed test - 22-byte keys - 187.38 cycles/hash
Small key speed test - 23-byte keys - 187.16 cycles/hash
Small key speed test - 24-byte keys - 174.84 cycles/hash
Small key speed test - 25-byte keys - 180.19 cycles/hash
Small key speed test - 26-byte keys - 180.15 cycles/hash
Small key speed test - 27-byte keys - 180.25 cycles/hash
Small key speed test - 28-byte keys - 181.28 cycles/hash
Small key speed test - 29-byte keys - 174.65 cycles/hash
Small key speed test - 30-byte keys - 174.67 cycles/hash
Small key speed test - 31-byte keys - 174.67 cycles/hash
Small key speed test - 32-byte keys - 174.50 cycles/hash
Small key speed test - 33-byte keys - 198.54 cycles/hash
Small key speed test - 34-byte keys - 221.74 cycles/hash
Small key speed test - 35-byte keys - 224.96 cycles/hash
Small key speed test - 36-byte keys - 206.69 cycles/hash
Small key speed test - 37-byte keys - 227.57 cycles/hash
Small key speed test - 38-byte keys - 215.43 cycles/hash
Small key speed test - 39-byte keys - 215.36 cycles/hash
Small key speed test - 40-byte keys - 198.67 cycles/hash
Small key speed test - 41-byte keys - 194.30 cycles/hash
Small key speed test - 42-byte keys - 194.34 cycles/hash
Small key speed test - 43-byte keys - 194.32 cycles/hash
Small key speed test - 44-byte keys - 194.33 cycles/hash
Small key speed test - 45-byte keys - 194.32 cycles/hash
Small key speed test - 46-byte keys - 194.31 cycles/hash
Small key speed test - 47-byte keys - 194.32 cycles/hash
Small key speed test - 48-byte keys - 194.32 cycles/hash
Small key speed test - 49-byte keys - 220.50 cycles/hash
Small key speed test - 50-byte keys - 225.32 cycles/hash
Small key speed test - 51-byte keys - 220.50 cycles/hash
Small key speed test - 52-byte keys - 225.26 cycles/hash
Small key speed test - 53-byte keys - 221.92 cycles/hash
Small key speed test - 54-byte keys - 230.76 cycles/hash
Small key speed test - 55-byte keys - 230.77 cycles/hash
Small key speed test - 56-byte keys - 232.83 cycles/hash
Small key speed test - 57-byte keys - 226.93 cycles/hash
Small key speed test - 58-byte keys - 223.78 cycles/hash
Small key speed test - 59-byte keys - 229.49 cycles/hash
Small key speed test - 60-byte keys - 221.31 cycles/hash
Small key speed test - 61-byte keys - 228.63 cycles/hash
Small key speed test - 62-byte keys - 226.71 cycles/hash
Small key speed test - 63-byte keys - 227.05 cycles/hash
Small key speed test - 64-byte keys - 221.50 cycles/hash
Small key speed test - 65-byte keys - 261.65 cycles/hash
Small key speed test - 66-byte keys - 262.39 cycles/hash
Small key speed test - 67-byte keys - 265.23 cycles/hash
Small key speed test - 68-byte keys - 249.02 cycles/hash
Small key speed test - 69-byte keys - 260.91 cycles/hash
Small key speed test - 70-byte keys - 260.89 cycles/hash
Small key speed test - 71-byte keys - 260.91 cycles/hash
Small key speed test - 72-byte keys - 249.01 cycles/hash
Small key speed test - 73-byte keys - 252.19 cycles/hash
Small key speed test - 74-byte keys - 256.47 cycles/hash
Small key speed test - 75-byte keys - 256.74 cycles/hash
Small key speed test - 76-byte keys - 249.26 cycles/hash
Small key speed test - 77-byte keys - 249.40 cycles/hash
Small key speed test - 78-byte keys - 249.40 cycles/hash
Small key speed test - 79-byte keys - 249.40 cycles/hash
Small key speed test - 80-byte keys - 251.92 cycles/hash
Small key speed test - 81-byte keys - 277.68 cycles/hash
Small key speed test - 82-byte keys - 274.56 cycles/hash
Small key speed test - 83-byte keys - 277.77 cycles/hash
Small key speed test - 84-byte keys - 274.55 cycles/hash
Small key speed test - 85-byte keys - 274.56 cycles/hash
Small key speed test - 86-byte keys - 274.57 cycles/hash
Small key speed test - 87-byte keys - 274.58 cycles/hash
Small key speed test - 88-byte keys - 275.32 cycles/hash
Small key speed test - 89-byte keys - 274.56 cycles/hash
Small key speed test - 90-byte keys - 276.42 cycles/hash
Small key speed test - 91-byte keys - 274.56 cycles/hash
Small key speed test - 92-byte keys - 276.39 cycles/hash
Small key speed test - 93-byte keys - 275.26 cycles/hash
Small key speed test - 94-byte keys - 275.33 cycles/hash
Small key speed test - 95-byte keys - 275.26 cycles/hash
Small key speed test - 96-byte keys - 276.85 cycles/hash
Small key speed test - 97-byte keys - 299.78 cycles/hash
Small key speed test - 98-byte keys - 299.78 cycles/hash
Small key speed test - 99-byte keys - 298.50 cycles/hash
Small key speed test - 100-byte keys - 299.79 cycles/hash
Small key speed test - 101-byte keys - 296.50 cycles/hash
Small key speed test - 102-byte keys - 296.74 cycles/hash
Small key speed test - 103-byte keys - 296.51 cycles/hash
Small key speed test - 104-byte keys - 299.78 cycles/hash
Small key speed test - 105-byte keys - 298.33 cycles/hash
Small key speed test - 106-byte keys - 294.99 cycles/hash
Small key speed test - 107-byte keys - 298.46 cycles/hash
Small key speed test - 108-byte keys - 294.94 cycles/hash
Small key speed test - 109-byte keys - 297.39 cycles/hash
Small key speed test - 110-byte keys - 297.90 cycles/hash
Small key speed test - 111-byte keys - 297.52 cycles/hash
Small key speed test - 112-byte keys - 298.86 cycles/hash
Small key speed test - 113-byte keys - 324.88 cycles/hash
Small key speed test - 114-byte keys - 324.18 cycles/hash
Small key speed test - 115-byte keys - 325.03 cycles/hash
Small key speed test - 116-byte keys - 324.18 cycles/hash
Small key speed test - 117-byte keys - 324.22 cycles/hash
Small key speed test - 118-byte keys - 324.20 cycles/hash
Small key speed test - 119-byte keys - 324.21 cycles/hash
Small key speed test - 120-byte keys - 324.19 cycles/hash
Small key speed test - 121-byte keys - 322.62 cycles/hash
Small key speed test - 122-byte keys - 318.72 cycles/hash
Small key speed test - 123-byte keys - 322.54 cycles/hash
Small key speed test - 124-byte keys - 320.49 cycles/hash
Small key speed test - 125-byte keys - 319.62 cycles/hash
Small key speed test - 126-byte keys - 323.28 cycles/hash
Small key speed test - 127-byte keys - 334.99 cycles/hash
Small key speed test - 128-byte keys - 302.38 cycles/hash
Small key speed test - 129-byte keys - 369.42 cycles/hash
Small key speed test - 130-byte keys - 369.42 cycles/hash
Small key speed test - 131-byte keys - 381.69 cycles/hash
Small key speed test - 132-byte keys - 382.04 cycles/hash
Small key speed test - 133-byte keys - 379.56 cycles/hash
Small key speed test - 134-byte keys - 368.19 cycles/hash
Small key speed test - 135-byte keys - 368.20 cycles/hash
Small key speed test - 136-byte keys - 369.42 cycles/hash
Small key speed test - 137-byte keys - 368.13 cycles/hash
Small key speed test - 138-byte keys - 368.27 cycles/hash
Small key speed test - 139-byte keys - 368.12 cycles/hash
Small key speed test - 140-byte keys - 368.28 cycles/hash
Small key speed test - 141-byte keys - 368.17 cycles/hash
Small key speed test - 142-byte keys - 368.16 cycles/hash
Small key speed test - 143-byte keys - 368.16 cycles/hash
Small key speed test - 144-byte keys - 368.12 cycles/hash
Small key speed test - 145-byte keys - 389.77 cycles/hash
Small key speed test - 146-byte keys - 389.73 cycles/hash
Small key speed test - 147-byte keys - 389.77 cycles/hash
Small key speed test - 148-byte keys - 389.73 cycles/hash
Small key speed test - 149-byte keys - 389.68 cycles/hash
Small key speed test - 150-byte keys - 403.86 cycles/hash
Small key speed test - 151-byte keys - 407.99 cycles/hash
Small key speed test - 152-byte keys - 396.73 cycles/hash
Small key speed test - 153-byte keys - 407.28 cycles/hash
Small key speed test - 154-byte keys - 396.48 cycles/hash
Small key speed test - 155-byte keys - 396.77 cycles/hash
Small key speed test - 156-byte keys - 396.49 cycles/hash
Small key speed test - 157-byte keys - 396.88 cycles/hash
Small key speed test - 158-byte keys - 396.89 cycles/hash
Small key speed test - 159-byte keys - 396.86 cycles/hash
Small key speed test - 160-byte keys - 405.99 cycles/hash
Small key speed test - 161-byte keys - 415.82 cycles/hash
Small key speed test - 162-byte keys - 428.56 cycles/hash
Small key speed test - 163-byte keys - 428.56 cycles/hash
Small key speed test - 164-byte keys - 415.83 cycles/hash
Small key speed test - 165-byte keys - 428.57 cycles/hash
Small key speed test - 166-byte keys - 434.50 cycles/hash
Small key speed test - 167-byte keys - 428.56 cycles/hash
Small key speed test - 168-byte keys - 415.86 cycles/hash
Small key speed test - 169-byte keys - 420.15 cycles/hash
Small key speed test - 170-byte keys - 420.14 cycles/hash
Small key speed test - 171-byte keys - 420.15 cycles/hash
Small key speed test - 172-byte keys - 420.13 cycles/hash
Small key speed test - 173-byte keys - 420.04 cycles/hash
Small key speed test - 174-byte keys - 430.13 cycles/hash
Small key speed test - 175-byte keys - 427.57 cycles/hash
Small key speed test - 176-byte keys - 431.18 cycles/hash
Small key speed test - 177-byte keys - 450.50 cycles/hash
Small key speed test - 178-byte keys - 459.28 cycles/hash
Small key speed test - 179-byte keys - 450.51 cycles/hash
Small key speed test - 180-byte keys - 456.62 cycles/hash
Small key speed test - 181-byte keys - 450.91 cycles/hash
Small key speed test - 182-byte keys - 458.56 cycles/hash
Small key speed test - 183-byte keys - 451.06 cycles/hash
Small key speed test - 184-byte keys - 462.01 cycles/hash
Small key speed test - 185-byte keys - 461.06 cycles/hash
Small key speed test - 186-byte keys - 444.41 cycles/hash
Small key speed test - 187-byte keys - 444.37 cycles/hash
Small key speed test - 188-byte keys - 443.42 cycles/hash
Small key speed test - 189-byte keys - 443.12 cycles/hash
Small key speed test - 190-byte keys - 446.08 cycles/hash
Small key speed test - 191-byte keys - 443.13 cycles/hash
Small key speed test - 192-byte keys - 458.92 cycles/hash
Small key speed test - 193-byte keys - 502.52 cycles/hash
Small key speed test - 194-byte keys - 496.74 cycles/hash
Small key speed test - 195-byte keys - 497.05 cycles/hash
Small key speed test - 196-byte keys - 489.70 cycles/hash
Small key speed test - 197-byte keys - 491.73 cycles/hash
Small key speed test - 198-byte keys - 491.63 cycles/hash
Small key speed test - 199-byte keys - 491.80 cycles/hash
Small key speed test - 200-byte keys - 477.17 cycles/hash
Small key speed test - 201-byte keys - 477.19 cycles/hash
Small key speed test - 202-byte keys - 477.33 cycles/hash
Small key speed test - 203-byte keys - 477.31 cycles/hash
Small key speed test - 204-byte keys - 484.22 cycles/hash
Small key speed test - 205-byte keys - 477.05 cycles/hash
Small key speed test - 206-byte keys - 477.08 cycles/hash
Small key speed test - 207-byte keys - 477.08 cycles/hash
Small key speed test - 208-byte keys - 504.39 cycles/hash
Small key speed test - 209-byte keys - 523.51 cycles/hash
Small key speed test - 210-byte keys - 517.34 cycles/hash
Small key speed test - 211-byte keys - 516.45 cycles/hash
Small key speed test - 212-byte keys - 517.33 cycles/hash
Small key speed test - 213-byte keys - 507.63 cycles/hash
Small key speed test - 214-byte keys - 516.85 cycles/hash
Small key speed test - 215-byte keys - 516.89 cycles/hash
Small key speed test - 216-byte keys - 536.49 cycles/hash
Small key speed test - 217-byte keys - 530.46 cycles/hash
Small key speed test - 218-byte keys - 524.25 cycles/hash
Small key speed test - 219-byte keys - 507.64 cycles/hash
Small key speed test - 220-byte keys - 516.73 cycles/hash
Small key speed test - 221-byte keys - 512.23 cycles/hash
Small key speed test - 222-byte keys - 511.39 cycles/hash
Small key speed test - 223-byte keys - 511.89 cycles/hash
Small key speed test - 224-byte keys - 504.13 cycles/hash
Small key speed test - 225-byte keys - 534.53 cycles/hash
Small key speed test - 226-byte keys - 535.76 cycles/hash
Small key speed test - 227-byte keys - 537.27 cycles/hash
Small key speed test - 228-byte keys - 518.59 cycles/hash
Small key speed test - 229-byte keys - 535.60 cycles/hash
Small key speed test - 230-byte keys - 542.37 cycles/hash
Small key speed test - 231-byte keys - 535.56 cycles/hash
Small key speed test - 232-byte keys - 518.59 cycles/hash
Small key speed test - 233-byte keys - 540.87 cycles/hash
Small key speed test - 234-byte keys - 537.37 cycles/hash
Small key speed test - 235-byte keys - 534.30 cycles/hash
Small key speed test - 236-byte keys - 537.37 cycles/hash
Small key speed test - 237-byte keys - 537.28 cycles/hash
Small key speed test - 238-byte keys - 537.31 cycles/hash
Small key speed test - 239-byte keys - 537.29 cycles/hash
Small key speed test - 240-byte keys - 533.61 cycles/hash
Small key speed test - 241-byte keys - 555.80 cycles/hash
Small key speed test - 242-byte keys - 556.44 cycles/hash
Small key speed test - 243-byte keys - 555.68 cycles/hash
Small key speed test - 244-byte keys - 556.39 cycles/hash
Small key speed test - 245-byte keys - 556.00 cycles/hash
Small key speed test - 246-byte keys - 556.06 cycles/hash
Small key speed test - 247-byte keys - 555.89 cycles/hash
Small key speed test - 248-byte keys - 562.44 cycles/hash
Small key speed test - 249-byte keys - 557.45 cycles/hash
Small key speed test - 250-byte keys - 568.75 cycles/hash
Small key speed test - 251-byte keys - 569.39 cycles/hash
Small key speed test - 252-byte keys - 564.82 cycles/hash
Small key speed test - 253-byte keys - 566.23 cycles/hash
Small key speed test - 254-byte keys - 562.47 cycles/hash
Small key speed test - 255-byte keys - 562.34 cycles/hash
Small key speed test - 256-byte keys - 521.76 cycles/hash
Small key speed test - 257-byte keys - 586.58 cycles/hash
Small key speed test - 258-byte keys - 586.58 cycles/hash
Small key speed test - 259-byte keys - 606.59 cycles/hash
Small key speed test - 260-byte keys - 586.58 cycles/hash
Small key speed test - 261-byte keys - 606.90 cycles/hash
Small key speed test - 262-byte keys - 606.90 cycles/hash
Small key speed test - 263-byte keys - 606.89 cycles/hash
Small key speed test - 264-byte keys - 586.61 cycles/hash
Small key speed test - 265-byte keys - 606.96 cycles/hash
Small key speed test - 266-byte keys - 606.98 cycles/hash
Small key speed test - 267-byte keys - 606.72 cycles/hash
Small key speed test - 268-byte keys - 619.51 cycles/hash
Small key speed test - 269-byte keys - 606.84 cycles/hash
Small key speed test - 270-byte keys - 606.88 cycles/hash
Small key speed test - 271-byte keys - 614.62 cycles/hash
Small key speed test - 272-byte keys - 605.99 cycles/hash
Small key speed test - 273-byte keys - 620.18 cycles/hash
Small key speed test - 274-byte keys - 614.70 cycles/hash
Small key speed test - 275-byte keys - 608.50 cycles/hash
Small key speed test - 276-byte keys - 614.71 cycles/hash
Small key speed test - 277-byte keys - 631.91 cycles/hash
Small key speed test - 278-byte keys - 627.68 cycles/hash
Small key speed test - 279-byte keys - 627.73 cycles/hash
Small key speed test - 280-byte keys - 627.98 cycles/hash
Small key speed test - 281-byte keys - 646.56 cycles/hash
Small key speed test - 282-byte keys - 645.12 cycles/hash
Small key speed test - 283-byte keys - 643.32 cycles/hash
Small key speed test - 284-byte keys - 630.01 cycles/hash
Small key speed test - 285-byte keys - 630.33 cycles/hash
Small key speed test - 286-byte keys - 630.33 cycles/hash
Small key speed test - 287-byte keys - 653.04 cycles/hash
Small key speed test - 288-byte keys - 638.69 cycles/hash
Small key speed test - 289-byte keys - 667.35 cycles/hash
Small key speed test - 290-byte keys - 669.20 cycles/hash
Small key speed test - 291-byte keys - 660.10 cycles/hash
Small key speed test - 292-byte keys - 658.39 cycles/hash
Small key speed test - 293-byte keys - 660.05 cycles/hash
Small key speed test - 294-byte keys - 667.00 cycles/hash
Small key speed test - 295-byte keys - 667.73 cycles/hash
Small key speed test - 296-byte keys - 659.12 cycles/hash
Small key speed test - 297-byte keys - 653.87 cycles/hash
Small key speed test - 298-byte keys - 653.87 cycles/hash
Small key speed test - 299-byte keys - 653.89 cycles/hash
Small key speed test - 300-byte keys - 653.88 cycles/hash
Small key speed test - 301-byte keys - 653.82 cycles/hash
Small key speed test - 302-byte keys - 653.83 cycles/hash
Small key speed test - 303-byte keys - 671.43 cycles/hash
Small key speed test - 304-byte keys - 669.59 cycles/hash
Small key speed test - 305-byte keys - 685.66 cycles/hash
Small key speed test - 306-byte keys - 690.15 cycles/hash
Small key speed test - 307-byte keys - 669.46 cycles/hash
Small key speed test - 308-byte keys - 692.90 cycles/hash
Small key speed test - 309-byte keys - 677.78 cycles/hash
Small key speed test - 310-byte keys - 686.06 cycles/hash
Small key speed test - 311-byte keys - 687.74 cycles/hash
Small key speed test - 312-byte keys - 687.16 cycles/hash
Small key speed test - 313-byte keys - 688.18 cycles/hash
Small key speed test - 314-byte keys - 660.66 cycles/hash
Small key speed test - 315-byte keys - 661.25 cycles/hash
Small key speed test - 316-byte keys - 661.09 cycles/hash
Small key speed test - 317-byte keys - 660.98 cycles/hash
Small key speed test - 318-byte keys - 660.98 cycles/hash
Small key speed test - 319-byte keys - 662.04 cycles/hash
Small key speed test - 320-byte keys - 661.09 cycles/hash
Small key speed test - 321-byte keys - 719.08 cycles/hash
Small key speed test - 322-byte keys - 693.67 cycles/hash
Small key speed test - 323-byte keys - 711.40 cycles/hash
Small key speed test - 324-byte keys - 702.76 cycles/hash
Small key speed test - 325-byte keys - 709.49 cycles/hash
Small key speed test - 326-byte keys - 709.49 cycles/hash
Small key speed test - 327-byte keys - 709.48 cycles/hash
Small key speed test - 328-byte keys - 704.99 cycles/hash
Small key speed test - 329-byte keys - 695.32 cycles/hash
Small key speed test - 330-byte keys - 697.03 cycles/hash
Small key speed test - 331-byte keys - 695.96 cycles/hash
Small key speed test - 332-byte keys - 695.00 cycles/hash
Small key speed test - 333-byte keys - 695.13 cycles/hash
Small key speed test - 334-byte keys - 695.10 cycles/hash
Small key speed test - 335-byte keys - 695.10 cycles/hash
Small key speed test - 336-byte keys - 704.55 cycles/hash
Small key speed test - 337-byte keys - 738.52 cycles/hash
Small key speed test - 338-byte keys - 748.10 cycles/hash
Small key speed test - 339-byte keys - 738.52 cycles/hash
Small key speed test - 340-byte keys - 747.92 cycles/hash
Small key speed test - 341-byte keys - 725.68 cycles/hash
Small key speed test - 342-byte keys - 738.53 cycles/hash
Small key speed test - 343-byte keys - 738.53 cycles/hash
Small key speed test - 344-byte keys - 738.54 cycles/hash
Small key speed test - 345-byte keys - 722.12 cycles/hash
Small key speed test - 346-byte keys - 722.13 cycles/hash
Small key speed test - 347-byte keys - 722.12 cycles/hash
Small key speed test - 348-byte keys - 731.67 cycles/hash
Small key speed test - 349-byte keys - 741.58 cycles/hash
Small key speed test - 350-byte keys - 722.14 cycles/hash
Small key speed test - 351-byte keys - 741.72 cycles/hash
Small key speed test - 352-byte keys - 751.98 cycles/hash
Small key speed test - 353-byte keys - 765.88 cycles/hash
Small key speed test - 354-byte keys - 765.23 cycles/hash
Small key speed test - 355-byte keys - 777.41 cycles/hash
Small key speed test - 356-byte keys - 767.40 cycles/hash
Small key speed test - 357-byte keys - 779.46 cycles/hash
Small key speed test - 358-byte keys - 776.80 cycles/hash
Small key speed test - 359-byte keys - 779.99 cycles/hash
Small key speed test - 360-byte keys - 767.15 cycles/hash
Small key speed test - 361-byte keys - 778.79 cycles/hash
Small key speed test - 362-byte keys - 778.72 cycles/hash
Small key speed test - 363-byte keys - 777.75 cycles/hash
Small key speed test - 364-byte keys - 778.30 cycles/hash
Small key speed test - 365-byte keys - 778.77 cycles/hash
Small key speed test - 366-byte keys - 780.83 cycles/hash
Small key speed test - 367-byte keys - 761.74 cycles/hash
Small key speed test - 368-byte keys - 746.75 cycles/hash
Small key speed test - 369-byte keys - 784.58 cycles/hash
Small key speed test - 370-byte keys - 788.76 cycles/hash
Small key speed test - 371-byte keys - 806.66 cycles/hash
Small key speed test - 372-byte keys - 808.79 cycles/hash
Small key speed test - 373-byte keys - 810.58 cycles/hash
Small key speed test - 374-byte keys - 811.08 cycles/hash
Small key speed test - 375-byte keys - 811.43 cycles/hash
Small key speed test - 376-byte keys - 810.44 cycles/hash
Small key speed test - 377-byte keys - 795.78 cycles/hash
Small key speed test - 378-byte keys - 795.26 cycles/hash
Small key speed test - 379-byte keys - 771.92 cycles/hash
Small key speed test - 380-byte keys - 775.99 cycles/hash
Small key speed test - 381-byte keys - 790.55 cycles/hash
Small key speed test - 382-byte keys - 776.51 cycles/hash
Small key speed test - 383-byte keys - 785.72 cycles/hash
Small key speed test - 384-byte keys - 734.56 cycles/hash
Small key speed test - 385-byte keys - 804.06 cycles/hash
Small key speed test - 386-byte keys - 817.33 cycles/hash
Small key speed test - 387-byte keys - 811.24 cycles/hash
Small key speed test - 388-byte keys - 800.83 cycles/hash
Small key speed test - 389-byte keys - 819.49 cycles/hash
Small key speed test - 390-byte keys - 832.13 cycles/hash
Small key speed test - 391-byte keys - 811.26 cycles/hash
Small key speed test - 392-byte keys - 815.15 cycles/hash
Small key speed test - 393-byte keys - 840.02 cycles/hash
Small key speed test - 394-byte keys - 825.83 cycles/hash
Small key speed test - 395-byte keys - 811.31 cycles/hash
Small key speed test - 396-byte keys - 839.47 cycles/hash
Small key speed test - 397-byte keys - 844.30 cycles/hash
Small key speed test - 398-byte keys - 832.08 cycles/hash
Small key speed test - 399-byte keys - 818.68 cycles/hash
Small key speed test - 400-byte keys - 814.76 cycles/hash
Small key speed test - 401-byte keys - 842.09 cycles/hash
Small key speed test - 402-byte keys - 839.49 cycles/hash
Small key speed test - 403-byte keys - 865.58 cycles/hash
Small key speed test - 404-byte keys - 854.91 cycles/hash
Small key speed test - 405-byte keys - 842.67 cycles/hash
Small key speed test - 406-byte keys - 824.19 cycles/hash
Small key speed test - 407-byte keys - 827.08 cycles/hash
Small key speed test - 408-byte keys - 842.17 cycles/hash
Small key speed test - 409-byte keys - 830.39 cycles/hash
Small key speed test - 410-byte keys - 829.50 cycles/hash
Small key speed test - 411-byte keys - 830.27 cycles/hash
Small key speed test - 412-byte keys - 829.36 cycles/hash
Small key speed test - 413-byte keys - 830.39 cycles/hash
Small key speed test - 414-byte keys - 832.92 cycles/hash
Small key speed test - 415-byte keys - 830.38 cycles/hash
Small key speed test - 416-byte keys - 829.22 cycles/hash
Small key speed test - 417-byte keys - 847.25 cycles/hash
Small key speed test - 418-byte keys - 860.54 cycles/hash
Small key speed test - 419-byte keys - 860.65 cycles/hash
Small key speed test - 420-byte keys - 847.28 cycles/hash
Small key speed test - 421-byte keys - 861.06 cycles/hash
Small key speed test - 422-byte keys - 861.06 cycles/hash
Small key speed test - 423-byte keys - 861.06 cycles/hash
Small key speed test - 424-byte keys - 847.32 cycles/hash
Small key speed test - 425-byte keys - 868.21 cycles/hash
Small key speed test - 426-byte keys - 867.16 cycles/hash
Small key speed test - 427-byte keys - 868.18 cycles/hash
Small key speed test - 428-byte keys - 867.19 cycles/hash
Small key speed test - 429-byte keys - 880.05 cycles/hash
Small key speed test - 430-byte keys - 881.83 cycles/hash
Small key speed test - 431-byte keys - 880.15 cycles/hash
Small key speed test - 432-byte keys - 867.44 cycles/hash
Small key speed test - 433-byte keys - 889.80 cycles/hash
Small key speed test - 434-byte keys - 883.37 cycles/hash
Small key speed test - 435-byte keys - 874.57 cycles/hash
Small key speed test - 436-byte keys - 883.36 cycles/hash
Small key speed test - 437-byte keys - 869.98 cycles/hash
Small key speed test - 438-byte keys - 892.72 cycles/hash
Small key speed test - 439-byte keys - 910.32 cycles/hash
Small key speed test - 440-byte keys - 898.36 cycles/hash
Small key speed test - 441-byte keys - 882.91 cycles/hash
Small key speed test - 442-byte keys - 872.56 cycles/hash
Small key speed test - 443-byte keys - 883.27 cycles/hash
Small key speed test - 444-byte keys - 884.06 cycles/hash
Small key speed test - 445-byte keys - 891.07 cycles/hash
Small key speed test - 446-byte keys - 889.30 cycles/hash
Small key speed test - 447-byte keys - 891.46 cycles/hash
Small key speed test - 448-byte keys - 885.64 cycles/hash
Small key speed test - 449-byte keys - 925.49 cycles/hash
Average 523.794 cycles/hash

Bulk speed test - 262144-byte keys
Alignment 7 - 0.592 bytes/cycle - 1693.03 MiB/sec @ 3 ghz
Alignment 6 - 0.592 bytes/cycle - 1692.74 MiB/sec @ 3 ghz
Alignment 5 - 0.592 bytes/cycle - 1693.45 MiB/sec @ 3 ghz
Alignment 4 - 0.582 bytes/cycle - 1664.13 MiB/sec @ 3 ghz
Alignment 3 - 0.584 bytes/cycle - 1669.95 MiB/sec @ 3 ghz
Alignment 2 - 0.585 bytes/cycle - 1672.90 MiB/sec @ 3 ghz
Alignment 1 - 0.592 bytes/cycle - 1693.21 MiB/sec @ 3 ghz
Alignment 0 - 0.589 bytes/cycle - 1683.74 MiB/sec @ 3 ghz
Average - 0.588 bytes/cycle - 1682.89 MiB/sec @ 3 ghz

[[[ Differential Tests ]]]

Testing 8303632 up-to-5-bit differentials in 64-bit keys -> 64 bit hashes.
1000 reps, 8303632000 total tests, expecting 0.00 random collisions..........
0 total collisions, of which 0 single collisions were ignored

Testing 11017632 up-to-4-bit differentials in 128-bit keys -> 64 bit hashes.
1000 reps, 11017632000 total tests, expecting 0.00 random collisions..........
0 total collisions, of which 0 single collisions were ignored

Testing 2796416 up-to-3-bit differentials in 256-bit keys -> 64 bit hashes.
1000 reps, 2796416000 total tests, expecting 0.00 random collisions..........
0 total collisions, of which 0 single collisions were ignored

[[[ Avalanche Tests ]]]

Testing 32-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.600000%
Testing 40-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.645333%
Testing 48-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.623333%
Testing 56-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.659333%
Testing 64-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.805333%
Testing 72-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.702000%
Testing 80-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.812667%
Testing 88-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.736667%
Testing 96-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.842667%
Testing 104-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.756000%
Testing 112-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.785333%
Testing 120-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.644667%
Testing 128-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.734667%
Testing 136-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.638667%
Testing 144-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.737333%
Testing 152-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 0.652000%

[[[ Keyset 'Cyclic' Tests ]]]

Keyset 'Cyclic' - 8 cycles of 8 bytes - 10000000 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 19-bit window at bit 60 - 0.025%

Keyset 'Cyclic' - 8 cycles of 9 bytes - 10000000 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 11 - 0.041%

Keyset 'Cyclic' - 8 cycles of 10 bytes - 10000000 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 53 - 0.029%

Keyset 'Cyclic' - 8 cycles of 11 bytes - 10000000 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 22 - 0.035%

Keyset 'Cyclic' - 8 cycles of 12 bytes - 10000000 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 20 - 0.041%

[[[ Keyset 'TwoBytes' Tests ]]]

Keyset 'TwoBytes' - up-to-4-byte keys, 652545 total keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 16-bit window at bit 9 - 0.115%

Keyset 'TwoBytes' - up-to-8-byte keys, 5471025 total keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 5 - 0.074%

Keyset 'TwoBytes' - up-to-12-byte keys, 18616785 total keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 5 - 0.015%

Keyset 'TwoBytes' - up-to-16-byte keys, 44251425 total keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 28 - 0.007%

Keyset 'TwoBytes' - up-to-20-byte keys, 86536545 total keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 31 - 0.002%

[[[ Keyset 'Sparse' Tests ]]]

Keyset 'Sparse' - 32-bit keys with up to 6 bits set - 1149017 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 17-bit window at bit 51 - 0.104%

Keyset 'Sparse' - 40-bit keys with up to 6 bits set - 4598479 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 19-bit window at bit 52 - 0.038%

Keyset 'Sparse' - 48-bit keys with up to 5 bits set - 1925357 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 18-bit window at bit 0 - 0.099%

Keyset 'Sparse' - 56-bit keys with up to 5 bits set - 4216423 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 19-bit window at bit 59 - 0.056%

Keyset 'Sparse' - 64-bit keys with up to 5 bits set - 8303633 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 32 - 0.033%

Keyset 'Sparse' - 96-bit keys with up to 4 bits set - 3469497 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 19-bit window at bit 17 - 0.065%

Keyset 'Sparse' - 256-bit keys with up to 3 bits set - 2796417 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 19-bit window at bit 4 - 0.061%

Keyset 'Sparse' - 2048-bit keys with up to 2 bits set - 2098177 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 18-bit window at bit 24 - 0.099%

[[[ Keyset 'Combination Lowbits' Tests ]]]

Keyset 'Combination' - up to 8 blocks from a set of 8 - 19173960 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 27 - 0.025%

[[[ Keyset 'Combination Highbits' Tests ]]]

Keyset 'Combination' - up to 8 blocks from a set of 8 - 19173960 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 26 - 0.017%

[[[ Keyset 'Combination 0x8000000' Tests ]]]

Keyset 'Combination' - up to 20 blocks from a set of 2 - 2097150 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 18-bit window at bit 0 - 0.076%

[[[ Keyset 'Combination 0x0000001' Tests ]]]

Keyset 'Combination' - up to 20 blocks from a set of 2 - 2097150 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 18-bit window at bit 21 - 0.120%

[[[ Keyset 'Combination Hi-Lo' Tests ]]]

Keyset 'Combination' - up to 6 blocks from a set of 15 - 12204240 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 33 - 0.036%

[[[ Keyset 'Window' Tests ]]]

Keyset 'Windowed' - 128-bit key, 20-bit window - 128 tests, 1048576 keys per test
Window at 0 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 1 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 2 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 3 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 4 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 5 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 6 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 7 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 8 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 9 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 10 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 11 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 12 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 13 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 14 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 15 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 16 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 17 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 18 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 19 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 20 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 21 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 22 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 23 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 24 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 25 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 26 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 27 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 28 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 29 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 30 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 31 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 32 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 33 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 34 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 35 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 36 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 37 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 38 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 39 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 40 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 41 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 42 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 43 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 44 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 45 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 46 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 47 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 48 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 49 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 50 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 51 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 52 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 53 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 54 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 55 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 56 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 57 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 58 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 59 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 60 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 61 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 62 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 63 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 64 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 65 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 66 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 67 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 68 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 69 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 70 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 71 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 72 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 73 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 74 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 75 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 76 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 77 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 78 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 79 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 80 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 81 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 82 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 83 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 84 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 85 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 86 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 87 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 88 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 89 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 90 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 91 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 92 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 93 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 94 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 95 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 96 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 97 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 98 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 99 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 100 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 101 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 102 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 103 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 104 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 105 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 106 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 107 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 108 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 109 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 110 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 111 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 112 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 113 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 114 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 115 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 116 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 117 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 118 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 119 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 120 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 121 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 122 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 123 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 124 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 125 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 126 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 127 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Window at 128 - Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)

[[[ Keyset 'Text' Tests ]]]

Keyset 'Text' - keys of form "Foo[XXXX]Bar" - 14776336 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 59 - 0.019%

Keyset 'Text' - keys of form "FooBar[XXXX]" - 14776336 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 30 - 0.020%

Keyset 'Text' - keys of form "[XXXX]FooBar" - 14776336 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 20-bit window at bit 17 - 0.026%

[[[ Keyset 'Zeroes' Tests ]]]

Keyset 'Zeroes' - 65536 keys
Testing collisions - Expected 0.00, actual 0.00 ( 0.00x)
Testing distribution - Worst bias is the 13-bit window at bit 30 - 0.547%

@Ekultek
Copy link

Ekultek commented Nov 5, 2016

Sad to see you go. Very nice work though and very clean code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment