This commit refines the check_256byte_hash() function by moving some checks to outer loop.
Signed-off-by: Alex Wang <[email protected]> --- tests/test-hash.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/tests/test-hash.c b/tests/test-hash.c index bc7c7e8..a84fef7 100644 --- a/tests/test-hash.c +++ b/tests/test-hash.c @@ -152,26 +152,30 @@ check_256byte_hash(void (*hash)(const void *, size_t, uint32_t, ovs_u128 *), int i, j; for (i = 0; i <= n_bits; i++) { + OVS_PACKED(struct offset_ovs_u128 { + uint32_t a; + ovs_u128 b[16]; + }) in0_data; + ovs_u128 *in0, in1[16]; + ovs_u128 out0, out1; + + in0 = in0_data.b; + set_bit128(in0, i); + set_bit128(in1, i); + hash(in0, sizeof(ovs_u128) * 16, 0, &out0); + hash(in1, sizeof(ovs_u128) * 16, 0, &out1); + if (!ovs_u128_equal(&out0, &out1)) { + printf("%s hash not the same for non-64 aligned data " + "%016"PRIx64"%016"PRIx64" != %016"PRIx64"%016"PRIx64"\n", + name, out0.u64.lo, out0.u64.hi, out1.u64.lo, out1.u64.hi); + } + for (j = i + 1; j <= n_bits; j++) { - OVS_PACKED(struct offset_ovs_u128 { - uint32_t a; - ovs_u128 b[16]; - }) in0_data; - ovs_u128 *in0, in1[16], in2[16]; - ovs_u128 out0, out1, out2; + ovs_u128 in2[16]; + ovs_u128 out2; - in0 = in0_data.b; - set_bit128(in0, i); - set_bit128(in1, i); set_bit128(in2, j); - hash(in0, sizeof(ovs_u128) * 16, 0, &out0); - hash(in1, sizeof(ovs_u128) * 16, 0, &out1); hash(in2, sizeof(ovs_u128) * 16, 0, &out2); - if (!ovs_u128_equal(&out0, &out1)) { - printf("%s hash not the same for non-64 aligned data " - "%016"PRIx64"%016"PRIx64" != %016"PRIx64"%016"PRIx64"\n", - name, out0.u64.lo, out0.u64.hi, out1.u64.lo, out1.u64.hi); - } if ((out1.u64.lo & unique_mask) == (out2.u64.lo & unique_mask)) { printf("%s has a partial collision:\n", name); printf("hash(1 << %4d) == %016"PRIx64"%016"PRIx64"\n", i, -- 1.7.9.5 _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
