rurban / smhasher

Hash function quality and speed tests
https://rurban.github.io/smhasher/
Other
1.85k stars 178 forks source link

Update discohash to v2 #271

Closed o0101 closed 1 year ago

o0101 commented 1 year ago

This solves the compressibility issue and improves the statistical properties. I think it costs some speed (replacing addition with subtraction in the finalization).

o0101 commented 1 year ago

New results:

[100%] Built target SMHasher
-------------------------------------------------------------------------------
--- Testing discohash "DISCoHAsH 64 (was BEBB4185)" GOOD

[[[ Sanity Tests ]]]

Verification value 0xDFBA670C ....... PASS
Running sanity check 1     .......... PASS
Running AppendedZeroesTest .......... PASS

[[[ Speed Tests ]]]

Bulk speed test - 262144-byte keys
Alignment  7 -  3.009 bytes/cycle - 8609.11 MiB/sec @ 3 ghz
Alignment  6 -  2.998 bytes/cycle - 8578.73 MiB/sec @ 3 ghz
Alignment  5 -  3.013 bytes/cycle - 8620.66 MiB/sec @ 3 ghz
Alignment  4 -  3.013 bytes/cycle - 8619.92 MiB/sec @ 3 ghz
Alignment  3 -  3.013 bytes/cycle - 8621.23 MiB/sec @ 3 ghz
Alignment  2 -  3.007 bytes/cycle - 8603.64 MiB/sec @ 3 ghz
Alignment  1 -  3.014 bytes/cycle - 8622.87 MiB/sec @ 3 ghz
Alignment  0 -  3.024 bytes/cycle - 8651.10 MiB/sec @ 3 ghz
Average      -  3.011 bytes/cycle - 8615.91 MiB/sec @ 3 ghz

Small key speed test -    1-byte keys -    96.52 cycles/hash
Small key speed test -    2-byte keys -   102.92 cycles/hash
Small key speed test -    3-byte keys -   109.98 cycles/hash
Small key speed test -    4-byte keys -   122.64 cycles/hash
Small key speed test -    5-byte keys -   130.26 cycles/hash
Small key speed test -    6-byte keys -   136.59 cycles/hash
Small key speed test -    7-byte keys -   155.03 cycles/hash
Small key speed test -    8-byte keys -    89.84 cycles/hash
Small key speed test -    9-byte keys -    91.24 cycles/hash
Small key speed test -   10-byte keys -   102.53 cycles/hash
Small key speed test -   11-byte keys -   116.31 cycles/hash
Small key speed test -   12-byte keys -   123.06 cycles/hash
Small key speed test -   13-byte keys -   134.22 cycles/hash
Small key speed test -   14-byte keys -   144.96 cycles/hash
Small key speed test -   15-byte keys -   150.46 cycles/hash
Small key speed test -   16-byte keys -    94.70 cycles/hash
Small key speed test -   17-byte keys -   126.75 cycles/hash
Small key speed test -   18-byte keys -   136.41 cycles/hash
Small key speed test -   19-byte keys -   150.91 cycles/hash
Small key speed test -   20-byte keys -   157.96 cycles/hash
Small key speed test -   21-byte keys -   170.17 cycles/hash
Small key speed test -   22-byte keys -   184.09 cycles/hash
Small key speed test -   23-byte keys -   191.51 cycles/hash
Small key speed test -   24-byte keys -   117.63 cycles/hash
Small key speed test -   25-byte keys -   124.12 cycles/hash
Small key speed test -   26-byte keys -   131.93 cycles/hash
Small key speed test -   27-byte keys -   135.29 cycles/hash
Small key speed test -   28-byte keys -   150.13 cycles/hash
Small key speed test -   29-byte keys -   153.20 cycles/hash
Small key speed test -   30-byte keys -   154.53 cycles/hash
Small key speed test -   31-byte keys -   172.35 cycles/hash
Average                                    134.136 cycles/hash

[[[ 'Hashmap' Speed Tests ]]]

std::unordered_map
Init std HashMapTest:     215.985 cycles/op (235976 inserts, 1% deletions)
Running std HashMapTest:  191.657 cycles/op (15.0 stdv)

greg7mdp/parallel-hashmap
Init fast HashMapTest:    337.677 cycles/op (235976 inserts, 1% deletions)
Running fast HashMapTest: 199.351 cycles/op (8.1 stdv)  ....... PASS

[[[ Avalanche Tests ]]]

Testing   24-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.698000%
Testing   32-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.617333%
Testing   40-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.721333%
Testing   48-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.684667%
Testing   56-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.711333%
Testing   64-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.612667%
Testing   72-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.796667%
Testing   80-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.730000%
Testing   96-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.732667%
Testing  112-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.802667%
Testing  128-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.694667%
Testing  160-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.701333%
Testing  512-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.842667%
Testing 1024-bit keys ->  64-bit hashes, 300000 reps.......... worst bias is 0.770000%

[[[ Keyset 'Sparse' Tests ]]]

Keyset 'Sparse' - 16-bit keys with up to 9 bits set - 50643 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected          0.3, actual      0 (0.00x)
Testing collisions (high 19-25 bits) - Worst is 19 bits: 2377/2368 (1.00x)
Testing collisions (low  32-bit) - Expected          0.3, actual      0 (0.00x)
Testing collisions (low  19-25 bits) - Worst is 25 bits: 41/38 (1.07x)
Testing distribution - Worst bias is the 13-bit window at bit 30 - 0.440%

Keyset 'Sparse' - 24-bit keys with up to 8 bits set - 1271626 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        188.2, actual    194 (1.03x) (6)
Testing collisions (high 24-35 bits) - Worst is 30 bits: 779/752 (1.03x)
Testing collisions (low  32-bit) - Expected        188.2, actual    176 (0.94x)
Testing collisions (low  24-35 bits) - Worst is 34 bits: 49/47 (1.04x)
Testing distribution - Worst bias is the 17-bit window at bit 44 - 0.102%

Keyset 'Sparse' - 32-bit keys with up to 7 bits set - 4514873 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       2372.2, actual   2301 (0.97x)
Testing collisions (high 25-38 bits) - Worst is 38 bits: 43/37 (1.16x)
Testing collisions (low  32-bit) - Expected       2372.2, actual   2359 (0.99x) (-13)
Testing collisions (low  25-38 bits) - Worst is 38 bits: 39/37 (1.05x)
Testing distribution - Worst bias is the 18-bit window at bit 11 - 0.052%

Keyset 'Sparse' - 40-bit keys with up to 6 bits set - 4598479 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       2460.8, actual   2524 (1.03x) (64)
Testing collisions (high 25-38 bits) - Worst is 37 bits: 90/76 (1.17x)
Testing collisions (low  32-bit) - Expected       2460.8, actual   2442 (0.99x) (-18)
Testing collisions (low  25-38 bits) - Worst is 25 bits: 301286/301185 (1.00x)
Testing distribution - Worst bias is the 19-bit window at bit 60 - 0.057%

Keyset 'Sparse' - 48-bit keys with up to 6 bits set - 14196869 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected      23437.8, actual  23217 (0.99x) (-220)
Testing collisions (high 27-42 bits) - Worst is 41 bits: 51/45 (1.11x)
Testing collisions (low  32-bit) - Expected      23437.8, actual  23394 (1.00x) (-43)
Testing collisions (low  27-42 bits) - Worst is 39 bits: 192/183 (1.05x)
Testing distribution - Worst bias is the 20-bit window at bit  2 - 0.016%

Keyset 'Sparse' - 56-bit keys with up to 5 bits set - 4216423 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       2069.0, actual   2034 (0.98x) (-34)
Testing collisions (high 25-38 bits) - Worst is 37 bits: 67/64 (1.04x)
Testing collisions (low  32-bit) - Expected       2069.0, actual   2087 (1.01x) (19)
Testing collisions (low  25-38 bits) - Worst is 35 bits: 275/258 (1.06x)
Testing distribution - Worst bias is the 19-bit window at bit 46 - 0.041%

Keyset 'Sparse' - 64-bit keys with up to 5 bits set - 8303633 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8021.7, actual   8093 (1.01x) (72)
Testing collisions (high 26-40 bits) - Worst is 39 bits: 75/62 (1.20x)
Testing collisions (low  32-bit) - Expected       8021.7, actual   8075 (1.01x) (54)
Testing collisions (low  26-40 bits) - Worst is 40 bits: 36/31 (1.15x)
Testing distribution - Worst bias is the 20-bit window at bit  0 - 0.037%

Keyset 'Sparse' - 72-bit keys with up to 5 bits set - 15082603 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected      26451.8, actual  26418 (1.00x) (-33)
Testing collisions (high 27-42 bits) - Worst is 42 bits: 32/25 (1.24x)
Testing collisions (low  32-bit) - Expected      26451.8, actual  26383 (1.00x) (-68)
Testing collisions (low  27-42 bits) - Worst is 31 bits: 52870/52841 (1.00x)
Testing distribution - Worst bias is the 20-bit window at bit 23 - 0.020%

Keyset 'Sparse' - 96-bit keys with up to 4 bits set - 3469497 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       1401.0, actual   1409 (1.01x) (9)
Testing collisions (high 25-38 bits) - Worst is 34 bits: 364/350 (1.04x)
Testing collisions (low  32-bit) - Expected       1401.0, actual   1392 (0.99x) (-8)
Testing collisions (low  25-38 bits) - Worst is 38 bits: 23/21 (1.05x)
Testing distribution - Worst bias is the 19-bit window at bit 40 - 0.043%

Keyset 'Sparse' - 160-bit keys with up to 4 bits set - 26977161 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected      84546.1, actual  84745 (1.00x) (199)
Testing collisions (high 28-44 bits) - Worst is 44 bits: 25/20 (1.21x)
Testing collisions (low  32-bit) - Expected      84546.1, actual  84172 (1.00x) (-374)
Testing collisions (low  28-44 bits) - Worst is 44 bits: 24/20 (1.16x)
Testing distribution - Worst bias is the 20-bit window at bit 13 - 0.013%

Keyset 'Sparse' - 256-bit keys with up to 3 bits set - 2796417 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        910.2, actual    951 (1.04x) (41)
Testing collisions (high 25-37 bits) - Worst is 37 bits: 31/28 (1.09x)
Testing collisions (low  32-bit) - Expected        910.2, actual    902 (0.99x) (-8)
Testing collisions (low  25-37 bits) - Worst is 37 bits: 33/28 (1.16x)
Testing distribution - Worst bias is the 19-bit window at bit 35 - 0.074%

Keyset 'Sparse' - 512-bit keys with up to 3 bits set - 22370049 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected      58155.4, actual  57928 (1.00x) (-227)
Testing collisions (high 28-43 bits) - Worst is 42 bits: 60/56 (1.05x)
Testing collisions (low  32-bit) - Expected      58155.4, actual  58676 (1.01x) (521)
Testing collisions (low  28-43 bits) - Worst is 37 bits: 1876/1820 (1.03x)
Testing distribution - Worst bias is the 20-bit window at bit 26 - 0.016%

Keyset 'Sparse' - 1024-bit keys with up to 2 bits set - 524801 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected         32.1, actual     32 (1.00x)
Testing collisions (high 22-32 bits) - Worst is 26 bits: 2101/2046 (1.03x)
Testing collisions (low  32-bit) - Expected         32.1, actual     31 (0.97x)
Testing collisions (low  22-32 bits) - Worst is 23 bits: 16232/16079 (1.01x)
Testing distribution - Worst bias is the 16-bit window at bit  5 - 0.217%

Keyset 'Sparse' - 2048-bit keys with up to 2 bits set - 2098177 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        512.4, actual    513 (1.00x) (1)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 73/64 (1.14x)
Testing collisions (low  32-bit) - Expected        512.4, actual    500 (0.98x)
Testing collisions (low  24-36 bits) - Worst is 30 bits: 2100/2048 (1.03x)
Testing distribution - Worst bias is the 18-bit window at bit 36 - 0.077%

[[[ Keyset 'Permutation' Tests ]]]

Combination Lowbits Tests:
Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        668.6, actual    664 (0.99x) (-4)
Testing collisions (high 24-37 bits) - Worst is 27 bits: 21420/21272 (1.01x)
Testing collisions (low  32-bit) - Expected        668.6, actual    672 (1.01x) (4)
Testing collisions (low  24-37 bits) - Worst is 36 bits: 56/41 (1.34x)
Testing distribution - Worst bias is the 18-bit window at bit 53 - 0.063%

Combination Highbits Tests
Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        668.6, actual    666 (1.00x) (-2)
Testing collisions (high 24-37 bits) - Worst is 35 bits: 90/83 (1.08x)
Testing collisions (low  32-bit) - Expected        668.6, actual    665 (0.99x) (-3)
Testing collisions (low  24-37 bits) - Worst is 36 bits: 51/41 (1.22x)
Testing distribution - Worst bias is the 18-bit window at bit 19 - 0.075%

Combination Hi-Lo Tests:
Keyset 'Combination' - up to 6 blocks from a set of 15 - 12204240 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected      17322.9, actual  17184 (0.99x) (-138)
Testing collisions (high 27-41 bits) - Worst is 41 bits: 44/33 (1.30x)
Testing collisions (low  32-bit) - Expected      17322.9, actual  17408 (1.00x) (86)
Testing collisions (low  27-41 bits) - Worst is 36 bits: 1127/1083 (1.04x)
Testing distribution - Worst bias is the 20-bit window at bit 53 - 0.021%

Combination 0x8000000 Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8115 (0.99x) (-71)
Testing collisions (high 26-40 bits) - Worst is 36 bits: 524/511 (1.02x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8242 (1.01x) (56)
Testing collisions (low  26-40 bits) - Worst is 38 bits: 147/127 (1.15x)
Testing distribution - Worst bias is the 20-bit window at bit 52 - 0.048%

Combination 0x0000001 Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8112 (0.99x) (-74)
Testing collisions (high 26-40 bits) - Worst is 34 bits: 2050/2047 (1.00x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8209 (1.00x) (23)
Testing collisions (low  26-40 bits) - Worst is 40 bits: 46/31 (1.44x)
Testing distribution - Worst bias is the 20-bit window at bit  0 - 0.053%

Combination 0x800000000000000 Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8022 (0.98x)
Testing collisions (high 26-40 bits) - Worst is 40 bits: 32/31 (1.00x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8325 (1.02x) (139)
Testing collisions (low  26-40 bits) - Worst is 35 bits: 1070/1023 (1.05x)
Testing distribution - Worst bias is the 20-bit window at bit 25 - 0.040%

Combination 0x000000000000001 Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8320 (1.02x) (134)
Testing collisions (high 26-40 bits) - Worst is 32 bits: 8320/8186 (1.02x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8298 (1.01x) (112)
Testing collisions (low  26-40 bits) - Worst is 40 bits: 36/31 (1.13x)
Testing distribution - Worst bias is the 19-bit window at bit 20 - 0.031%

Combination 16-bytes [0-1] Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8212 (1.00x) (26)
Testing collisions (high 26-40 bits) - Worst is 40 bits: 42/31 (1.31x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8236 (1.01x) (50)
Testing collisions (low  26-40 bits) - Worst is 35 bits: 1057/1023 (1.03x)
Testing distribution - Worst bias is the 20-bit window at bit 40 - 0.035%

Combination 16-bytes [0-last] Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8237 (1.01x) (51)
Testing collisions (high 26-40 bits) - Worst is 36 bits: 549/511 (1.07x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8069 (0.99x) (-117)
Testing collisions (low  26-40 bits) - Worst is 30 bits: 32799/32682 (1.00x)
Testing distribution - Worst bias is the 20-bit window at bit 26 - 0.027%

Combination 32-bytes [0-1] Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8143 (0.99x) (-43)
Testing collisions (high 26-40 bits) - Worst is 36 bits: 530/511 (1.04x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8136 (0.99x) (-50)
Testing collisions (low  26-40 bits) - Worst is 39 bits: 73/63 (1.14x)
Testing distribution - Worst bias is the 20-bit window at bit 20 - 0.048%

Combination 32-bytes [0-last] Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8242 (1.01x) (56)
Testing collisions (high 26-40 bits) - Worst is 40 bits: 38/31 (1.19x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8292 (1.01x) (106)
Testing collisions (low  26-40 bits) - Worst is 40 bits: 37/31 (1.16x)
Testing distribution - Worst bias is the 20-bit window at bit  9 - 0.036%

Combination 64-bytes [0-1] Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8219 (1.00x) (33)
Testing collisions (high 26-40 bits) - Worst is 39 bits: 71/63 (1.11x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8286 (1.01x) (100)
Testing collisions (low  26-40 bits) - Worst is 38 bits: 139/127 (1.09x)
Testing distribution - Worst bias is the 20-bit window at bit  7 - 0.041%

Combination 64-bytes [0-last] Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8071 (0.99x) (-115)
Testing collisions (high 26-40 bits) - Worst is 28 bits: 129771/129717 (1.00x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8368 (1.02x) (182)
Testing collisions (low  26-40 bits) - Worst is 37 bits: 278/255 (1.09x)
Testing distribution - Worst bias is the 20-bit window at bit 35 - 0.028%

Combination 128-bytes [0-1] Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8285 (1.01x) (99)
Testing collisions (high 26-40 bits) - Worst is 34 bits: 2112/2047 (1.03x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8201 (1.00x) (15)
Testing collisions (low  26-40 bits) - Worst is 38 bits: 145/127 (1.13x)
Testing distribution - Worst bias is the 20-bit window at bit 26 - 0.035%

Combination 128-bytes [0-last] Tests:
Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       8186.7, actual   8256 (1.01x) (70)
Testing collisions (high 26-40 bits) - Worst is 35 bits: 1039/1023 (1.01x)
Testing collisions (low  32-bit) - Expected       8186.7, actual   8268 (1.01x) (82)
Testing collisions (low  26-40 bits) - Worst is 40 bits: 38/31 (1.19x)
Testing distribution - Worst bias is the 20-bit window at bit 46 - 0.065%

[[[ Keyset 'Window' Tests ]]]

Keyset 'Window' -  32-bit key,  25-bit window - 32 tests, 33554432 keys per test
Window at   0 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at   1 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at   2 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at   3 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at   4 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at   5 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at   6 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at   7 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at   8 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at   9 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  10 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  11 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  12 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  13 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  14 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  15 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  16 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  17 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  18 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  19 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  20 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  21 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  22 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  23 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  24 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  25 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  26 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  27 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  28 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  29 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  30 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  31 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Window at  32 - Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)

[[[ Keyset 'Cyclic' Tests ]]]

Keyset 'Cyclic' - 8 cycles of 8 bytes - 1000000 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        116.4, actual     95 (0.82x)
Testing collisions (high 23-34 bits) - Worst is 28 bits: 1912/1860 (1.03x)
Testing collisions (low  32-bit) - Expected        116.4, actual    118 (1.01x) (2)
Testing collisions (low  23-34 bits) - Worst is 33 bits: 61/58 (1.05x)
Testing distribution - Worst bias is the 17-bit window at bit 53 - 0.156%

Keyset 'Cyclic' - 8 cycles of 9 bytes - 1000000 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        116.4, actual    125 (1.07x) (9)
Testing collisions (high 23-34 bits) - Worst is 33 bits: 69/58 (1.19x)
Testing collisions (low  32-bit) - Expected        116.4, actual    122 (1.05x) (6)
Testing collisions (low  23-34 bits) - Worst is 33 bits: 64/58 (1.10x)
Testing distribution - Worst bias is the 17-bit window at bit  6 - 0.158%

Keyset 'Cyclic' - 8 cycles of 10 bytes - 1000000 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        116.4, actual    130 (1.12x) (14)
Testing collisions (high 23-34 bits) - Worst is 32 bits: 130/116 (1.12x)
Testing collisions (low  32-bit) - Expected        116.4, actual    113 (0.97x)
Testing collisions (low  23-34 bits) - Worst is 30 bits: 472/465 (1.01x)
Testing distribution - Worst bias is the 17-bit window at bit 53 - 0.164%

Keyset 'Cyclic' - 8 cycles of 11 bytes - 1000000 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        116.4, actual    110 (0.94x)
Testing collisions (high 23-34 bits) - Worst is 23 bits: 57021/57305 (1.00x)
Testing collisions (low  32-bit) - Expected        116.4, actual    142 (1.22x) (26)
Testing collisions (low  23-34 bits) - Worst is 32 bits: 142/116 (1.22x)
Testing distribution - Worst bias is the 17-bit window at bit 34 - 0.125%

Keyset 'Cyclic' - 8 cycles of 12 bytes - 1000000 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        116.4, actual    118 (1.01x) (2)
Testing collisions (high 23-34 bits) - Worst is 33 bits: 70/58 (1.20x)
Testing collisions (low  32-bit) - Expected        116.4, actual    130 (1.12x) (14)
Testing collisions (low  23-34 bits) - Worst is 32 bits: 130/116 (1.12x)
Testing distribution - Worst bias is the 17-bit window at bit 56 - 0.093%

Keyset 'Cyclic' - 8 cycles of 16 bytes - 1000000 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        116.4, actual    107 (0.92x)
Testing collisions (high 23-34 bits) - Worst is 24 bits: 29318/29218 (1.00x)
Testing collisions (low  32-bit) - Expected        116.4, actual    117 (1.01x) (1)
Testing collisions (low  23-34 bits) - Worst is 31 bits: 235/232 (1.01x)
Testing distribution - Worst bias is the 17-bit window at bit 40 - 0.116%

[[[ Keyset 'TwoBytes' Tests ]]]

Keyset 'TwoBytes' - up-to-4-byte keys, 652545 total keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected         49.6, actual     39 (0.79x)
Testing collisions (high 23-33 bits) - Worst is 25 bits: 6327/6304 (1.00x)
Testing collisions (low  32-bit) - Expected         49.6, actual     50 (1.01x) (1)
Testing collisions (low  23-33 bits) - Worst is 31 bits: 128/99 (1.29x)
Testing distribution - Worst bias is the 16-bit window at bit 45 - 0.141%

Keyset 'TwoBytes' - up-to-8-byte keys, 5471025 total keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       3483.1, actual   3502 (1.01x) (19)
Testing collisions (high 26-39 bits) - Worst is 39 bits: 30/27 (1.10x)
Testing collisions (low  32-bit) - Expected       3483.1, actual   3445 (0.99x) (-38)
Testing collisions (low  26-39 bits) - Worst is 37 bits: 112/108 (1.03x)
Testing distribution - Worst bias is the 20-bit window at bit 39 - 0.057%

Keyset 'TwoBytes' - up-to-12-byte keys, 18616785 total keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected      40289.5, actual  40349 (1.00x) (60)
Testing collisions (high 27-42 bits) - Worst is 42 bits: 59/39 (1.50x)
Testing collisions (low  32-bit) - Expected      40289.5, actual  40425 (1.00x) (136)
Testing collisions (low  27-42 bits) - Worst is 41 bits: 97/78 (1.23x)
Testing distribution - Worst bias is the 20-bit window at bit  4 - 0.017%

Keyset 'TwoBytes' - up-to-16-byte keys, 44251425 total keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected     227182.3, actual 227235 (1.00x) (53)
Testing collisions (high 29-45 bits) - Worst is 45 bits: 37/27 (1.33x)
Testing collisions (low  32-bit) - Expected     227182.3, actual 227152 (1.00x) (-30)
Testing collisions (low  29-45 bits) - Worst is 33 bits: 113821/113786 (1.00x)
Testing distribution - Worst bias is the 19-bit window at bit 54 - 0.005%

Keyset 'TwoBytes' - up-to-20-byte keys, 86536545 total keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected     865959.1, actual 865893 (1.00x) (-66)
Testing collisions (high 30-47 bits) - Worst is 47 bits: 34/26 (1.28x)
Testing collisions (low  32-bit) - Expected     865959.1, actual 865257 (1.00x) (-702)
Testing collisions (low  30-47 bits) - Worst is 30 bits: 3394354/3395316 (1.00x)
Testing distribution - Worst bias is the 19-bit window at bit 25 - 0.002%

[[[ Keyset 'Text' Tests ]]]

Keyset 'Text' - keys of form "FooXXXXBar" - 14776336 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected      25389.0, actual  25606 (1.01x) (217)
Testing collisions (high 27-42 bits) - Worst is 39 bits: 205/198 (1.03x)
Testing collisions (low  32-bit) - Expected      25389.0, actual  25188 (0.99x) (-201)
Testing collisions (low  27-42 bits) - Worst is 29 bits: 201559/201492 (1.00x)
Testing distribution - Worst bias is the 20-bit window at bit  5 - 0.021%

Keyset 'Text' - keys of form "FooBarXXXX" - 14776336 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected      25389.0, actual  25261 (0.99x) (-128)
Testing collisions (high 27-42 bits) - Worst is 42 bits: 28/24 (1.13x)
Testing collisions (low  32-bit) - Expected      25389.0, actual  25174 (0.99x) (-215)
Testing collisions (low  27-42 bits) - Worst is 39 bits: 207/198 (1.04x)
Testing distribution - Worst bias is the 20-bit window at bit 44 - 0.021%

Keyset 'Text' - keys of form "XXXXFooBar" - 14776336 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected      25389.0, actual  25539 (1.01x) (150)
Testing collisions (high 27-42 bits) - Worst is 42 bits: 27/24 (1.09x)
Testing collisions (low  32-bit) - Expected      25389.0, actual  25460 (1.00x) (71)
Testing collisions (low  27-42 bits) - Worst is 40 bits: 104/99 (1.05x)
Testing distribution - Worst bias is the 20-bit window at bit 62 - 0.018%

Keyset 'Words' - 4000000 random keys of len 6-16 from alnum charset
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       1862.1, actual   1925 (1.03x) (63)
Testing collisions (high 25-38 bits) - Worst is 35 bits: 241/232 (1.04x)
Testing collisions (low  32-bit) - Expected       1862.1, actual   1864 (1.00x) (2)
Testing collisions (low  25-38 bits) - Worst is 29 bits: 15027/14864 (1.01x)
Testing distribution - Worst bias is the 19-bit window at bit 18 - 0.077%

Keyset 'Words' - 4000000 random keys of len 6-16 from password charset
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       1862.1, actual   1854 (1.00x) (-8)
Testing collisions (high 25-38 bits) - Worst is 26 bits: 116818/116875 (1.00x)
Testing collisions (low  32-bit) - Expected       1862.1, actual   1912 (1.03x) (50)
Testing collisions (low  25-38 bits) - Worst is 33 bits: 984/931 (1.06x)
Testing distribution - Worst bias is the 19-bit window at bit  0 - 0.052%

Keyset 'Words' - 235976 dict words
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected          6.5, actual      7 (1.08x) (1)
Testing collisions (high 21-30 bits) - Worst is 24 bits: 1707/1651 (1.03x)
Testing collisions (low  32-bit) - Expected          6.5, actual      4 (0.62x)
Testing collisions (low  21-30 bits) - Worst is 30 bits: 29/25 (1.12x)
Testing distribution - Worst bias is the 15-bit window at bit  2 - 0.233%

[[[ Keyset 'Zeroes' Tests ]]]

Keyset 'Zeroes' - 204800 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected          4.9, actual      9 (1.84x) (5)
Testing collisions (high 21-29 bits) - Worst is 29 bits: 54/39 (1.38x)
Testing collisions (low  32-bit) - Expected          4.9, actual      5 (1.02x) (1)
Testing collisions (low  21-29 bits) - Worst is 27 bits: 173/156 (1.11x)
Testing distribution - Worst bias is the 15-bit window at bit 23 - 0.330%

[[[ Keyset 'Seed' Tests ]]]

Keyset 'Seed' - 5000000 keys
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       2909.3, actual   2886 (0.99x) (-23)
Testing collisions (high 26-39 bits) - Worst is 36 bits: 188/181 (1.03x)
Testing collisions (low  32-bit) - Expected       2909.3, actual   2927 (1.01x) (18)
Testing collisions (low  26-39 bits) - Worst is 38 bits: 47/45 (1.03x)
Testing distribution - Worst bias is the 19-bit window at bit 34 - 0.038%

[[[ Keyset 'PerlinNoise' Tests ]]]

Testing 16777216 coordinates (L2) :
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected      32725.4, actual  32715 (1.00x) (-10)
Testing collisions (high 27-42 bits) - Worst is 42 bits: 39/31 (1.22x)
Testing collisions (low  32-bit) - Expected      32725.4, actual  33098 (1.01x) (373)
Testing collisions (low  27-42 bits) - Worst is 41 bits: 81/63 (1.27x)

Testing AV variant, 128 count with 4 spacing, 4-12:
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected       1116.2, actual   1078 (0.97x)
Testing collisions (high 25-37 bits) - Worst is 35 bits: 158/139 (1.13x)
Testing collisions (low  32-bit) - Expected       1116.2, actual   1084 (0.97x)
Testing collisions (low  25-37 bits) - Worst is 33 bits: 559/558 (1.00x)

[[[ Diff '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

[[[ DiffDist 'Differential Distribution' Tests ]]]

Testing bit 0
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    515 (1.01x) (4)
Testing collisions (high 24-36 bits) - Worst is 34 bits: 144/127 (1.13x)
Testing collisions (low  32-bit) - Expected        511.9, actual    524 (1.02x) (13)
Testing collisions (low  24-36 bits) - Worst is 30 bits: 2115/2046 (1.03x)
Testing distribution - Worst bias is the 18-bit window at bit 63 - 0.087%

Testing bit 1
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    510 (1.00x) (-1)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 72/63 (1.13x)
Testing collisions (low  32-bit) - Expected        511.9, actual    490 (0.96x)
Testing collisions (low  24-36 bits) - Worst is 25 bits: 64484/64191 (1.00x)
Testing distribution - Worst bias is the 18-bit window at bit 62 - 0.052%

Testing bit 2
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    551 (1.08x) (40)
Testing collisions (high 24-36 bits) - Worst is 32 bits: 551/511 (1.08x)
Testing collisions (low  32-bit) - Expected        511.9, actual    509 (0.99x) (-2)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 35/31 (1.09x)
Testing distribution - Worst bias is the 18-bit window at bit 59 - 0.079%

Testing bit 3
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    488 (0.95x)
Testing collisions (high 24-36 bits) - Worst is 25 bits: 64168/64191 (1.00x)
Testing collisions (low  32-bit) - Expected        511.9, actual    474 (0.93x)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 33/31 (1.03x)
Testing distribution - Worst bias is the 18-bit window at bit 28 - 0.081%

Testing bit 4
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    509 (0.99x) (-2)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 71/63 (1.11x)
Testing collisions (low  32-bit) - Expected        511.9, actual    534 (1.04x) (23)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 38/31 (1.19x)
Testing distribution - Worst bias is the 18-bit window at bit 52 - 0.066%

Testing bit 5
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    533 (1.04x) (22)
Testing collisions (high 24-36 bits) - Worst is 33 bits: 278/255 (1.09x)
Testing collisions (low  32-bit) - Expected        511.9, actual    545 (1.06x) (34)
Testing collisions (low  24-36 bits) - Worst is 35 bits: 83/63 (1.30x)
Testing distribution - Worst bias is the 18-bit window at bit 13 - 0.066%

Testing bit 6
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    509 (0.99x) (-2)
Testing collisions (high 24-36 bits) - Worst is 34 bits: 142/127 (1.11x)
Testing collisions (low  32-bit) - Expected        511.9, actual    514 (1.00x) (3)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 36/31 (1.13x)
Testing distribution - Worst bias is the 18-bit window at bit 43 - 0.057%

Testing bit 7
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    519 (1.01x) (8)
Testing collisions (high 24-36 bits) - Worst is 31 bits: 1049/1023 (1.02x)
Testing collisions (low  32-bit) - Expected        511.9, actual    523 (1.02x) (12)
Testing collisions (low  24-36 bits) - Worst is 31 bits: 1058/1023 (1.03x)
Testing distribution - Worst bias is the 18-bit window at bit 41 - 0.067%

Testing bit 8
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    503 (0.98x) (-8)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 69/63 (1.08x)
Testing collisions (low  32-bit) - Expected        511.9, actual    525 (1.03x) (14)
Testing collisions (low  24-36 bits) - Worst is 34 bits: 147/127 (1.15x)
Testing distribution - Worst bias is the 18-bit window at bit  0 - 0.090%

Testing bit 9
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    501 (0.98x)
Testing collisions (high 24-36 bits) - Worst is 30 bits: 2105/2046 (1.03x)
Testing collisions (low  32-bit) - Expected        511.9, actual    520 (1.02x) (9)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 37/31 (1.16x)
Testing distribution - Worst bias is the 18-bit window at bit 43 - 0.034%

Testing bit 10
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    495 (0.97x)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 68/63 (1.06x)
Testing collisions (low  32-bit) - Expected        511.9, actual    516 (1.01x) (5)
Testing collisions (low  24-36 bits) - Worst is 31 bits: 1043/1023 (1.02x)
Testing distribution - Worst bias is the 18-bit window at bit 32 - 0.079%

Testing bit 11
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    525 (1.03x) (14)
Testing collisions (high 24-36 bits) - Worst is 34 bits: 141/127 (1.10x)
Testing collisions (low  32-bit) - Expected        511.9, actual    513 (1.00x) (2)
Testing collisions (low  24-36 bits) - Worst is 33 bits: 259/255 (1.01x)
Testing distribution - Worst bias is the 18-bit window at bit 55 - 0.073%

Testing bit 12
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    505 (0.99x) (-6)
Testing collisions (high 24-36 bits) - Worst is 33 bits: 268/255 (1.05x)
Testing collisions (low  32-bit) - Expected        511.9, actual    500 (0.98x)
Testing collisions (low  24-36 bits) - Worst is 26 bits: 32469/32429 (1.00x)
Testing distribution - Worst bias is the 18-bit window at bit 52 - 0.094%

Testing bit 13
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    467 (0.91x)
Testing collisions (high 24-36 bits) - Worst is 27 bits: 16310/16298 (1.00x)
Testing collisions (low  32-bit) - Expected        511.9, actual    520 (1.02x) (9)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 36/31 (1.13x)
Testing distribution - Worst bias is the 18-bit window at bit 12 - 0.066%

Testing bit 14
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    547 (1.07x) (36)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 49/31 (1.53x)
Testing collisions (low  32-bit) - Expected        511.9, actual    462 (0.90x)
Testing collisions (low  24-36 bits) - Worst is 25 bits: 64198/64191 (1.00x)
Testing distribution - Worst bias is the 18-bit window at bit 36 - 0.131%

Testing bit 15
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    503 (0.98x) (-8)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 41/31 (1.28x)
Testing collisions (low  32-bit) - Expected        511.9, actual    524 (1.02x) (13)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 39/31 (1.22x)
Testing distribution - Worst bias is the 18-bit window at bit 60 - 0.080%

Testing bit 16
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    513 (1.00x) (2)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 41/31 (1.28x)
Testing collisions (low  32-bit) - Expected        511.9, actual    524 (1.02x) (13)
Testing collisions (low  24-36 bits) - Worst is 34 bits: 145/127 (1.13x)
Testing distribution - Worst bias is the 18-bit window at bit 28 - 0.057%

Testing bit 17
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    500 (0.98x)
Testing collisions (high 24-36 bits) - Worst is 30 bits: 2077/2046 (1.01x)
Testing collisions (low  32-bit) - Expected        511.9, actual    517 (1.01x) (6)
Testing collisions (low  24-36 bits) - Worst is 34 bits: 147/127 (1.15x)
Testing distribution - Worst bias is the 18-bit window at bit 62 - 0.105%

Testing bit 18
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    523 (1.02x) (12)
Testing collisions (high 24-36 bits) - Worst is 34 bits: 140/127 (1.09x)
Testing collisions (low  32-bit) - Expected        511.9, actual    497 (0.97x)
Testing collisions (low  24-36 bits) - Worst is 28 bits: 8260/8170 (1.01x)
Testing distribution - Worst bias is the 18-bit window at bit 27 - 0.059%

Testing bit 19
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    516 (1.01x) (5)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 68/63 (1.06x)
Testing collisions (low  32-bit) - Expected        511.9, actual    488 (0.95x)
Testing collisions (low  24-36 bits) - Worst is 27 bits: 16498/16298 (1.01x)
Testing distribution - Worst bias is the 18-bit window at bit  9 - 0.114%

Testing bit 20
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    524 (1.02x) (13)
Testing collisions (high 24-36 bits) - Worst is 33 bits: 266/255 (1.04x)
Testing collisions (low  32-bit) - Expected        511.9, actual    533 (1.04x) (22)
Testing collisions (low  24-36 bits) - Worst is 33 bits: 272/255 (1.06x)
Testing distribution - Worst bias is the 18-bit window at bit 39 - 0.087%

Testing bit 21
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    481 (0.94x)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 46/31 (1.44x)
Testing collisions (low  32-bit) - Expected        511.9, actual    522 (1.02x) (11)
Testing collisions (low  24-36 bits) - Worst is 34 bits: 138/127 (1.08x)
Testing distribution - Worst bias is the 18-bit window at bit 10 - 0.062%

Testing bit 22
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    528 (1.03x) (17)
Testing collisions (high 24-36 bits) - Worst is 32 bits: 528/511 (1.03x)
Testing collisions (low  32-bit) - Expected        511.9, actual    514 (1.00x) (3)
Testing collisions (low  24-36 bits) - Worst is 33 bits: 263/255 (1.03x)
Testing distribution - Worst bias is the 18-bit window at bit 21 - 0.090%

Testing bit 23
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    504 (0.98x) (-7)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 43/31 (1.34x)
Testing collisions (low  32-bit) - Expected        511.9, actual    526 (1.03x) (15)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 35/31 (1.09x)
Testing distribution - Worst bias is the 18-bit window at bit 23 - 0.052%

Testing bit 24
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    489 (0.96x)
Testing collisions (high 24-36 bits) - Worst is 28 bits: 8248/8170 (1.01x)
Testing collisions (low  32-bit) - Expected        511.9, actual    535 (1.05x) (24)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 38/31 (1.19x)
Testing distribution - Worst bias is the 18-bit window at bit  0 - 0.088%

Testing bit 25
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    496 (0.97x)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 44/31 (1.38x)
Testing collisions (low  32-bit) - Expected        511.9, actual    493 (0.96x)
Testing collisions (low  24-36 bits) - Worst is 35 bits: 68/63 (1.06x)
Testing distribution - Worst bias is the 18-bit window at bit 19 - 0.118%

Testing bit 26
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    515 (1.01x) (4)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 37/31 (1.16x)
Testing collisions (low  32-bit) - Expected        511.9, actual    527 (1.03x) (16)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 43/31 (1.34x)
Testing distribution - Worst bias is the 18-bit window at bit 54 - 0.109%

Testing bit 27
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    526 (1.03x) (15)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 45/31 (1.41x)
Testing collisions (low  32-bit) - Expected        511.9, actual    539 (1.05x) (28)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 34/31 (1.06x)
Testing distribution - Worst bias is the 18-bit window at bit 34 - 0.082%

Testing bit 28
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    527 (1.03x) (16)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 40/31 (1.25x)
Testing collisions (low  32-bit) - Expected        511.9, actual    487 (0.95x)
Testing collisions (low  24-36 bits) - Worst is 25 bits: 64367/64191 (1.00x)
Testing distribution - Worst bias is the 18-bit window at bit 36 - 0.096%

Testing bit 29
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    490 (0.96x)
Testing collisions (high 24-36 bits) - Worst is 30 bits: 2068/2046 (1.01x)
Testing collisions (low  32-bit) - Expected        511.9, actual    533 (1.04x) (22)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 40/31 (1.25x)
Testing distribution - Worst bias is the 18-bit window at bit 29 - 0.062%

Testing bit 30
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    484 (0.95x)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 74/63 (1.16x)
Testing collisions (low  32-bit) - Expected        511.9, actual    528 (1.03x) (17)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 34/31 (1.06x)
Testing distribution - Worst bias is the 18-bit window at bit 22 - 0.068%

Testing bit 31
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    511 (1.00x)
Testing collisions (high 24-36 bits) - Worst is 34 bits: 135/127 (1.05x)
Testing collisions (low  32-bit) - Expected        511.9, actual    501 (0.98x)
Testing collisions (low  24-36 bits) - Worst is 26 bits: 32500/32429 (1.00x)
Testing distribution - Worst bias is the 18-bit window at bit 54 - 0.050%

Testing bit 32
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    543 (1.06x) (32)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 75/63 (1.17x)
Testing collisions (low  32-bit) - Expected        511.9, actual    518 (1.01x) (7)
Testing collisions (low  24-36 bits) - Worst is 29 bits: 4167/4090 (1.02x)
Testing distribution - Worst bias is the 18-bit window at bit 43 - 0.077%

Testing bit 33
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    503 (0.98x) (-8)
Testing collisions (high 24-36 bits) - Worst is 26 bits: 32320/32429 (1.00x)
Testing collisions (low  32-bit) - Expected        511.9, actual    500 (0.98x)
Testing collisions (low  24-36 bits) - Worst is 31 bits: 1055/1023 (1.03x)
Testing distribution - Worst bias is the 18-bit window at bit 12 - 0.110%

Testing bit 34
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    516 (1.01x) (5)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 71/63 (1.11x)
Testing collisions (low  32-bit) - Expected        511.9, actual    544 (1.06x) (33)
Testing collisions (low  24-36 bits) - Worst is 33 bits: 282/255 (1.10x)
Testing distribution - Worst bias is the 18-bit window at bit 45 - 0.055%

Testing bit 35
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    566 (1.11x) (55)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 38/31 (1.19x)
Testing collisions (low  32-bit) - Expected        511.9, actual    479 (0.94x)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 33/31 (1.03x)
Testing distribution - Worst bias is the 18-bit window at bit  7 - 0.079%

Testing bit 36
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    491 (0.96x)
Testing collisions (high 24-36 bits) - Worst is 30 bits: 2071/2046 (1.01x)
Testing collisions (low  32-bit) - Expected        511.9, actual    521 (1.02x) (10)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 34/31 (1.06x)
Testing distribution - Worst bias is the 18-bit window at bit  1 - 0.040%

Testing bit 37
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    511 (1.00x)
Testing collisions (high 24-36 bits) - Worst is 34 bits: 132/127 (1.03x)
Testing collisions (low  32-bit) - Expected        511.9, actual    512 (1.00x) (1)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 38/31 (1.19x)
Testing distribution - Worst bias is the 18-bit window at bit 21 - 0.082%

Testing bit 38
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    523 (1.02x) (12)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 53/31 (1.66x)
Testing collisions (low  32-bit) - Expected        511.9, actual    540 (1.05x) (29)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 37/31 (1.16x)
Testing distribution - Worst bias is the 18-bit window at bit 42 - 0.071%

Testing bit 39
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    493 (0.96x)
Testing collisions (high 24-36 bits) - Worst is 34 bits: 150/127 (1.17x)
Testing collisions (low  32-bit) - Expected        511.9, actual    529 (1.03x) (18)
Testing collisions (low  24-36 bits) - Worst is 35 bits: 72/63 (1.13x)
Testing distribution - Worst bias is the 18-bit window at bit 34 - 0.090%

Testing bit 40
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    514 (1.00x) (3)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 37/31 (1.16x)
Testing collisions (low  32-bit) - Expected        511.9, actual    510 (1.00x) (-1)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 39/31 (1.22x)
Testing distribution - Worst bias is the 18-bit window at bit  3 - 0.066%

Testing bit 41
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    499 (0.97x)
Testing collisions (high 24-36 bits) - Worst is 25 bits: 64575/64191 (1.01x)
Testing collisions (low  32-bit) - Expected        511.9, actual    486 (0.95x)
Testing collisions (low  24-36 bits) - Worst is 31 bits: 1026/1023 (1.00x)
Testing distribution - Worst bias is the 18-bit window at bit 62 - 0.048%

Testing bit 42
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    483 (0.94x)
Testing collisions (high 24-36 bits) - Worst is 25 bits: 64193/64191 (1.00x)
Testing collisions (low  32-bit) - Expected        511.9, actual    517 (1.01x) (6)
Testing collisions (low  24-36 bits) - Worst is 35 bits: 75/63 (1.17x)
Testing distribution - Worst bias is the 18-bit window at bit 49 - 0.090%

Testing bit 43
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    549 (1.07x) (38)
Testing collisions (high 24-36 bits) - Worst is 32 bits: 549/511 (1.07x)
Testing collisions (low  32-bit) - Expected        511.9, actual    487 (0.95x)
Testing collisions (low  24-36 bits) - Worst is 35 bits: 74/63 (1.16x)
Testing distribution - Worst bias is the 18-bit window at bit  6 - 0.051%

Testing bit 44
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    495 (0.97x)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 72/63 (1.13x)
Testing collisions (low  32-bit) - Expected        511.9, actual    533 (1.04x) (22)
Testing collisions (low  24-36 bits) - Worst is 33 bits: 267/255 (1.04x)
Testing distribution - Worst bias is the 18-bit window at bit 15 - 0.062%

Testing bit 45
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    553 (1.08x) (42)
Testing collisions (high 24-36 bits) - Worst is 33 bits: 281/255 (1.10x)
Testing collisions (low  32-bit) - Expected        511.9, actual    520 (1.02x) (9)
Testing collisions (low  24-36 bits) - Worst is 34 bits: 154/127 (1.20x)
Testing distribution - Worst bias is the 18-bit window at bit 54 - 0.127%

Testing bit 46
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    464 (0.91x)
Testing collisions (high 24-36 bits) - Worst is 25 bits: 64321/64191 (1.00x)
Testing collisions (low  32-bit) - Expected        511.9, actual    533 (1.04x) (22)
Testing collisions (low  24-36 bits) - Worst is 33 bits: 283/255 (1.11x)
Testing distribution - Worst bias is the 18-bit window at bit 51 - 0.068%

Testing bit 47
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    498 (0.97x)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 73/63 (1.14x)
Testing collisions (low  32-bit) - Expected        511.9, actual    510 (1.00x) (-1)
Testing collisions (low  24-36 bits) - Worst is 30 bits: 2083/2046 (1.02x)
Testing distribution - Worst bias is the 18-bit window at bit 53 - 0.077%

Testing bit 48
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    500 (0.98x)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 72/63 (1.13x)
Testing collisions (low  32-bit) - Expected        511.9, actual    492 (0.96x)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 34/31 (1.06x)
Testing distribution - Worst bias is the 18-bit window at bit 14 - 0.089%

Testing bit 49
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    514 (1.00x) (3)
Testing collisions (high 24-36 bits) - Worst is 31 bits: 1039/1023 (1.01x)
Testing collisions (low  32-bit) - Expected        511.9, actual    537 (1.05x) (26)
Testing collisions (low  24-36 bits) - Worst is 34 bits: 143/127 (1.12x)
Testing distribution - Worst bias is the 18-bit window at bit  5 - 0.072%

Testing bit 50
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    521 (1.02x) (10)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 38/31 (1.19x)
Testing collisions (low  32-bit) - Expected        511.9, actual    511 (1.00x)
Testing collisions (low  24-36 bits) - Worst is 27 bits: 16354/16298 (1.00x)
Testing distribution - Worst bias is the 18-bit window at bit 27 - 0.127%

Testing bit 51
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    528 (1.03x) (17)
Testing collisions (high 24-36 bits) - Worst is 34 bits: 136/127 (1.06x)
Testing collisions (low  32-bit) - Expected        511.9, actual    533 (1.04x) (22)
Testing collisions (low  24-36 bits) - Worst is 33 bits: 275/255 (1.07x)
Testing distribution - Worst bias is the 18-bit window at bit  6 - 0.078%

Testing bit 52
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    520 (1.02x) (9)
Testing collisions (high 24-36 bits) - Worst is 34 bits: 149/127 (1.16x)
Testing collisions (low  32-bit) - Expected        511.9, actual    530 (1.04x) (19)
Testing collisions (low  24-36 bits) - Worst is 32 bits: 530/511 (1.04x)
Testing distribution - Worst bias is the 18-bit window at bit 32 - 0.073%

Testing bit 53
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    547 (1.07x) (36)
Testing collisions (high 24-36 bits) - Worst is 34 bits: 145/127 (1.13x)
Testing collisions (low  32-bit) - Expected        511.9, actual    515 (1.01x) (4)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 40/31 (1.25x)
Testing distribution - Worst bias is the 18-bit window at bit  8 - 0.074%

Testing bit 54
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    512 (1.00x) (1)
Testing collisions (high 24-36 bits) - Worst is 33 bits: 262/255 (1.02x)
Testing collisions (low  32-bit) - Expected        511.9, actual    500 (0.98x)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 35/31 (1.09x)
Testing distribution - Worst bias is the 18-bit window at bit 32 - 0.064%

Testing bit 55
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    541 (1.06x) (30)
Testing collisions (high 24-36 bits) - Worst is 36 bits: 38/31 (1.19x)
Testing collisions (low  32-bit) - Expected        511.9, actual    497 (0.97x)
Testing collisions (low  24-36 bits) - Worst is 35 bits: 71/63 (1.11x)
Testing distribution - Worst bias is the 18-bit window at bit  3 - 0.094%

Testing bit 56
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    503 (0.98x) (-8)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 82/63 (1.28x)
Testing collisions (low  32-bit) - Expected        511.9, actual    555 (1.08x) (44)
Testing collisions (low  24-36 bits) - Worst is 33 bits: 297/255 (1.16x)
Testing distribution - Worst bias is the 18-bit window at bit 48 - 0.053%

Testing bit 57
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    488 (0.95x)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 65/63 (1.02x)
Testing collisions (low  32-bit) - Expected        511.9, actual    511 (1.00x)
Testing collisions (low  24-36 bits) - Worst is 34 bits: 138/127 (1.08x)
Testing distribution - Worst bias is the 18-bit window at bit 33 - 0.083%

Testing bit 58
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    512 (1.00x) (1)
Testing collisions (high 24-36 bits) - Worst is 30 bits: 2095/2046 (1.02x)
Testing collisions (low  32-bit) - Expected        511.9, actual    522 (1.02x) (11)
Testing collisions (low  24-36 bits) - Worst is 32 bits: 522/511 (1.02x)
Testing distribution - Worst bias is the 18-bit window at bit  6 - 0.070%

Testing bit 59
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    528 (1.03x) (17)
Testing collisions (high 24-36 bits) - Worst is 35 bits: 73/63 (1.14x)
Testing collisions (low  32-bit) - Expected        511.9, actual    481 (0.94x)
Testing collisions (low  24-36 bits) - Worst is 30 bits: 2052/2046 (1.00x)
Testing distribution - Worst bias is the 18-bit window at bit 12 - 0.071%

Testing bit 60
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    524 (1.02x) (13)
Testing collisions (high 24-36 bits) - Worst is 33 bits: 271/255 (1.06x)
Testing collisions (low  32-bit) - Expected        511.9, actual    512 (1.00x) (1)
Testing collisions (low  24-36 bits) - Worst is 36 bits: 37/31 (1.16x)
Testing distribution - Worst bias is the 18-bit window at bit 13 - 0.058%

Testing bit 61
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    541 (1.06x) (30)
Testing collisions (high 24-36 bits) - Worst is 32 bits: 541/511 (1.06x)
Testing collisions (low  32-bit) - Expected        511.9, actual    497 (0.97x)
Testing collisions (low  24-36 bits) - Worst is 24 bits: 125983/125777 (1.00x)
Testing distribution - Worst bias is the 18-bit window at bit 13 - 0.068%

Testing bit 62
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    503 (0.98x) (-8)
Testing collisions (high 24-36 bits) - Worst is 24 bits: 125880/125777 (1.00x)
Testing collisions (low  32-bit) - Expected        511.9, actual    546 (1.07x) (35)
Testing collisions (low  24-36 bits) - Worst is 35 bits: 74/63 (1.16x)
Testing distribution - Worst bias is the 18-bit window at bit 13 - 0.064%

Testing bit 63
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected        511.9, actual    502 (0.98x) (-9)
Testing collisions (high 24-36 bits) - Worst is 33 bits: 266/255 (1.04x)
Testing collisions (low  32-bit) - Expected        511.9, actual    546 (1.07x) (35)
Testing collisions (low  24-36 bits) - Worst is 34 bits: 143/127 (1.12x)
Testing distribution - Worst bias is the 18-bit window at bit 24 - 0.122%

[[[ MomentChi2 Tests ]]]

Analyze hashes produced from a serie of linearly increasing numbers of 32-bit, using a step of 2 ...
Target values to approximate : 38918200.000000 - 273633.333333
4 threads starting...

 done
Popcount 1 stats : 38919350.078861 - 273666.108099
Popcount 0 stats : 38918658.962739 - 273633.375292
MomentChi2 for bits 1 :   2.41674
MomentChi2 for bits 0 :  0.384907

Derivative stats (transition from 2 consecutive values) :
Popcount 1 stats : 38919154.422199 - 273635.932389
Popcount 0 stats : 38918320.253443 - 273637.452403
MomentChi2 for deriv b1 :   1.66449
MomentChi2 for deriv b0 :  0.0264236

  Great

[[[ Prng Tests ]]]

Generating 33554432 random numbers :
Testing collisions ( 64-bit) - Expected    0.0, actual      0 (0.00x)
Testing collisions (high 32-bit) - Expected     130731.3, actual 130470 (1.00x) (-261)
Testing collisions (high 28-44 bits) - Worst is 44 bits: 38/31 (1.19x)
Testing collisions (low  32-bit) - Expected     130731.3, actual 130329 (1.00x) (-402)
Testing collisions (low  28-44 bits) - Worst is 43 bits: 71/63 (1.11x)

[[[ BadSeeds Tests ]]]

Testing 0 internal secrets:
0x0 PASS

Input vcode 0x00000001, Output vcode 0x00000001, Result vcode 0x00000001
Verification value is 0x00000001 - Testing took 6632.304670 seconds
-------------------------------------------------------------------------------
alpominth commented 1 year ago
Bulk speed test - 262144-byte keys
Alignment  7 -  3.009 bytes/cycle - 8609.11 MiB/sec @ 3 ghz
Alignment  6 -  2.998 bytes/cycle - 8578.73 MiB/sec @ 3 ghz
Alignment  5 -  3.013 bytes/cycle - 8620.66 MiB/sec @ 3 ghz
Alignment  4 -  3.013 bytes/cycle - 8619.92 MiB/sec @ 3 ghz
Alignment  3 -  3.013 bytes/cycle - 8621.23 MiB/sec @ 3 ghz
Alignment  2 -  3.007 bytes/cycle - 8603.64 MiB/sec @ 3 ghz
Alignment  1 -  3.014 bytes/cycle - 8622.87 MiB/sec @ 3 ghz
Alignment  0 -  3.024 bytes/cycle - 8651.10 MiB/sec @ 3 ghz
Average      -  3.011 bytes/cycle - 8615.91 MiB/sec @ 3 ghz

In what processor was this test made?

I've tried to build, but I got this error:

$ ./SMHasher discohash
-------------------------------------------------------------------------------
--- Testing discohash "DISCoHAsH 64 (was BEBB4185)" GOOD

[[[ Sanity Tests ]]]

munmap_chunk(): invalid pointer
Aborted

Cmake 3.25.1 and GCC 12.2.0.

o0101 commented 1 year ago

@alpominth hi! Apple-M1 using Rosetta to give architecture x86_64. Compiled using /smasher/build.sh -- sorry probably a dumb question but did you pull the PR?

alpominth commented 1 year ago

@00000o1

did you pull the PR

Yes I did, I cloned your fork repo recursively, but I compiled manually with Cmake, in this way:

mkdir build
cd build
cmake ..
make -j $(nproc)

But now I compiled again using ./smhasher/build.sh, the same problem persists.

I'm using Debian testing amd64 and my CPU is a AMD Ryzen 5 1400.

o0101 commented 1 year ago

@alpominth cool! Thanks. I'm not sure why some of these CI runs are failing given that my change is pretty insubstantial. Could be related to the name change i think. Your info gives me a way to test out a possible problem, I'll try on Deb. Thanks! :)

o0101 commented 1 year ago

@alpominth another tip: maybe try compiling with -Wall -fsanitize=address,undefined and see if you get any more info! :)

o0101 commented 1 year ago

Yeah I don't think this is a CPU problem at all, but a memory problem. Ie I tried compiling this just now on a Nanode (1GB RAM) and get your error! :)

o0101 commented 1 year ago

Scratch that! There must be something wrong with the code. I just pulled my PR and getting weird errors, too! Strange when I first pushed it it was building and running fine. So weird!

alpominth commented 1 year ago

Errors are not happening anymore.

I can confirm that it's working: https://paste.ee/p/euV9K

Thanks.

o0101 commented 1 year ago

Thanks man @alpominth