public void TestBloom64K()
        {
            var f = new BloomFilter64(100, 0.1);
            var k = f.K();

            Assert.AreEqual(4u, k);
        }
Example #2
0
        public static CollectionOfBloomFilters Load(Mode mode, TransactionOperationContext indexContext)
        {
            var tree       = indexContext.Transaction.InnerTransaction.CreateTree("BloomFilters");
            var count      = GetCount(tree, ref mode);
            var collection = new CollectionOfBloomFilters(mode, tree, indexContext);

            for (var i = 0; i < count; i++)
            {
                BloomFilter filter = null;
                switch (mode)
                {
                case Mode.X64:
                    filter = new BloomFilter64(i, tree, writeable: false, allocator: indexContext.Allocator);
                    break;

                case Mode.X86:
                    filter = new BloomFilter32(i, tree, writeable: false, allocator: indexContext.Allocator);
                    break;
                }

                collection.AddFilter(filter);
            }

            collection.Initialize();

            return(collection);
        }
        public void TestBloomCapacity()
        {
            var f        = new BloomFilter64(100, 0.1);
            var capacity = f.Capacity();

            Assert.AreEqual(480u, capacity);
        }
 public void Testinitialize()
 {
     n    = 100000;
     f    = new BloomFilter64(100000, 0.1);
     data = new byte[n][];
     for (int i = 0; i < n; i++)
     {
         data[i] = Encoding.ASCII.GetBytes(i.ToString());
     }
 }
        public void TestBloom64FillRatio()
        {
            var f = new BloomFilter64(100, 0.1);

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

            var ratio = f.FillRatio();

            Assert.AreEqual(0.025, ratio);
        }
        public void TestBloom64Count()
        {
            var f = new BloomFilter64(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);
        }
        public static CollectionOfBloomFilters Load(Mode mode, TransactionOperationContext indexContext)
        {
            var isNew = false;
            var tree  = indexContext.Transaction.InnerTransaction.ReadTree(BloomFiltersTreeName);

            if (tree == null)
            {
                isNew = true;
                tree  = indexContext.Transaction.InnerTransaction.CreateTree(BloomFiltersTreeName);
            }

            var version = GetVersion(tree, isNew);
            var count   = GetCount(tree, ref mode);

            if (count == _consumed)
            {
                Debug.Assert(mode == Mode.X86, "BloomFilters in x64 mode got consumed, should not happen and likely a bug!");

                var consumedCollection = new CollectionOfBloomFilters(mode, version, tree: null, context: null)
                {
                    Consumed = true
                };

                return(consumedCollection);
            }

            var collection = new CollectionOfBloomFilters(mode, version, tree, indexContext);

            for (var i = 0; i < count; i++)
            {
                BloomFilter filter = null;
                switch (mode)
                {
                case Mode.X64:
                    filter = new BloomFilter64(i, version, tree, writable: false, allocator: indexContext.Allocator);
                    break;

                case Mode.X86:
                    filter = new BloomFilter32(i, version, tree, writable: false, allocator: indexContext.Allocator);
                    break;
                }

                collection.AddFilter(filter);
            }

            collection.Initialize();

            return(collection);
        }
        public void TestBloom64EstimatedFillRatio()
        {
            var f = new BloomFilter64(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);
            }
        }
        public void TestBloom64Reset()
        {
            var f = new BloomFilter64(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 BloomFilter64 should be the same instance");

            for (uint i = 0; i < f.Buckets.count; i++)
            {
                if (f.Buckets.Get(i) != 0)
                {
                    Assert.Fail("Expected all bits to be unset");
                }
            }
        }
 public void TestCleanup()
 {
     f    = null;
     n    = 0;
     data = null;
 }
        public void TestBloom64TestAndAdd()
        {
            var f = new BloomFilter64(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 BloomFilter64 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");
            }
        }