public void Insert_ValidInput_Success()
        {
            int positives = 1000;
            // Arrange
            var filter = new CuckooFilter(2 * positives, 0.01);

            // Act
            for (int i = 0; i < positives; i++)
            {
                filter.Insert(i);
            }

            // Assert
            for (int i = 0; i < positives; i++)
            {
                Assert.That(filter.Contains(i), Is.True, $"{i} is not tested positive");
            }
            for (int i = positives; i < 2 * positives; i++)
            {
                Assert.That(filter.Contains(i), Is.False, $"{i} is a false positive");
            }
        }
        public Media GetContent(int id)
        {
            if (_cache.ContainsKey(id))
            {
                return(_cache.Get(id));
            }

            var content = _storage.GetContent(id);

            var probablyFetchedBefore = _cuckoo.Contains(id);

            if (probablyFetchedBefore)
            {
                _cache.Add(id, content);
            }

            _cuckoo.Insert(id);
            return(content);
        }
        public void Remove_ValidInput_Success()
        {
            // Arrange
            int numElements = 10000;
            var filter      = new CuckooFilter(numElements, 0.01);

            // Act
            for (int i = 0; i < numElements; i++)
            {
                filter.Insert(i);
            }
            for (int i = 0; i < numElements; i++)
            {
                filter.Remove(i);
            }

            // Assert
            for (int i = 0; i < numElements; i++)
            {
                Assert.That(filter.Contains(i), Is.False, $"{i} is not removed");
            }
        }