public HashBenchmark() { this.data = new byte[N]; new Random(42).NextBytes(this.data); this.farm = new FarmHash(); this.xxh32 = new XXHash32(); this.xxh64 = new XxHash64(); }
public void SanityTest() { // Arrange // Act ulong hash1 = XxHash64.Hash(0, new BinaryReader(new MemoryStream(buffer)), 0, 0); ulong hash2 = XxHash64.Hash(0, new BinaryReader(new MemoryStream(buffer)), 0, 1); ulong hash3 = XxHash64.Hash(PRIME, new BinaryReader(new MemoryStream(buffer)), 0, 1); ulong hash4 = XxHash64.Hash(0, new BinaryReader(new MemoryStream(buffer)), 0, 4); ulong hash5 = XxHash64.Hash(PRIME, new BinaryReader(new MemoryStream(buffer)), 0, 4); // Assert Assert.AreEqual(0xEF46DB3751D8E999, hash1); Assert.AreEqual(0x4FCE394CC88952D8L, hash2); Assert.AreEqual(0x739840CB819FA723L, hash3); Assert.AreEqual(0x9256E58AA397AEF1L, hash4); Assert.AreEqual(0x9D5FFDFB928AB4BL, hash5); }
protected override bool TryStaticOneShot(ReadOnlySpan <byte> source, Span <byte> destination, out int bytesWritten) => XxHash64.TryHash(source, destination, out bytesWritten);
protected override int StaticOneShot(ReadOnlySpan <byte> source, Span <byte> destination) => XxHash64.Hash(source, destination);
protected override byte[] StaticOneShot(ReadOnlySpan <byte> source) => XxHash64.Hash(source);
protected override byte[] StaticOneShot(byte[] source) => XxHash64.Hash(source);
public long XxHash64_BytesAsLong() => BitConverter.ToInt64(XxHash64.ComputeHash(MessageData).Hash, Zero);
public byte[] XxHash64_Bytes() => XxHash64.ComputeHash(MessageData).Hash;
public string XxHash64_AsHexString() => XxHash64.ComputeHash(MessageData).AsHexString();
public void TestHashUpdate() { const int N = 1_000_000; var random = new Random(42); var data = new byte[N]; random.NextBytes(data); // CRC-32 var crc32 = new Crc32(); for (var n = 0; n < 1000; n++) { var span = data.AsSpan(0, n); var h = BitConverter.ToUInt32(crc32.GetHash(span)); var h2 = Crc32.Hash32(span); Assert.Equal(h, h2); } this.TestHashUpdate_do(crc32, data, random); // Adler-32 var adler32 = new Adler32(); for (var n = 0; n < 1000; n++) { var span = data.AsSpan(0, n); var h = BitConverter.ToUInt32(adler32.GetHash(span)); var h2 = Adler32.Hash32(span); Assert.Equal(h, h2); } this.TestHashUpdate_do(adler32, data, random); // FarmHash var farm = new FarmHash(); for (var n = 0; n < 1000; n++) { var span = data.AsSpan(0, n); var h = BitConverter.ToUInt64(farm.GetHash(span)); var h2 = FarmHash.Hash64(span); Assert.Equal(h, h2); } this.TestHashUpdate_do(farm, data, random); // xxHash32 var xxh32 = new XXHash32(); for (var n = 0; n < 1000; n++) { var span = data.AsSpan(0, n); var h = BitConverter.ToUInt32(xxh32.GetHash(span)); var h2 = XXHash32.Hash32(span); Assert.Equal(h, h2); } this.TestHashUpdate_do(xxh32, data, random); // xxHash64 var xxh64 = new XxHash64(); for (var n = 0; n < 1000; n++) { var span = data.AsSpan(0, n); var h = BitConverter.ToUInt64(xxh64.GetHash(span)); var h2 = XxHash64.Hash64(span); Assert.Equal(h, h2); } this.TestHashUpdate_do(xxh64, data, random); // Sha1 using var sha1 = new Arc.Crypto.Sha1(); this.TestHashUpdate_do(sha1, data, random); // Sha2_256 using var sha2_256 = new Arc.Crypto.Sha2_256(); this.TestHashUpdate_do(sha2_256, data, random); // Sha2_384 using var sha2_384 = new Arc.Crypto.Sha2_384(); this.TestHashUpdate_do(sha2_384, data, random); // Sha2_512 using var sha2_512 = new Arc.Crypto.Sha2_512(); this.TestHashUpdate_do(sha2_512, data, random); // Sha3_256 var sha3_256 = new Arc.Crypto.Sha3_256(); this.TestHashUpdate_do(sha3_256, data, random); // Sha3_384 var sha3_384 = new Arc.Crypto.Sha3_384(); this.TestHashUpdate_do(sha3_384, data, random); // Sha3_512 var sha3_512 = new Arc.Crypto.Sha3_512(); this.TestHashUpdate_do(sha3_512, data, random); }