Exemple #1
0
        public void TestPartitionedK()
        {
            var f = new PartitionedBloomFilter(100, 0.1);
            var k = f.K();

            Assert.AreEqual(4u, k);
        }
Exemple #2
0
        public void TestPartitionedCapacity()
        {
            var f        = new PartitionedBloomFilter(100, 0.1);
            var capacity = f.Capacity();

            Assert.AreEqual(480u, capacity);
        }
Exemple #3
0
        public void TestPartitionedFillRatio()
        {
            var f = new PartitionedBloomFilter(100, 0.1);

            f.Add(A_BYTES);
            f.Add(B_BYTES);
            f.Add(C_BYTES);
            f.Add(X_BYTES);

            var ratio = f.FillRatio();

            Assert.AreEqual(0.03125, ratio);
        }
Exemple #4
0
        public void TestPartitionedCount()
        {
            var f = new PartitionedBloomFilter(100, 0.1);

            for (uint i = 0; i < 10; i++)
            {
                f.Add(Encoding.ASCII.GetBytes(i.ToString()));
            }

            var count = f.Count();

            Assert.AreEqual(10u, count);
        }
Exemple #5
0
        public void TestPartitionedEstimatedFillRatio()
        {
            var f = new PartitionedBloomFilter(100, 0.5);

            for (uint i = 0; i < 100; i++)
            {
                f.Add(Encoding.ASCII.GetBytes(i.ToString()));
            }

            var ratio = f.EstimatedFillRatio();

            if (ratio > 0.5)
            {
                Assert.Fail("Expected less than or equal to 0.5, got {0}", ratio);
            }
        }
Exemple #6
0
        public void BenchmarkPartitionedBloomTestAndAdd()
        {
            var n    = 100000;
            var f    = new PartitionedBloomFilter(100000, 0.1);
            var data = new byte[n][];

            for (int i = 0; i < n; i++)
            {
                data[i] = Encoding.ASCII.GetBytes(i.ToString());
            }

            for (int i = 0; i < n; i++)
            {
                f.TestAndAdd(data[i]);
            }
        }
Exemple #7
0
        public void TestPartitionedBloomReset()
        {
            var f = new PartitionedBloomFilter(100, 0.1);

            for (int i = 0; i < 1000; i++)
            {
                f.Add(Encoding.ASCII.GetBytes(i.ToString()));
            }

            var resetF = f.Reset();

            Assert.AreSame(f, resetF, "Returned PartitionedBloomFilter should be the same instance");

            foreach (var partition in f.Partitions)
            {
                for (uint i = 0; i < partition.count; i++)
                {
                    if (partition.Get(0) != 0)
                    {
                        Assert.Fail("Expected all bits to be unset");
                    }
                }
            }
        }
Exemple #8
0
        public void TestPartitionedBloomTestAndAdd()
        {
            var f = new PartitionedBloomFilter(100, 0.01);

            // 'a' is not in the filter.
            if (f.Test(A_BYTES))
            {
                Assert.Fail("'a' should not be a member");
            }

            var addedF = f.Add(A_BYTES);

            Assert.AreSame(f, addedF, "Returned PartitionedBloomFilter should be the same instance");

            // 'a' is now in the filter.
            if (!f.Test(A_BYTES))
            {
                Assert.Fail("'a' should be a member");
            }

            // 'a' is still in the filter.
            if (!f.TestAndAdd(A_BYTES))
            {
                Assert.Fail("'a' should be a member");
            }

            // 'b' is not in the filter.
            if (f.TestAndAdd(B_BYTES))
            {
                Assert.Fail("'b' should not be a member");
            }

            // 'a' is still in the filter.
            if (!f.Test(A_BYTES))
            {
                Assert.Fail("'a' should be a member");
            }

            // 'b' is now in the filter.
            if (!f.Test(B_BYTES))
            {
                Assert.Fail("'b' should be a member");
            }

            // 'c' is not in the filter.
            if (f.Test(C_BYTES))
            {
                Assert.Fail("'c' should not be a member");
            }

            for (int i = 0; i < 1000000; i++)
            {
                f.TestAndAdd(Encoding.ASCII.GetBytes(i.ToString()));
            }

            // 'x' should be a false positive.
            if (!f.Test(X_BYTES))
            {
                Assert.Fail("'x' should be a member");
            }
        }
        public void Serialize(Stream stream, PartitionedBloomFilter filter)
        {
            using (var bw = new BinaryWriter(stream))
            {
                bw.Write(DataFormatMajorVersion);
                bw.Write(DataFormatMinorVersion);

                PartitionedBloomState data = filter.GetState();

                Serialize(bw, data);

                bw.Flush();
            }

        }