-
-
Save anonymous/3e7d978c32a169a8f4a6248434b7d11c to your computer and use it in GitHub Desktop.
#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); | |
} |
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%
Sad to see you go. Very nice work though and very clean code
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?