diff --git a/Hashes.h b/Hashes.h index d61d82c8..1308a90e 100644 --- a/Hashes.h +++ b/Hashes.h @@ -989,3 +989,11 @@ inline void aesnihash_test ( const void * key, int len, unsigned seed, void * ou *(uint64_t *)out = result; } #endif + +#include "prvhash42.h" +inline void prvhash_test ( const void * key, int len, unsigned seed, void * out ) +{ + uint8_t hash[8] = {0}; + prvhash42 ((const uint8_t *)key, len, hash, 8, (uint64_t)seed, 0, 0); + memcpy (out, hash, 8); +} diff --git a/README.md b/README.md index 8ac349c3..82621f3c 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,7 @@ SMhasher | -------------------------------------- | | | | | | | [tifuhash_64](doc/tifuhash_64.txt) | 35.60 | 1679.52 |1212.75 (15)| 276 | | | [floppsyhash_64](doc/floppsyhash.txt) | 191.95 | 450.93 | 821.11 (152)| 623 | | +| [prvhash](doc/prvhash.txt) | 393.21 | 142.03 | 532.15 (125)| 157 | | | [chaskey](doc/chaskey.txt) | 735.85 | 168.05 | 336.07 (4) |1609 | | | [SipHash](doc/SipHash.txt) | 958.78 | 141.84 | 278.15 (3) |1071 | | | [HalfSipHash](doc/HalfSipHash.txt) | 741.59 | 122.25 | 256.22 (20)| 700 | zeroes | diff --git a/doc/prvhash.txt b/doc/prvhash.txt new file mode 100644 index 00000000..9fee3daa --- /dev/null +++ b/doc/prvhash.txt @@ -0,0 +1,1467 @@ +------------------------------------------------------------------------------- +--- Testing prvhash "github.com/avaneev/prvhash " GOOD + +[[[ Sanity Tests ]]] + +Verification value 0x84468B63 ....... PASS +Running sanity check 1 .......... PASS +Running AppendedZeroesTest .......... PASS + +[[[ Speed Tests ]]] + +Bulk speed test - 262144-byte keys +Alignment 7 - 0.138 bytes/cycle - 393.39 MiB/sec @ 3 ghz +Alignment 6 - 0.138 bytes/cycle - 393.58 MiB/sec @ 3 ghz +Alignment 5 - 0.138 bytes/cycle - 393.61 MiB/sec @ 3 ghz +Alignment 4 - 0.138 bytes/cycle - 393.58 MiB/sec @ 3 ghz +Alignment 3 - 0.137 bytes/cycle - 393.19 MiB/sec @ 3 ghz +Alignment 2 - 0.137 bytes/cycle - 393.12 MiB/sec @ 3 ghz +Alignment 1 - 0.137 bytes/cycle - 392.68 MiB/sec @ 3 ghz +Alignment 0 - 0.137 bytes/cycle - 392.52 MiB/sec @ 3 ghz +Average - 0.137 bytes/cycle - 393.21 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 34.91 cycles/hash +Small key speed test - 2-byte keys - 42.00 cycles/hash +Small key speed test - 3-byte keys - 49.00 cycles/hash +Small key speed test - 4-byte keys - 56.00 cycles/hash +Small key speed test - 5-byte keys - 63.00 cycles/hash +Small key speed test - 6-byte keys - 69.89 cycles/hash +Small key speed test - 7-byte keys - 77.00 cycles/hash +Small key speed test - 8-byte keys - 84.00 cycles/hash +Small key speed test - 9-byte keys - 90.90 cycles/hash +Small key speed test - 10-byte keys - 97.90 cycles/hash +Small key speed test - 11-byte keys - 105.00 cycles/hash +Small key speed test - 12-byte keys - 112.71 cycles/hash +Small key speed test - 13-byte keys - 119.98 cycles/hash +Small key speed test - 14-byte keys - 126.91 cycles/hash +Small key speed test - 15-byte keys - 133.92 cycles/hash +Small key speed test - 16-byte keys - 140.88 cycles/hash +Small key speed test - 17-byte keys - 147.97 cycles/hash +Small key speed test - 18-byte keys - 156.00 cycles/hash +Small key speed test - 19-byte keys - 161.92 cycles/hash +Small key speed test - 20-byte keys - 169.90 cycles/hash +Small key speed test - 21-byte keys - 176.94 cycles/hash +Small key speed test - 22-byte keys - 183.96 cycles/hash +Small key speed test - 23-byte keys - 190.94 cycles/hash +Small key speed test - 24-byte keys - 197.96 cycles/hash +Small key speed test - 25-byte keys - 204.93 cycles/hash +Small key speed test - 26-byte keys - 211.86 cycles/hash +Small key speed test - 27-byte keys - 220.20 cycles/hash +Small key speed test - 28-byte keys - 238.28 cycles/hash +Small key speed test - 29-byte keys - 234.31 cycles/hash +Small key speed test - 30-byte keys - 251.94 cycles/hash +Small key speed test - 31-byte keys - 251.82 cycles/hash +Average 142.030 cycles/hash + +[[[ 'Hashmap' Speed Tests ]]] + +std::unordered_map +Init std HashMapTest: 768.286 cycles/op (479826 inserts, 1% deletions) +Running std HashMapTest: 682.826 cycles/op (18.9 stdv) + +greg7mdp/parallel-hashmap +Init fast HashMapTest: 892.918 cycles/op (479826 inserts, 1% deletions) +Running fast HashMapTest: 532.149 cycles/op (124.6 stdv) ....... PASS + +[[[ Avalanche Tests ]]] + +Testing 24-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.672667% +Testing 32-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.684000% +Testing 40-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.656000% +Testing 48-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.646667% +Testing 56-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.660667% +Testing 64-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.654667% +Testing 72-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.644000% +Testing 80-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.680667% +Testing 96-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.778000% +Testing 112-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.678667% +Testing 128-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.709333% +Testing 160-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.786000% +Testing 512-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.728667% +Testing 1024-bit keys -> 64-bit hashes, 300000 reps worst bias is 0.838000% + +[[[ 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.6, actual 1 (1.67x) (1) +Testing collisions (high 19-26 bits) - Worst is 24 bits: 78/152 (0.51x) +Testing collisions (high 12-bit) - Expected 50643.0, actual 46547 (0.92x) +Testing collisions (high 8-bit) - Expected 50643.0, actual 50387 (0.99x) (-256) +Testing collisions (low 32-bit) - Expected 0.6, actual 0 (0.00x) +Testing collisions (low 19-26 bits) - Worst is 26 bits: 19/38 (0.50x) +Testing collisions (low 12-bit) - Expected 50643.0, actual 46547 (0.92x) +Testing collisions (low 8-bit) - Expected 50643.0, actual 50387 (0.99x) (-256) +Testing distribution - Worst bias is the 13-bit window at bit 55 - 0.512% + +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 376.5, actual 141 (0.37x) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 12/23 (0.51x) +Testing collisions (high 12-bit) - Expected 1271626.0, actual 1267530 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 1271626.0, actual 1271370 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 376.5, actual 211 (0.56x) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 20/23 (0.85x) +Testing collisions (low 12-bit) - Expected 1271626.0, actual 1267530 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 1271626.0, actual 1271370 (1.00x) (-256) +Testing distribution - Worst bias is the 17-bit window at bit 50 - 0.105% + +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 4746.0, actual 2287 (0.48x) +Testing collisions (high 26-39 bits) - Worst is 38 bits: 40/74 (0.54x) +Testing collisions (high 12-bit) - Expected 4514873.0, actual 4510777 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 4514873.0, actual 4514617 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 4746.0, actual 2442 (0.51x) +Testing collisions (low 26-39 bits) - Worst is 37 bits: 80/148 (0.54x) +Testing collisions (low 12-bit) - Expected 4514873.0, actual 4510777 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 4514873.0, actual 4514617 (1.00x) (-256) +Testing distribution - Worst bias is the 19-bit window at bit 26 - 0.067% + +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 4923.4, actual 2513 (0.51x) +Testing collisions (high 26-39 bits) - Worst is 34 bits: 651/1230 (0.53x) +Testing collisions (high 12-bit) - Expected 4598479.0, actual 4594383 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 4598479.0, actual 4598223 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 4923.4, actual 2376 (0.48x) +Testing collisions (low 26-39 bits) - Worst is 39 bits: 21/38 (0.55x) +Testing collisions (low 12-bit) - Expected 4598479.0, actual 4594383 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 4598479.0, actual 4598223 (1.00x) (-256) +Testing distribution - Worst bias is the 19-bit window at bit 13 - 0.058% + +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 46927.3, actual 23180 (0.49x) +Testing collisions (high 28-43 bits) - Worst is 42 bits: 26/45 (0.57x) +Testing collisions (high 12-bit) - Expected 14196869.0, actual 14192773 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 14196869.0, actual 14196613 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 46927.3, actual 23679 (0.50x) +Testing collisions (low 28-43 bits) - Worst is 38 bits: 376/733 (0.51x) +Testing collisions (low 12-bit) - Expected 14196869.0, actual 14192773 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 14196869.0, actual 14196613 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 60 - 0.019% + +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 4139.3, actual 2060 (0.50x) +Testing collisions (high 26-39 bits) - Worst is 35 bits: 276/517 (0.53x) +Testing collisions (high 12-bit) - Expected 4216423.0, actual 4212327 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 4216423.0, actual 4216167 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 4139.3, actual 2095 (0.51x) +Testing collisions (low 26-39 bits) - Worst is 37 bits: 85/129 (0.66x) +Testing collisions (low 12-bit) - Expected 4216423.0, actual 4212327 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 4216423.0, actual 4216167 (1.00x) (-256) +Testing distribution - Worst bias is the 19-bit window at bit 16 - 0.047% + +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 16053.7, actual 8019 (0.50x) +Testing collisions (high 27-41 bits) - Worst is 41 bits: 22/31 (0.70x) +Testing collisions (high 12-bit) - Expected 8303633.0, actual 8299537 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8303633.0, actual 8303377 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16053.7, actual 7947 (0.50x) +Testing collisions (low 27-41 bits) - Worst is 29 bits: 64024/128429 (0.50x) +Testing collisions (low 12-bit) - Expected 8303633.0, actual 8299537 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8303633.0, actual 8303377 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 3 - 0.045% + +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 52965.5, actual 26838 (0.51x) +Testing collisions (high 28-43 bits) - Worst is 40 bits: 110/206 (0.53x) +Testing collisions (high 12-bit) - Expected 15082603.0, actual 15078507 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 15082603.0, actual 15082347 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 52965.5, actual 26711 (0.50x) +Testing collisions (low 28-43 bits) - Worst is 41 bits: 61/103 (0.59x) +Testing collisions (low 12-bit) - Expected 15082603.0, actual 15078507 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 15082603.0, actual 15082347 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 63 - 0.025% + +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 2802.7, actual 1370 (0.49x) +Testing collisions (high 26-39 bits) - Worst is 38 bits: 25/43 (0.57x) +Testing collisions (high 12-bit) - Expected 3469497.0, actual 3465401 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 3469497.0, actual 3469241 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 2802.7, actual 1408 (0.50x) +Testing collisions (low 26-39 bits) - Worst is 37 bits: 59/87 (0.67x) +Testing collisions (low 12-bit) - Expected 3469497.0, actual 3465401 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 3469497.0, actual 3469241 (1.00x) (-256) +Testing distribution - Worst bias is the 19-bit window at bit 41 - 0.090% + +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 169446.5, actual 84650 (0.50x) +Testing collisions (high 29-45 bits) - Worst is 44 bits: 27/41 (0.65x) +Testing collisions (high 12-bit) - Expected 26977161.0, actual 26973065 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 26977161.0, actual 26976905 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 169446.5, actual 84423 (0.50x) +Testing collisions (low 29-45 bits) - Worst is 33 bits: 42292/84723 (0.50x) +Testing collisions (low 12-bit) - Expected 26977161.0, actual 26973065 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 26977161.0, actual 26976905 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 22 - 0.008% + +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 1820.7, actual 948 (0.52x) +Testing collisions (high 25-38 bits) - Worst is 37 bits: 40/56 (0.70x) +Testing collisions (high 12-bit) - Expected 2796417.0, actual 2792321 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2796417.0, actual 2796161 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1820.7, actual 921 (0.51x) +Testing collisions (low 25-38 bits) - Worst is 38 bits: 26/28 (0.91x) +Testing collisions (low 12-bit) - Expected 2796417.0, actual 2792321 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2796417.0, actual 2796161 (1.00x) (-256) +Testing distribution - Worst bias is the 19-bit window at bit 35 - 0.060% + +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 116512.9, actual 58353 (0.50x) +Testing collisions (high 28-44 bits) - Worst is 44 bits: 16/28 (0.56x) +Testing collisions (high 12-bit) - Expected 22370049.0, actual 22365953 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 22370049.0, actual 22369793 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 116512.9, actual 57881 (0.50x) +Testing collisions (low 28-44 bits) - Worst is 31 bits: 115885/233025 (0.50x) +Testing collisions (low 12-bit) - Expected 22370049.0, actual 22365953 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 22370049.0, actual 22369793 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 35 - 0.014% + +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 64.1, actual 32 (0.50x) +Testing collisions (high 23-33 bits) - Worst is 33 bits: 21/32 (0.65x) +Testing collisions (high 12-bit) - Expected 524801.0, actual 520705 (0.99x) (-4096) +Testing collisions (high 8-bit) - Expected 524801.0, actual 524545 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 64.1, actual 34 (0.53x) +Testing collisions (low 23-33 bits) - Worst is 32 bits: 34/64 (0.53x) +Testing collisions (low 12-bit) - Expected 524801.0, actual 520705 (0.99x) (-4096) +Testing collisions (low 8-bit) - Expected 524801.0, actual 524545 (1.00x) (-256) +Testing distribution - Worst bias is the 16-bit window at bit 0 - 0.198% + +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 1025.0, actual 510 (0.50x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 22/32 (0.69x) +Testing collisions (high 12-bit) - Expected 2098177.0, actual 2094081 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2098177.0, actual 2097921 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1025.0, actual 472 (0.46x) +Testing collisions (low 25-37 bits) - Worst is 28 bits: 8135/16400 (0.50x) +Testing collisions (low 12-bit) - Expected 2098177.0, actual 2094081 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2098177.0, actual 2097921 (1.00x) (-256) +Testing distribution - Worst bias is the 18-bit window at bit 15 - 0.093% + + +[[[ 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 1337.5, actual 607 (0.45x) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 17/20 (0.81x) +Testing collisions (high 12-bit) - Expected 2396744.0, actual 2392648 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2396744.0, actual 2396488 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1337.5, actual 674 (0.50x) +Testing collisions (low 25-38 bits) - Worst is 34 bits: 185/334 (0.55x) +Testing collisions (low 12-bit) - Expected 2396744.0, actual 2392648 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2396744.0, actual 2396488 (1.00x) (-256) +Testing distribution - Worst bias is the 18-bit window at bit 15 - 0.069% + + +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 1337.5, actual 708 (0.53x) +Testing collisions (high 25-38 bits) - Worst is 31 bits: 1418/2674 (0.53x) +Testing collisions (high 12-bit) - Expected 2396744.0, actual 2392648 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2396744.0, actual 2396488 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1337.5, actual 711 (0.53x) +Testing collisions (low 25-38 bits) - Worst is 37 bits: 31/41 (0.74x) +Testing collisions (low 12-bit) - Expected 2396744.0, actual 2392648 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2396744.0, actual 2396488 (1.00x) (-256) +Testing distribution - Worst bias is the 18-bit window at bit 11 - 0.082% + + +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 34678.6, actual 17393 (0.50x) +Testing collisions (high 27-42 bits) - Worst is 41 bits: 44/67 (0.65x) +Testing collisions (high 12-bit) - Expected 12204240.0, actual 12200144 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 12204240.0, actual 12203984 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 34678.6, actual 17395 (0.50x) +Testing collisions (low 27-42 bits) - Worst is 33 bits: 8735/17339 (0.50x) +Testing collisions (low 12-bit) - Expected 12204240.0, actual 12200144 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 12204240.0, actual 12203984 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 10 - 0.019% + + +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 16384.0, actual 8270 (0.50x) +Testing collisions (high 27-41 bits) - Worst is 41 bits: 18/31 (0.56x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 8145 (0.50x) +Testing collisions (low 27-41 bits) - Worst is 41 bits: 18/31 (0.56x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 7 - 0.036% + + +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 16384.0, actual 8151 (0.50x) +Testing collisions (high 27-41 bits) - Worst is 33 bits: 4081/8191 (0.50x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 8166 (0.50x) +Testing collisions (low 27-41 bits) - Worst is 38 bits: 145/255 (0.57x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 28 - 0.038% + + +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 16384.0, actual 8317 (0.51x) +Testing collisions (high 27-41 bits) - Worst is 41 bits: 21/31 (0.66x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 8060 (0.49x) +Testing collisions (low 27-41 bits) - Worst is 39 bits: 64/127 (0.50x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 52 - 0.033% + + +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 16384.0, actual 7985 (0.49x) +Testing collisions (high 27-41 bits) - Worst is 36 bits: 512/1023 (0.50x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 8190 (0.50x) +Testing collisions (low 27-41 bits) - Worst is 41 bits: 19/31 (0.59x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 38 - 0.036% + + +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 16384.0, actual 8154 (0.50x) +Testing collisions (high 27-41 bits) - Worst is 37 bits: 272/511 (0.53x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 8240 (0.50x) +Testing collisions (low 27-41 bits) - Worst is 40 bits: 38/63 (0.59x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 34 - 0.029% + + +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 16384.0, actual 8220 (0.50x) +Testing collisions (high 27-41 bits) - Worst is 41 bits: 21/31 (0.66x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 8214 (0.50x) +Testing collisions (low 27-41 bits) - Worst is 40 bits: 34/63 (0.53x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 19 - 0.047% + + +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 16384.0, actual 8038 (0.49x) +Testing collisions (high 27-41 bits) - Worst is 41 bits: 18/31 (0.56x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 8130 (0.50x) +Testing collisions (low 27-41 bits) - Worst is 39 bits: 69/127 (0.54x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 58 - 0.039% + + +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 16384.0, actual 8053 (0.49x) +Testing collisions (high 27-41 bits) - Worst is 41 bits: 19/31 (0.59x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 8168 (0.50x) +Testing collisions (low 27-41 bits) - Worst is 39 bits: 70/127 (0.55x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 22 - 0.044% + + +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 16384.0, actual 8261 (0.50x) +Testing collisions (high 27-41 bits) - Worst is 34 bits: 2154/4095 (0.53x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 8344 (0.51x) +Testing collisions (low 27-41 bits) - Worst is 41 bits: 22/31 (0.69x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 28 - 0.033% + + +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 16384.0, actual 8181 (0.50x) +Testing collisions (high 27-41 bits) - Worst is 36 bits: 517/1023 (0.50x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 8178 (0.50x) +Testing collisions (low 27-41 bits) - Worst is 32 bits: 8178/16383 (0.50x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 21 - 0.054% + + +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 16384.0, actual 8276 (0.51x) +Testing collisions (high 27-41 bits) - Worst is 38 bits: 141/255 (0.55x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 7962 (0.49x) +Testing collisions (low 27-41 bits) - Worst is 38 bits: 141/255 (0.55x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 50 - 0.039% + + +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 16384.0, actual 8166 (0.50x) +Testing collisions (high 27-41 bits) - Worst is 39 bits: 75/127 (0.59x) +Testing collisions (high 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 16384.0, actual 8130 (0.50x) +Testing collisions (low 27-41 bits) - Worst is 33 bits: 4140/8191 (0.51x) +Testing collisions (low 12-bit) - Expected 8388606.0, actual 8384510 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 8388606.0, actual 8388350 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 4 - 0.071% + + +[[[ 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 232.8, actual 133 (0.57x) +Testing collisions (high 24-35 bits) - Worst is 34 bits: 39/58 (0.67x) +Testing collisions (high 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 232.8, actual 110 (0.47x) +Testing collisions (low 24-35 bits) - Worst is 35 bits: 17/29 (0.58x) +Testing collisions (low 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing distribution - Worst bias is the 17-bit window at bit 43 - 0.107% + +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 232.8, actual 116 (0.50x) +Testing collisions (high 24-35 bits) - Worst is 32 bits: 116/232 (0.50x) +Testing collisions (high 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 232.8, actual 123 (0.53x) +Testing collisions (low 24-35 bits) - Worst is 34 bits: 34/58 (0.58x) +Testing collisions (low 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing distribution - Worst bias is the 17-bit window at bit 24 - 0.147% + +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 232.8, actual 121 (0.52x) +Testing collisions (high 24-35 bits) - Worst is 33 bits: 64/116 (0.55x) +Testing collisions (high 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 232.8, actual 95 (0.41x) +Testing collisions (low 24-35 bits) - Worst is 25 bits: 14673/29802 (0.49x) +Testing collisions (low 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing distribution - Worst bias is the 17-bit window at bit 40 - 0.134% + +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 232.8, actual 123 (0.53x) +Testing collisions (high 24-35 bits) - Worst is 31 bits: 256/465 (0.55x) +Testing collisions (high 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 232.8, actual 130 (0.56x) +Testing collisions (low 24-35 bits) - Worst is 32 bits: 130/232 (0.56x) +Testing collisions (low 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing distribution - Worst bias is the 17-bit window at bit 62 - 0.116% + +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 232.8, actual 107 (0.46x) +Testing collisions (high 24-35 bits) - Worst is 34 bits: 33/58 (0.57x) +Testing collisions (high 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 232.8, actual 106 (0.46x) +Testing collisions (low 24-35 bits) - Worst is 26 bits: 7514/14901 (0.50x) +Testing collisions (low 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing distribution - Worst bias is the 17-bit window at bit 20 - 0.133% + +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 232.8, actual 120 (0.52x) +Testing collisions (high 24-35 bits) - Worst is 35 bits: 21/29 (0.72x) +Testing collisions (high 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 232.8, actual 126 (0.54x) +Testing collisions (low 24-35 bits) - Worst is 33 bits: 76/116 (0.65x) +Testing collisions (low 12-bit) - Expected 1000000.0, actual 995904 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 1000000.0, actual 999744 (1.00x) (-256) +Testing distribution - Worst bias is the 17-bit window at bit 10 - 0.114% + + +[[[ 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 99.1, actual 60 (0.61x) +Testing collisions (high 23-34 bits) - Worst is 33 bits: 35/49 (0.71x) +Testing collisions (high 12-bit) - Expected 652545.0, actual 648449 (0.99x) (-4096) +Testing collisions (high 8-bit) - Expected 652545.0, actual 652289 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 99.1, actual 45 (0.45x) +Testing collisions (low 23-34 bits) - Worst is 34 bits: 14/24 (0.56x) +Testing collisions (low 12-bit) - Expected 652545.0, actual 648449 (0.99x) (-4096) +Testing collisions (low 8-bit) - Expected 652545.0, actual 652289 (1.00x) (-256) +Testing distribution - Worst bias is the 16-bit window at bit 11 - 0.145% + +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 6969.1, actual 3482 (0.50x) +Testing collisions (high 26-40 bits) - Worst is 38 bits: 60/108 (0.55x) +Testing collisions (high 12-bit) - Expected 5471025.0, actual 5466929 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 5471025.0, actual 5470769 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 6969.1, actual 3501 (0.50x) +Testing collisions (low 26-40 bits) - Worst is 40 bits: 18/27 (0.66x) +Testing collisions (low 12-bit) - Expected 5471025.0, actual 5466929 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 5471025.0, actual 5470769 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 11 - 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 80695.5, actual 40357 (0.50x) +Testing collisions (high 28-43 bits) - Worst is 43 bits: 22/39 (0.56x) +Testing collisions (high 12-bit) - Expected 18616785.0, actual 18612689 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 18616785.0, actual 18616529 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 80695.5, actual 40210 (0.50x) +Testing collisions (low 28-43 bits) - Worst is 41 bits: 91/157 (0.58x) +Testing collisions (low 12-bit) - Expected 18616785.0, actual 18612689 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 18616785.0, actual 18616529 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 37 - 0.024% + +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 455926.3, actual 226856 (0.50x) +Testing collisions (high 29-46 bits) - Worst is 44 bits: 56/111 (0.50x) +Testing collisions (high 12-bit) - Expected 44251425.0, actual 44247329 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 44251425.0, actual 44251169 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 455926.3, actual 227193 (0.50x) +Testing collisions (low 29-46 bits) - Worst is 43 bits: 119/222 (0.53x) +Testing collisions (low 12-bit) - Expected 44251425.0, actual 44247329 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 44251425.0, actual 44251169 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 33 - 0.008% + +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 1743569.4, actual 865560 (0.50x) +Testing collisions (high 30-48 bits) - Worst is 48 bits: 17/26 (0.64x) +Testing collisions (high 12-bit) - Expected 86536545.0, actual 86532449 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 86536545.0, actual 86536289 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1743569.4, actual 866842 (0.50x) +Testing collisions (low 30-48 bits) - Worst is 47 bits: 30/53 (0.56x) +Testing collisions (low 12-bit) - Expected 86536545.0, actual 86532449 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 86536545.0, actual 86536289 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 2 - 0.003% + + +[[[ Keyset 'Text' Tests ]]] + +Keyset 'Text' - keys of form "Foo[XXXX]Bar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 50836.3, actual 25508 (0.50x) +Testing collisions (high 28-43 bits) - Worst is 43 bits: 17/24 (0.68x) +Testing collisions (high 12-bit) - Expected 14776336.0, actual 14772240 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 14776336.0, actual 14776080 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 50836.3, actual 25471 (0.50x) +Testing collisions (low 28-43 bits) - Worst is 43 bits: 17/24 (0.68x) +Testing collisions (low 12-bit) - Expected 14776336.0, actual 14772240 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 14776336.0, actual 14776080 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 40 - 0.029% + +Keyset 'Text' - keys of form "FooBar[XXXX]" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 50836.3, actual 25291 (0.50x) +Testing collisions (high 28-43 bits) - Worst is 38 bits: 396/794 (0.50x) +Testing collisions (high 12-bit) - Expected 14776336.0, actual 14772240 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 14776336.0, actual 14776080 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 50836.3, actual 25375 (0.50x) +Testing collisions (low 28-43 bits) - Worst is 43 bits: 13/24 (0.52x) +Testing collisions (low 12-bit) - Expected 14776336.0, actual 14772240 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 14776336.0, actual 14776080 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 7 - 0.023% + +Keyset 'Text' - keys of form "[XXXX]FooBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 50836.3, actual 25525 (0.50x) +Testing collisions (high 28-43 bits) - Worst is 40 bits: 107/198 (0.54x) +Testing collisions (high 12-bit) - Expected 14776336.0, actual 14772240 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 14776336.0, actual 14776080 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 50836.3, actual 25316 (0.50x) +Testing collisions (low 28-43 bits) - Worst is 43 bits: 17/24 (0.68x) +Testing collisions (low 12-bit) - Expected 14776336.0, actual 14772240 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 14776336.0, actual 14776080 (1.00x) (-256) +Testing distribution - Worst bias is the 20-bit window at bit 34 - 0.020% + + +[[[ Keyset 'Zeroes' Tests ]]] + +Keyset 'Zeroes' - 204800 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 9.8, actual 3 (0.31x) +Testing collisions (high 21-30 bits) - Worst is 27 bits: 179/312 (0.57x) +Testing collisions (high 12-bit) - Expected 204800.0, actual 200704 (0.98x) +Testing collisions (high 8-bit) - Expected 204800.0, actual 204544 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 9.8, actual 8 (0.82x) +Testing collisions (low 21-30 bits) - Worst is 30 bits: 21/39 (0.54x) +Testing collisions (low 12-bit) - Expected 204800.0, actual 200704 (0.98x) +Testing collisions (low 8-bit) - Expected 204800.0, actual 204544 (1.00x) (-256) +Testing distribution - Worst bias is the 15-bit window at bit 45 - 0.317% + + +[[[ Keyset 'Seed' Tests ]]] + +Keyset 'Seed' - 5000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 5820.8, actual 2867 (0.49x) +Testing collisions (high 26-40 bits) - Worst is 40 bits: 14/22 (0.62x) +Testing collisions (high 12-bit) - Expected 5000000.0, actual 4995904 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 5000000.0, actual 4999744 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 5820.8, actual 2957 (0.51x) +Testing collisions (low 26-40 bits) - Worst is 40 bits: 12/22 (0.53x) +Testing collisions (low 12-bit) - Expected 5000000.0, actual 4995904 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 5000000.0, actual 4999744 (1.00x) (-256) +Testing distribution - Worst bias is the 19-bit window at bit 3 - 0.065% + + +[[[ Keyset 'PerlinNoise' Tests ]]] + +Testing 16777216 coordinates (L2) : +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 65536.0, actual 32651 (0.50x) +Testing collisions (high 28-43 bits) - Worst is 43 bits: 18/31 (0.56x) +Testing collisions (high 12-bit) - Expected 16777216.0, actual 16773120 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 16777216.0, actual 16776960 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 65536.0, actual 32486 (0.50x) +Testing collisions (low 28-43 bits) - Worst is 41 bits: 65/127 (0.51x) +Testing collisions (low 12-bit) - Expected 16777216.0, actual 16773120 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 16777216.0, actual 16776960 (1.00x) (-256) + + +[[[ 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 1024.0, actual 528 (0.52x) +Testing collisions (high 25-37 bits) - Worst is 32 bits: 528/1023 (0.52x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 481 (0.47x) +Testing collisions (low 25-37 bits) - Worst is 27 bits: 16195/32767 (0.49x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 1 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 520 (0.51x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 20/31 (0.63x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 534 (0.52x) +Testing collisions (low 25-37 bits) - Worst is 34 bits: 147/255 (0.57x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 2 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 486 (0.47x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 22/31 (0.69x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 538 (0.53x) +Testing collisions (low 25-37 bits) - Worst is 33 bits: 290/511 (0.57x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 3 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 514 (0.50x) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 261/511 (0.51x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 526 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 35 bits: 70/127 (0.55x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 4 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 499 (0.49x) +Testing collisions (high 25-37 bits) - Worst is 34 bits: 134/255 (0.52x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 519 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 17/31 (0.53x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 5 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 530 (0.52x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 23/31 (0.72x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 510 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 34 bits: 141/255 (0.55x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 6 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 495 (0.48x) +Testing collisions (high 25-37 bits) - Worst is 26 bits: 32319/65535 (0.49x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 525 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 35 bits: 79/127 (0.62x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 7 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 511 (0.50x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 19/31 (0.59x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 534 (0.52x) +Testing collisions (low 25-37 bits) - Worst is 33 bits: 273/511 (0.53x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 8 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 535 (0.52x) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 279/511 (0.54x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 485 (0.47x) +Testing collisions (low 25-37 bits) - Worst is 33 bits: 262/511 (0.51x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 9 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 504 (0.49x) +Testing collisions (high 25-37 bits) - Worst is 31 bits: 1025/2047 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 530 (0.52x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 22/31 (0.69x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 10 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 576 (0.56x) +Testing collisions (high 25-37 bits) - Worst is 34 bits: 152/255 (0.59x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 499 (0.49x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 20/31 (0.63x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 11 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 529 (0.52x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 20/31 (0.63x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 524 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 19/31 (0.59x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 12 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 550 (0.54x) +Testing collisions (high 25-37 bits) - Worst is 32 bits: 550/1023 (0.54x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 517 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 33 bits: 263/511 (0.51x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 13 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 547 (0.53x) +Testing collisions (high 25-37 bits) - Worst is 34 bits: 159/255 (0.62x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 524 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 19/31 (0.59x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 14 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 499 (0.49x) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 261/511 (0.51x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 520 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 33 bits: 273/511 (0.53x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 15 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 528 (0.52x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 22/31 (0.69x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 441 (0.43x) +Testing collisions (low 25-37 bits) - Worst is 28 bits: 8157/16383 (0.50x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 16 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 565 (0.55x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 20/31 (0.63x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 484 (0.47x) +Testing collisions (low 25-37 bits) - Worst is 36 bits: 35/63 (0.55x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 17 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 537 (0.52x) +Testing collisions (high 25-37 bits) - Worst is 35 bits: 75/127 (0.59x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 509 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 34 bits: 134/255 (0.52x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 18 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 505 (0.49x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 18/31 (0.56x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 514 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 36 bits: 39/63 (0.61x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 19 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 532 (0.52x) +Testing collisions (high 25-37 bits) - Worst is 35 bits: 77/127 (0.60x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 531 (0.52x) +Testing collisions (low 25-37 bits) - Worst is 32 bits: 531/1023 (0.52x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 20 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 517 (0.50x) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 268/511 (0.52x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 527 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 21/31 (0.66x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 21 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 497 (0.49x) +Testing collisions (high 25-37 bits) - Worst is 29 bits: 4164/8191 (0.51x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 522 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 31 bits: 1068/2047 (0.52x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 22 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 472 (0.46x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 17/31 (0.53x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 492 (0.48x) +Testing collisions (low 25-37 bits) - Worst is 30 bits: 2053/4095 (0.50x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 23 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 486 (0.47x) +Testing collisions (high 25-37 bits) - Worst is 29 bits: 4085/8191 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 530 (0.52x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 18/31 (0.56x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 24 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 532 (0.52x) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 277/511 (0.54x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 539 (0.53x) +Testing collisions (low 25-37 bits) - Worst is 35 bits: 74/127 (0.58x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 25 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 505 (0.49x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 22/31 (0.69x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 540 (0.53x) +Testing collisions (low 25-37 bits) - Worst is 35 bits: 75/127 (0.59x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 26 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 520 (0.51x) +Testing collisions (high 25-37 bits) - Worst is 35 bits: 68/127 (0.53x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 508 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 28 bits: 8276/16383 (0.51x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 27 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 511 (0.50x) +Testing collisions (high 25-37 bits) - Worst is 36 bits: 37/63 (0.58x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 514 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 28 bits: 8258/16383 (0.50x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 28 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 484 (0.47x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 17/31 (0.53x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 531 (0.52x) +Testing collisions (low 25-37 bits) - Worst is 32 bits: 531/1023 (0.52x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 29 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 532 (0.52x) +Testing collisions (high 25-37 bits) - Worst is 35 bits: 67/127 (0.52x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 537 (0.52x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 20/31 (0.63x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 30 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 497 (0.49x) +Testing collisions (high 25-37 bits) - Worst is 29 bits: 4158/8191 (0.51x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 527 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 21/31 (0.66x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 31 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 589 (0.58x) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 301/511 (0.59x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 498 (0.49x) +Testing collisions (low 25-37 bits) - Worst is 35 bits: 71/127 (0.55x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 32 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 449 (0.44x) +Testing collisions (high 25-37 bits) - Worst is 28 bits: 8163/16383 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 513 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 17/31 (0.53x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 33 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 528 (0.52x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 26/31 (0.81x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 508 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 22/31 (0.69x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 34 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 520 (0.51x) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 279/511 (0.54x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 536 (0.52x) +Testing collisions (low 25-37 bits) - Worst is 34 bits: 139/255 (0.54x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 35 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 512 (0.50x) +Testing collisions (high 25-37 bits) - Worst is 29 bits: 4145/8191 (0.51x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 505 (0.49x) +Testing collisions (low 25-37 bits) - Worst is 31 bits: 1055/2047 (0.52x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 36 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 474 (0.46x) +Testing collisions (high 25-37 bits) - Worst is 27 bits: 16389/32767 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 512 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 20/31 (0.63x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 37 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 493 (0.48x) +Testing collisions (high 25-37 bits) - Worst is 28 bits: 8226/16383 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 490 (0.48x) +Testing collisions (low 25-37 bits) - Worst is 30 bits: 2051/4095 (0.50x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 38 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 523 (0.51x) +Testing collisions (high 25-37 bits) - Worst is 36 bits: 38/63 (0.59x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 513 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 23/31 (0.72x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 39 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 509 (0.50x) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 279/511 (0.54x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 472 (0.46x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 20/31 (0.63x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 40 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 512 (0.50x) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 267/511 (0.52x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 505 (0.49x) +Testing collisions (low 25-37 bits) - Worst is 31 bits: 1046/2047 (0.51x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 41 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 526 (0.51x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 20/31 (0.63x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 519 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 36 bits: 40/63 (0.63x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 42 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 491 (0.48x) +Testing collisions (high 25-37 bits) - Worst is 34 bits: 144/255 (0.56x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 483 (0.47x) +Testing collisions (low 25-37 bits) - Worst is 35 bits: 69/127 (0.54x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 43 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 505 (0.49x) +Testing collisions (high 25-37 bits) - Worst is 36 bits: 37/63 (0.58x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 498 (0.49x) +Testing collisions (low 25-37 bits) - Worst is 30 bits: 2047/4095 (0.50x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 44 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 540 (0.53x) +Testing collisions (high 25-37 bits) - Worst is 32 bits: 540/1023 (0.53x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 546 (0.53x) +Testing collisions (low 25-37 bits) - Worst is 32 bits: 546/1023 (0.53x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 45 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 525 (0.51x) +Testing collisions (high 25-37 bits) - Worst is 35 bits: 80/127 (0.63x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 512 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 22/31 (0.69x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 46 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 504 (0.49x) +Testing collisions (high 25-37 bits) - Worst is 30 bits: 2108/4095 (0.51x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 475 (0.46x) +Testing collisions (low 25-37 bits) - Worst is 36 bits: 44/63 (0.69x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 47 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 482 (0.47x) +Testing collisions (high 25-37 bits) - Worst is 29 bits: 4162/8191 (0.51x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 496 (0.48x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 18/31 (0.56x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 48 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 514 (0.50x) +Testing collisions (high 25-37 bits) - Worst is 32 bits: 514/1023 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 504 (0.49x) +Testing collisions (low 25-37 bits) - Worst is 29 bits: 4145/8191 (0.51x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 49 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 526 (0.51x) +Testing collisions (high 25-37 bits) - Worst is 34 bits: 138/255 (0.54x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 507 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 36 bits: 36/63 (0.56x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 50 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 468 (0.46x) +Testing collisions (high 25-37 bits) - Worst is 30 bits: 2043/4095 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 540 (0.53x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 24/31 (0.75x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 51 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 550 (0.54x) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 283/511 (0.55x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 500 (0.49x) +Testing collisions (low 25-37 bits) - Worst is 36 bits: 34/63 (0.53x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 52 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 494 (0.48x) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 265/511 (0.52x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 500 (0.49x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 22/31 (0.69x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 53 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 539 (0.53x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 23/31 (0.72x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 497 (0.49x) +Testing collisions (low 25-37 bits) - Worst is 34 bits: 128/255 (0.50x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 54 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 483 (0.47x) +Testing collisions (high 25-37 bits) - Worst is 36 bits: 35/63 (0.55x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 521 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 32 bits: 521/1023 (0.51x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 55 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 470 (0.46x) +Testing collisions (high 25-37 bits) - Worst is 28 bits: 8204/16383 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 526 (0.51x) +Testing collisions (low 25-37 bits) - Worst is 35 bits: 73/127 (0.57x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 56 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 543 (0.53x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 18/31 (0.56x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 535 (0.52x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 19/31 (0.59x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 57 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 484 (0.47x) +Testing collisions (high 25-37 bits) - Worst is 27 bits: 16383/32767 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 517 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 31 bits: 1038/2047 (0.51x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 58 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 506 (0.49x) +Testing collisions (high 25-37 bits) - Worst is 30 bits: 2065/4095 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 483 (0.47x) +Testing collisions (low 25-37 bits) - Worst is 27 bits: 16495/32767 (0.50x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 59 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 491 (0.48x) +Testing collisions (high 25-37 bits) - Worst is 27 bits: 16335/32767 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 545 (0.53x) +Testing collisions (low 25-37 bits) - Worst is 35 bits: 71/127 (0.55x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 60 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 532 (0.52x) +Testing collisions (high 25-37 bits) - Worst is 32 bits: 532/1023 (0.52x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 502 (0.49x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 17/31 (0.53x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 61 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 547 (0.53x) +Testing collisions (high 25-37 bits) - Worst is 36 bits: 40/63 (0.63x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 545 (0.53x) +Testing collisions (low 25-37 bits) - Worst is 36 bits: 44/63 (0.69x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 62 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 484 (0.47x) +Testing collisions (high 25-37 bits) - Worst is 28 bits: 8232/16383 (0.50x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 488 (0.48x) +Testing collisions (low 25-37 bits) - Worst is 36 bits: 42/63 (0.66x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + +Testing bit 63 +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1024.0, actual 525 (0.51x) +Testing collisions (high 25-37 bits) - Worst is 37 bits: 22/31 (0.69x) +Testing collisions (high 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (high 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) +Testing collisions (low 32-bit) - Expected 1024.0, actual 511 (0.50x) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 18/31 (0.56x) +Testing collisions (low 12-bit) - Expected 2097152.0, actual 2093056 (1.00x) (-4096) +Testing collisions (low 8-bit) - Expected 2097152.0, actual 2096896 (1.00x) (-256) + + +[[[ MomentChi2 Tests ]]] + +Analyze hashes produced from a serie of linearly increasing numbers of 32-bit, using a step of 3 ... +Target values to approximate : 38918200.000000 - 410450.000000 +Popcount 1 stats : 38919061.861156 - 410466.355500 +Popcount 0 stats : 38919231.131045 - 410507.247471 +MomentChi2 for bits 1 : 0.904848 +MomentChi2 for bits 0 : 1.29511 + +Derivative stats (transition from 2 consecutive values) : +Popcount 1 stats : 38917694.479258 - 410430.433019 +Popcount 0 stats : 38920106.401216 - 410487.763517 +MomentChi2 for deriv b1 : 0.311314 +MomentChi2 for deriv b0 : 4.42709 + + Great !! + + + +Input vcode 0x00000001, Output vcode 0x00000001, Result vcode 0x00000001 +Verification value is 0x00000001 - Testing took -1709.305473 seconds +------------------------------------------------------------------------------- diff --git a/doc/table.html b/doc/table.html index e7003d8c..1f9a8560 100644 --- a/doc/table.html +++ b/doc/table.html @@ -869,6 +869,14 @@

SMhasher

+prvhash +393.21 +142.03 +532.15 (125) +157 + + + chaskey 735.85 168.05 diff --git a/main.cpp b/main.cpp index d2ddaf77..e1ca8f1e 100644 --- a/main.cpp +++ b/main.cpp @@ -277,6 +277,9 @@ HashInfo g_hashes[] = // different verif on gcc vs clang { floppsyhash_64, 64, 0x0, "floppsyhash", "slow hash designed for floating point hardware", GOOD }, { chaskey_test, 64, 0x81A90131, "chaskey", "mouha.be/chaskey/ with added seed support", GOOD }, +#ifdef HAVE_INT64 + { prvhash_test, 64, 0x84468B63, "prvhash", "github.com/avaneev/prvhash ", GOOD }, +#endif { siphash_test, 64, 0xC58D7F9C, "SipHash", "SipHash 2-4 - SSSE3 optimized", GOOD }, { halfsiphash_test, 32, 0xA7A05F72, "HalfSipHash", "HalfSipHash 2-4, 32bit", GOOD }, { GoodOAAT_test, 32, 0x7B14EEE5, "GoodOAAT", "Small non-multiplicative OAAT", GOOD }, diff --git a/prvhash42.h b/prvhash42.h new file mode 100644 index 00000000..3a5253c6 --- /dev/null +++ b/prvhash42.h @@ -0,0 +1,105 @@ +/** + * @file prvhash42.h + * + * @brief The inclusion file for the "prvhash42" hash function. + * + * @mainpage + * + * @section intro_sec Introduction + * + * Description is available at https://github.com/avaneev/prvhash + * + * @section license License + * + * Copyright (c) 2020 Aleksey Vaneev + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * @version 2.0 + */ + +//$ nocpp + +#ifndef PRVHASH42_INCLUDED +#define PRVHASH42_INCLUDED + +#include +#include + +/** + * PRVHASH hash function (64-bit with 32-bit hash word). Produces hash of the + * specified Message. + * + * @param Message Message to produce hash from. + * @param MessageLen Message length, in bytes. + * @param[out] Hash The resulting hash. + * @param HashLen The required hash length, in bytes, should be >= 4, in + * increments of 4. + * @param SeedXOR Optional value, to XOR the default seed with. To use the + * default seed, set to 0. + * @param InitLCG For development purposes, should be set to 0. If != 0, "lcg" + * value to use. + * @param InitSeed For development purposes, should be set to 0. If != 0, + * "Seed" value to use. + */ + +inline void prvhash42( const uint8_t* const Message, const int MessageLen, + uint8_t* const Hash, const int HashLen, const uint64_t SeedXOR, + const uint64_t InitLCG, const uint64_t InitSeed ) +{ + // Initialize the hash. + + memset( Hash, 0, HashLen ); + + uint64_t lcg = ( InitLCG == 0 ? 15267459991392010589ULL : InitLCG ); + // Multiplier inspired by LCG. This is not a prime number. It is a + // random sequence of bits. This value can be regenerated at will, + // possibly using various statistical search methods. The best + // strategies: 1) Compose both this and seed numbers of 8-bit values + // that have 4 random bits set; 2) Compose the 64-bit value that has + // 32 random bits set; same for seed. An important consideration here + // is to pass the 16-bit Sparse test. + + uint64_t Seed = ( InitSeed == 0 ? 7928988912013905173ULL : InitSeed ); + // Generated similarly to "lcg". + + Seed ^= SeedXOR; + int k; + + for( k = 0; k < MessageLen; k++ ) + { + const uint64_t m = Message[ k ]; + + Seed ^= m; + int i; + + for( i = 0; i < HashLen; i += 4 ) + { + Seed *= lcg; + uint32_t* const hc = (uint32_t*) &Hash[ i ]; + const uint64_t ph = *hc; + *hc ^= (uint32_t) ( Seed >> 32 ); + Seed ^= ph ^ m; + } + + lcg += Seed; + } +} + +#endif // PRVHASH42_INCLUDED