예제 #1
0
        public void recover_correctly(string name, bool expected, byte[] bytes)
        {
            var originalBytes = bytes.ToArray();

            var byteSpan = bytes.AsSpan();

            if (expected)
            {
                Assert.True(BloomFilterIntegrity.ValidateHash(byteSpan));

                // bytes should be unchanged
                for (var i = 0; i < bytes.Length; i++)
                {
                    Assert.AreEqual(originalBytes[i], bytes[i]);
                }
            }
            else
            {
                Assert.False(BloomFilterIntegrity.ValidateHash(byteSpan));

                // bytes should be all 1s
                foreach (var b in bytes)
                {
                    Assert.AreEqual(0b1111_1111, b);
                }
            }
        }
예제 #2
0
        public void rehash_when_exactly_one_too_many_bits_are_set()
        {
            // some data with hash
            var cacheLine = NewCacheLine(0x01).WithHash();

            // set an extra bit
            cacheLine[3] = cacheLine[3].SetBit(3);
            var copy = cacheLine.ToArray();

            // still valid
            Assert.True(BloomFilterIntegrity.ValidateHash(cacheLine));

            // same data
            CollectionAssert.AreEqual(copy[..^ 4], cacheLine[..^ 4]);
예제 #3
0
        public void write_correctly(string name, bool expected, byte[] bytes)
        {
            var originalBytes = bytes.ToArray();
            var byteSpan      = bytes.AsSpan();

            BloomFilterIntegrity.WriteHash(byteSpan);

            // bytes before the hash should be unchanged
            for (var i = 0; i < bytes.Length - sizeof(uint); i++)
            {
                Assert.AreEqual(originalBytes[i], bytes[i]);
            }

            // cacheline should be valid
            if (expected)
            {
                Assert.True(BloomFilterIntegrity.ValidateHash(byteSpan));
            }
            else
            {
                Assert.False(BloomFilterIntegrity.ValidateHash(byteSpan));
            }
        }