On Fri, Oct 13, 2017 at 3:00 AM, Andres Freund <and...@anarazel.de> wrote:
> On 2017-10-12 17:27:52 -0400, Robert Haas wrote:
>> On Thu, Oct 12, 2017 at 4:20 PM, Andres Freund <and...@anarazel.de> wrote:
>> >> In other words, it's not utterly fixed in stone --- we invented
>> >> --load-via-partition-root primarily to cope with circumstances that
>> >> could change hash values --- but we sure don't want to be changing it
>> >> with any regularity, or for a less-than-excellent reason.
>> >
>> > Yea, that's what I expected. It'd probably good for somebody to run
>> > smhasher or such on the output of the combine function (or even better,
>> > on both the 32 and 64 bit variants) in that case.
>>
>> Not sure how that test suite works exactly, but presumably the
>> characteristics in practice will depend the behavior of the hash
>> functions used as input the combine function - so the behavior could
>> be good for an (int, int) key but bad for a (text, date) key, or
>> whatever.
>
> I don't think that's true, unless you have really bad hash functions on
> the the component hashes. A hash combine function can't really do
> anything about badly hashed input, what you want is that it doesn't
> *reduce* the quality of the hash by combining.
>

I tried to get suggested SMHasher[1] test result for the hash_combine
for 32-bit and 64-bit version.

SMHasher works on hash keys of the form {0}, {0,1}, {0,1,2}... up to
N=255, using 256-N as the seed, for the hash_combine testing we
needed two hash value to be combined, for that, I've generated 64
and 128-bit hash using cityhash functions[2] for the given smhasher
key then split in two part to test 32-bit and 64-bit hash_combine
function respectively.   Attached patch for SMHasher code changes &
output of 32-bit and 64-bit hash_combine testing. Note that I have
skipped speed test this test which is irrelevant here.

By referring other hash function results [3], we can see that hash_combine
test results are not bad either.

Do let me know if current testing is not good enough or if you want me to do
more testing, thanks.

1] https://github.com/aappleby/smhasher
2] https://github.com/aappleby/smhasher/blob/master/src/CityTest.cpp
3] https://github.com/rurban/smhasher/tree/master/doc

Regards,
Amul
[amul.sul@power2 src]$ ./SMHasher hash_combine64
-------------------------------------------------------------------------------
--- Testing hash_combine64 (test hash combine 64 pg function.)

[[[ Sanity Tests ]]]   

Verification value 0x3B439A64 : Passed!
Running sanity check 1..........PASS
Running sanity check 2..........PASS

[[[ Differential Tests ]]]

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

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

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


[[[ Avalanche Tests ]]]

Testing  32-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.742667%
Testing  40-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.684667%
Testing  48-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.570667%
Testing  56-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.726667%
Testing  64-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.666667%
Testing  72-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.659333%
Testing  80-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.666000%
Testing  88-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.712000%
Testing  96-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.632667%
Testing 104-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.646000%
Testing 112-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.746000%
Testing 120-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.692667%
Testing 128-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.684000%
Testing 136-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.758667%
Testing 144-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.725333%
Testing 152-bit keys ->  64-bit hashes,   300000 reps.......... worst bias is 
0.776000%

[[[ Keyset 'Cyclic' Tests ]]]

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

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

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

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

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


[[[ Keyset 'TwoBytes' Tests ]]]

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

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

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

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

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


[[[ Keyset 'Sparse' Tests ]]]

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

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

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

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

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

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

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

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


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

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


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

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


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

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


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

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


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

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


[[[ Keyset 'Window' Tests ]]]

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

[[[ Keyset 'Text' Tests ]]]

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

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

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


[[[ Keyset 'Zeroes' Tests ]]]

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


[[[ Keyset 'Seed' Tests ]]]

Keyset 'Seed' - 1000000 keys
Testing collisions   - Expected     0.00, actual     0.00 ( 0.00x)
Testing distribution - Worst bias is the  17-bit window at bit  57 - 0.142%



Input vcode 0x00000001, Output vcode 0x00000001, Result vcode 0x00000001
Verification value is 0x00000001 - Testing took 1522.120000 seconds
-------------------------------------------------------------------------------
[amul.sul@power2 src]$  

[amul.sul@power2 src]$ ./SMHasher hash_combine32
-------------------------------------------------------------------------------
--- Testing hash_combine32 (test hash combine 32 pg function.)

[[[ Sanity Tests ]]]   

Verification value 0x83D5F11A : Passed!
Running sanity check 1..........PASS
Running sanity check 2..........PASS

[[[ Differential Tests ]]]

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

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

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


[[[ Avalanche Tests ]]]

Testing  32-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.707333%
Testing  40-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.671333%
Testing  48-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.646667%
Testing  56-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.672667%
Testing  64-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.677333%
Testing  72-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.653333%
Testing  80-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.620667%
Testing  88-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.746000%
Testing  96-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.582667%
Testing 104-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.628667%
Testing 112-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.694667%
Testing 120-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.638000%
Testing 128-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.670000%
Testing 136-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.789333%
Testing 144-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.684667%
Testing 152-bit keys ->  32-bit hashes,   300000 reps.......... worst bias is 
0.671333%

[[[ Keyset 'Cyclic' Tests ]]]

Keyset 'Cyclic' - 8 cycles of 4 bytes - 10000000 keys
Testing collisions   - Expected 11641.53, actual 11635.00 ( 1.00x)
Testing distribution - Worst bias is the  20-bit window at bit  20 - 0.032%

Keyset 'Cyclic' - 8 cycles of 5 bytes - 10000000 keys
Testing collisions   - Expected 11641.53, actual 11566.00 ( 0.99x)
Testing distribution - Worst bias is the  20-bit window at bit  22 - 0.024%

Keyset 'Cyclic' - 8 cycles of 6 bytes - 10000000 keys
Testing collisions   - Expected 11641.53, actual 11704.00 ( 1.01x)
Testing distribution - Worst bias is the  20-bit window at bit  19 - 0.039%

Keyset 'Cyclic' - 8 cycles of 7 bytes - 10000000 keys
Testing collisions   - Expected 11641.53, actual 11747.00 ( 1.01x)
Testing distribution - Worst bias is the  20-bit window at bit  28 - 0.033%

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


[[[ Keyset 'TwoBytes' Tests ]]]

Keyset 'TwoBytes' - up-to-4-byte keys, 652545 total keys
Testing collisions   - Expected    49.57, actual    49.00 ( 0.99x)
Testing distribution - Worst bias is the  16-bit window at bit   8 - 0.131%

Keyset 'TwoBytes' - up-to-8-byte keys, 5471025 total keys
Testing collisions   - Expected  3484.56, actual  3642.00 ( 1.05x)
Testing distribution - Worst bias is the  20-bit window at bit   1 - 0.046%

Keyset 'TwoBytes' - up-to-12-byte keys, 18616785 total keys
Testing collisions   - Expected 40347.77, actual 40030.00 ( 0.99x)
Testing distribution - Worst bias is the  20-bit window at bit   3 - 0.017%

Keyset 'TwoBytes' - up-to-16-byte keys, 44251425 total keys
Testing collisions   - Expected 227963.15, actual 227430.00 ( 1.00x)
Testing distribution - Worst bias is the  19-bit window at bit   0 - 0.009%

Keyset 'TwoBytes' - up-to-20-byte keys, 86536545 total keys
Testing collisions   - Expected 871784.70, actual 866342.00 ( 0.99x)
Testing distribution - Worst bias is the  20-bit window at bit   9 - 0.003%


[[[ Keyset 'Sparse' Tests ]]]

Keyset 'Sparse' - 32-bit keys with up to 6 bits set - 1149017 keys
Testing collisions   - Expected   153.70, actual   118.00 ( 0.77x)
Testing distribution - Worst bias is the  16-bit window at bit  14 - 0.084%

Keyset 'Sparse' - 40-bit keys with up to 6 bits set - 4598479 keys
Testing collisions   - Expected  2461.72, actual  2400.00 ( 0.97x)
Testing distribution - Worst bias is the  19-bit window at bit  14 - 0.053%

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

Keyset 'Sparse' - 56-bit keys with up to 5 bits set - 4216423 keys
Testing collisions   - Expected  2069.66, actual  2034.00 ( 0.98x)
Testing distribution - Worst bias is the  18-bit window at bit  22 - 0.048%

Keyset 'Sparse' - 64-bit keys with up to 5 bits set - 8303633 keys
Testing collisions   - Expected  8026.87, actual  8110.00 ( 1.01x)
Testing distribution - Worst bias is the  20-bit window at bit  22 - 0.023%

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

Keyset 'Sparse' - 256-bit keys with up to 3 bits set - 2796417 keys
Testing collisions   - Expected   910.36, actual   966.00 ( 1.06x)
Testing distribution - Worst bias is the  19-bit window at bit  27 - 0.088%

Keyset 'Sparse' - 2048-bit keys with up to 2 bits set - 2098177 keys
Testing collisions   - Expected   512.50, actual   506.00 ( 0.99x)
Testing distribution - Worst bias is the  18-bit window at bit  23 - 0.077%


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

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


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

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


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

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


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

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


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

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


[[[ Keyset 'Window' Tests ]]]

Keyset 'Windowed' -  64-bit key,  20-bit window - 64 tests, 1048576 keys per 
test
Window at   0 - Testing collisions   - Expected   128.00, actual   142.00 ( 
1.11x)
Window at   1 - Testing collisions   - Expected   128.00, actual   120.00 ( 
0.94x)
Window at   2 - Testing collisions   - Expected   128.00, actual   123.00 ( 
0.96x)
Window at   3 - Testing collisions   - Expected   128.00, actual   124.00 ( 
0.97x)
Window at   4 - Testing collisions   - Expected   128.00, actual   126.00 ( 
0.98x)
Window at   5 - Testing collisions   - Expected   128.00, actual   118.00 ( 
0.92x)
Window at   6 - Testing collisions   - Expected   128.00, actual   114.00 ( 
0.89x)
Window at   7 - Testing collisions   - Expected   128.00, actual   125.00 ( 
0.98x)
Window at   8 - Testing collisions   - Expected   128.00, actual   139.00 ( 
1.09x)
Window at   9 - Testing collisions   - Expected   128.00, actual   139.00 ( 
1.09x)
Window at  10 - Testing collisions   - Expected   128.00, actual   131.00 ( 
1.02x)
Window at  11 - Testing collisions   - Expected   128.00, actual   118.00 ( 
0.92x)
Window at  12 - Testing collisions   - Expected   128.00, actual   137.00 ( 
1.07x)
Window at  13 - Testing collisions   - Expected   128.00, actual   119.00 ( 
0.93x)
Window at  14 - Testing collisions   - Expected   128.00, actual   153.00 ( 
1.20x)
Window at  15 - Testing collisions   - Expected   128.00, actual   142.00 ( 
1.11x)
Window at  16 - Testing collisions   - Expected   128.00, actual   138.00 ( 
1.08x)
Window at  17 - Testing collisions   - Expected   128.00, actual   124.00 ( 
0.97x)
Window at  18 - Testing collisions   - Expected   128.00, actual   119.00 ( 
0.93x)
Window at  19 - Testing collisions   - Expected   128.00, actual   119.00 ( 
0.93x)
Window at  20 - Testing collisions   - Expected   128.00, actual   131.00 ( 
1.02x)
Window at  21 - Testing collisions   - Expected   128.00, actual   116.00 ( 
0.91x)
Window at  22 - Testing collisions   - Expected   128.00, actual   106.00 ( 
0.83x)
Window at  23 - Testing collisions   - Expected   128.00, actual   130.00 ( 
1.02x)
Window at  24 - Testing collisions   - Expected   128.00, actual   140.00 ( 
1.09x)
Window at  25 - Testing collisions   - Expected   128.00, actual   128.00 ( 
1.00x)
Window at  26 - Testing collisions   - Expected   128.00, actual   138.00 ( 
1.08x)
Window at  27 - Testing collisions   - Expected   128.00, actual   143.00 ( 
1.12x)
Window at  28 - Testing collisions   - Expected   128.00, actual    91.00 ( 
0.71x)
Window at  29 - Testing collisions   - Expected   128.00, actual   126.00 ( 
0.98x)
Window at  30 - Testing collisions   - Expected   128.00, actual   122.00 ( 
0.95x)
Window at  31 - Testing collisions   - Expected   128.00, actual   106.00 ( 
0.83x)
Window at  32 - Testing collisions   - Expected   128.00, actual   110.00 ( 
0.86x)
Window at  33 - Testing collisions   - Expected   128.00, actual   116.00 ( 
0.91x)
Window at  34 - Testing collisions   - Expected   128.00, actual   137.00 ( 
1.07x)
Window at  35 - Testing collisions   - Expected   128.00, actual   113.00 ( 
0.88x)
Window at  36 - Testing collisions   - Expected   128.00, actual   150.00 ( 
1.17x)
Window at  37 - Testing collisions   - Expected   128.00, actual   144.00 ( 
1.13x)
Window at  38 - Testing collisions   - Expected   128.00, actual   125.00 ( 
0.98x)
Window at  39 - Testing collisions   - Expected   128.00, actual   141.00 ( 
1.10x)
Window at  40 - Testing collisions   - Expected   128.00, actual   106.00 ( 
0.83x)
Window at  41 - Testing collisions   - Expected   128.00, actual   120.00 ( 
0.94x)
Window at  42 - Testing collisions   - Expected   128.00, actual   144.00 ( 
1.13x)
Window at  43 - Testing collisions   - Expected   128.00, actual   147.00 ( 
1.15x)
Window at  44 - Testing collisions   - Expected   128.00, actual   131.00 ( 
1.02x)
Window at  45 - Testing collisions   - Expected   128.00, actual   116.00 ( 
0.91x)
Window at  46 - Testing collisions   - Expected   128.00, actual   121.00 ( 
0.95x)
Window at  47 - Testing collisions   - Expected   128.00, actual   130.00 ( 
1.02x)
Window at  48 - Testing collisions   - Expected   128.00, actual   131.00 ( 
1.02x)
Window at  49 - Testing collisions   - Expected   128.00, actual   127.00 ( 
0.99x)
Window at  50 - Testing collisions   - Expected   128.00, actual   140.00 ( 
1.09x)
Window at  51 - Testing collisions   - Expected   128.00, actual   129.00 ( 
1.01x)
Window at  52 - Testing collisions   - Expected   128.00, actual   119.00 ( 
0.93x)
Window at  53 - Testing collisions   - Expected   128.00, actual   104.00 ( 
0.81x)
Window at  54 - Testing collisions   - Expected   128.00, actual   104.00 ( 
0.81x)
Window at  55 - Testing collisions   - Expected   128.00, actual   119.00 ( 
0.93x)
Window at  56 - Testing collisions   - Expected   128.00, actual   139.00 ( 
1.09x)
Window at  57 - Testing collisions   - Expected   128.00, actual   144.00 ( 
1.13x)
Window at  58 - Testing collisions   - Expected   128.00, actual   143.00 ( 
1.12x)
Window at  59 - Testing collisions   - Expected   128.00, actual   143.00 ( 
1.12x)
Window at  60 - Testing collisions   - Expected   128.00, actual   142.00 ( 
1.11x)
Window at  61 - Testing collisions   - Expected   128.00, actual   145.00 ( 
1.13x)
Window at  62 - Testing collisions   - Expected   128.00, actual   142.00 ( 
1.11x)
Window at  63 - Testing collisions   - Expected   128.00, actual   142.00 ( 
1.11x)
Window at  64 - Testing collisions   - Expected   128.00, actual   142.00 ( 
1.11x)

[[[ Keyset 'Text' Tests ]]]

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

Keyset 'Text' - keys of form "FooBar[XXXX]" - 14776336 keys
Testing collisions   - Expected 25418.13, actual 25482.00 ( 1.00x)
Testing distribution - Worst bias is the  19-bit window at bit  31 - 0.016%

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


[[[ Keyset 'Zeroes' Tests ]]]

Keyset 'Zeroes' - 65536 keys
Testing collisions   - Expected     0.50, actual     1.00 ( 2.00x) !!!!!
Testing distribution - Worst bias is the  13-bit window at bit   1 - 0.290%

*********FAIL********* 


[[[ Keyset 'Seed' Tests ]]]

Keyset 'Seed' - 1000000 keys
Testing collisions   - Expected   116.42, actual   107.00 ( 0.92x)
Testing distribution - Worst bias is the  16-bit window at bit  14 - 0.106%



Input vcode 0x46ec7f3b, Output vcode 0x36f74c49, Result vcode 0x00000001
Verification value is 0x00000001 - Testing took -1682.347296 seconds
-------------------------------------------------------------------------------
[amul.sul@power2 src]$ 

Attachment: 0001-add-hash_combine-functions-in-SMHasher.patch
Description: Binary data

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to