コード例 #1
0
        public void Remove_WithItemInCollection_ShouldReturnTrue()
        {
            var filter = CountingBloomFilter <int> .Create(100, 0.2);

            filter.Add(27);
            Assert.True(filter.Remove(27));
        }
コード例 #2
0
        public void Contains_WhenItemHasBeenAdded_ShouldReturnTrue()
        {
            var filter = CountingBloomFilter <int> .Create(50, 0.02);

            filter.Add(42);
            Assert.True(filter.Contains(42));
        }
コード例 #3
0
        public void Remove_WithItemInCollection_ShouldRemoveItemFromCollection()
        {
            var filter = CountingBloomFilter <int> .Create(100, 0.2);

            filter.Add(27);
            filter.Remove(27);
            Assert.False(filter.Contains(27));
        }
コード例 #4
0
        public void Add_WithCounterAtMaxValue_ShouldRemainConstant()
        {
            var filter = CountingBloomFilter <int> .Create(50, 0.01);

            while (filter.CounterAt(42) < byte.MaxValue)
            {
                filter.Add(42);
            }
            filter.Add(42); // one additional add to attempt to roll over byte.maxvalue
            Assert.True(filter.Contains(42));
        }
コード例 #5
0
        public void Contains_With5PercentFalsePositives_ShouldHaveLessThan5PercentErrors(int stepRange, double errorRate)
        {
            var filter = CountingBloomFilter <int> .Create(stepRange, errorRate);

            foreach (var num in Enumerable.Range(1, stepRange))
            {
                filter.Add(num);
            }

            var errorCount = Enumerable.Range(stepRange + 1, stepRange * 2).Count(num => filter.Contains(num));

            Assert.InRange(errorCount, 0d, errorRate * stepRange);
        }
コード例 #6
0
        public void Contains_WhenItemHasBeenAdded_AndFilterHasBeenSerializedAndUnserialized_ShouldReturnTrue()
        {
            using (var stream = new MemoryStream())
            {
                var filterOld = CountingBloomFilter <int> .Create(50, 0.02);

                filterOld.Add(42);
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(stream, filterOld);
                stream.Flush();
                stream.Position = 0;
                CountingBloomFilter <int> filterNew = (CountingBloomFilter <int>)formatter.Deserialize(stream);
                Assert.True(filterNew.Contains(42));
            }
        }
コード例 #7
0
        public void FillRatio_WithNewFilter_ShouldBeZero()
        {
            var filter = CountingBloomFilter <int> .Create(1000, 0.05);

            Assert.Equal(0d, filter.FillRatio);
        }
コード例 #8
0
        public void Remove_WithItemNotInCollection_ShouldReturnFalse()
        {
            var filter = CountingBloomFilter <int> .Create(100, 0.2);

            Assert.False(filter.Remove(27));
        }
コード例 #9
0
        public void Contains_WithFreshFilter_ShouldReturnFalse()
        {
            var filter = CountingBloomFilter <int> .Create(50, 0.02);

            Assert.False(filter.Contains(42));
        }