示例#1
0
 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();
 }
示例#2
0
        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);
        }
示例#3
0
 protected override bool TryStaticOneShot(ReadOnlySpan <byte> source, Span <byte> destination, out int bytesWritten) =>
 XxHash64.TryHash(source, destination, out bytesWritten);
示例#4
0
 protected override int StaticOneShot(ReadOnlySpan <byte> source, Span <byte> destination) =>
 XxHash64.Hash(source, destination);
示例#5
0
 protected override byte[] StaticOneShot(ReadOnlySpan <byte> source) => XxHash64.Hash(source);
示例#6
0
 protected override byte[] StaticOneShot(byte[] source) => XxHash64.Hash(source);
示例#7
0
 public long XxHash64_BytesAsLong()
 => BitConverter.ToInt64(XxHash64.ComputeHash(MessageData).Hash, Zero);
示例#8
0
 public byte[] XxHash64_Bytes() => XxHash64.ComputeHash(MessageData).Hash;
示例#9
0
 public string XxHash64_AsHexString() => XxHash64.ComputeHash(MessageData).AsHexString();
示例#10
0
    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);
    }