ogxd / gxhash

The fastest hashing algorithm 📈
https://docs.rs/gxhash
MIT License
766 stars 26 forks source link

Fix permutation quality issue #48

Closed ogxd closed 9 months ago

ogxd commented 9 months ago

Before:

Bench GxHash
  ✅ avalanche::<B,4>()
  ✅ avalanche::<B,10>()
  ✅ avalanche::<B,32>()
  ✅ avalanche::<B,128>()
  ✅ avalanche::<B,512>()
  ✅ distribution_values::<B,4>(128*128)
  ✅ distribution_values::<B,16>(128*128)
  ✅ distribution_values::<B,128>(128*128)
  ✅ distribution_values::<B,512>(128*128)
  ✅ distribution_bits::<B,4>()
  ✅ distribution_bits::<B,16>()
  ✅ distribution_bits::<B,128>()
  ✅ distribution_bits::<B,512>()
  ✅ collisions_padded_zeroes::<B>(128*128)
  ✅ collisions_flipped_n_bits::<B,2>(9)
  ✅ collisions_flipped_n_bits::<B,3>(9)
  ✅ collisions_flipped_n_bits::<B,4>(7)
  ✅ collisions_flipped_n_bits::<B,5>(6)
  ✅ collisions_flipped_n_bits::<B,6>(5)
  ✅ collisions_flipped_n_bits::<B,7>(5)
  ✅ collisions_flipped_n_bits::<B,9>(4)
  ✅ collisions_flipped_n_bits::<B,20>(4)
  ✅ collisions_flipped_n_bits::<B,32>(3)
  ✅ collisions_flipped_n_bits::<B,64>(3)
  ✅ collisions_flipped_n_bits::<B,256>(2)
  ✅ collisions_powerset_bytes::<B>(&[0,1,2,3,4,5,6,7,8,9])
  ✅ collisions_powerset_bytes::<B>(&[0,1,2,4,8,16,32,64,128])
  ❌ collisions_permuted_hasher_values::<B,u8>(&[0,1,2,3,4,5,6,7,8,9])
     | Score: 0.9999997244268077. Expected is 0.
  ❌ collisions_permuted_hasher_values::<B,u32>(&[0,1,2,3,4,5,6,7,8,9])
     | Score: 0.9999997244268077. Expected is 0.
  ❌ collisions_permuted_hasher_values::<B,u32>(&[0,1,2,4,8,16,32,64,128,256])
     | Score: 0.9999997244268077. Expected is 0.
  ❌ collisions_powerset_hasher_values::<B,u32>(&[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])
     | Score: 0.9960498809814453. Expected is 0.
  ✅ collisions_powerset_hasher_values::<B,u32>(&[0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384])

After:

Bench GxHash
  ✅ avalanche::<B,4>()
  ✅ avalanche::<B,10>()
  ✅ avalanche::<B,32>()
  ✅ avalanche::<B,128>()
  ✅ avalanche::<B,512>()
  ✅ distribution_values::<B,4>(128*128)
  ✅ distribution_values::<B,16>(128*128)
  ✅ distribution_values::<B,128>(128*128)
  ✅ distribution_values::<B,512>(128*128)
  ✅ distribution_bits::<B,4>()
  ✅ distribution_bits::<B,16>()
  ✅ distribution_bits::<B,128>()
  ✅ distribution_bits::<B,512>()
  ✅ collisions_padded_zeroes::<B>(128*128)
  ✅ collisions_flipped_n_bits::<B,2>(9)
  ✅ collisions_flipped_n_bits::<B,3>(9)
  ✅ collisions_flipped_n_bits::<B,4>(7)
  ✅ collisions_flipped_n_bits::<B,5>(6)
  ✅ collisions_flipped_n_bits::<B,6>(5)
  ✅ collisions_flipped_n_bits::<B,7>(5)
  ✅ collisions_flipped_n_bits::<B,9>(4)
  ✅ collisions_flipped_n_bits::<B,20>(4)
  ✅ collisions_flipped_n_bits::<B,32>(3)
  ✅ collisions_flipped_n_bits::<B,64>(3)
  ✅ collisions_flipped_n_bits::<B,256>(2)
  ✅ collisions_powerset_bytes::<B>(&[0,1,2,3,4,5,6,7,8,9])
  ✅ collisions_powerset_bytes::<B>(&[0,1,2,4,8,16,32,64,128])
  ✅ collisions_permuted_hasher_values::<B,u8>(&[0,1,2,3,4,5,6,7,8,9])
  ✅ collisions_permuted_hasher_values::<B,u32>(&[0,1,2,3,4,5,6,7,8,9])
  ✅ collisions_permuted_hasher_values::<B,u32>(&[0,1,2,4,8,16,32,64,128,256])
  ✅ collisions_powerset_hasher_values::<B,u32>(&[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])
  ✅ collisions_powerset_hasher_values::<B,u32>(&[0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384])

Merging and releasing this tomorrow :)