public void testBloomFilterBytes()
        {
            BloomFilter bf = new BloomFilter(10000);
            byte[] val = new byte[] { 1, 2, 3 };
            byte[] val1 = new byte[] { 1, 2, 3, 4 };
            byte[] val2 = new byte[] { 1, 2, 3, 4, 5 };
            byte[] val3 = new byte[] { 1, 2, 3, 4, 5, 6 };

            Assert.Equal(false, bf.test(val));
            Assert.Equal(false, bf.test(val1));
            Assert.Equal(false, bf.test(val2));
            Assert.Equal(false, bf.test(val3));
            bf.add(val);
            Assert.Equal(true, bf.test(val));
            Assert.Equal(false, bf.test(val1));
            Assert.Equal(false, bf.test(val2));
            Assert.Equal(false, bf.test(val3));
            bf.add(val1);
            Assert.Equal(true, bf.test(val));
            Assert.Equal(true, bf.test(val1));
            Assert.Equal(false, bf.test(val2));
            Assert.Equal(false, bf.test(val3));
            bf.add(val2);
            Assert.Equal(true, bf.test(val));
            Assert.Equal(true, bf.test(val1));
            Assert.Equal(true, bf.test(val2));
            Assert.Equal(false, bf.test(val3));
            bf.add(val3);
            Assert.Equal(true, bf.test(val));
            Assert.Equal(true, bf.test(val1));
            Assert.Equal(true, bf.test(val2));
            Assert.Equal(true, bf.test(val3));

            byte[] randVal = new byte[COUNT];
            for (int i = 0; i < COUNT; i++)
            {
                rand.NextBytes(randVal);
                bf.add(randVal);
            }
            // last value should be present
            Assert.Equal(true, bf.test(randVal));
            // most likely this value should not exist
            randVal[0] = 0;
            randVal[1] = 0;
            randVal[2] = 0;
            randVal[3] = 0;
            randVal[4] = 0;
            Assert.Equal(false, bf.test(randVal));

            Assert.Equal(7800, bf.sizeInBytes());
        }
        public void testBloomFilterByte()
        {
            BloomFilter bf = new BloomFilter(10000);
            byte val = Byte.MinValue;
            byte val1 = 1;
            byte val2 = 2;
            byte val3 = Byte.MaxValue;

            Assert.Equal(false, bf.testLong(val));
            Assert.Equal(false, bf.testLong(val1));
            Assert.Equal(false, bf.testLong(val2));
            Assert.Equal(false, bf.testLong(val3));
            bf.addLong(val);
            Assert.Equal(true, bf.testLong(val));
            Assert.Equal(false, bf.testLong(val1));
            Assert.Equal(false, bf.testLong(val2));
            Assert.Equal(false, bf.testLong(val3));
            bf.addLong(val1);
            Assert.Equal(true, bf.testLong(val));
            Assert.Equal(true, bf.testLong(val1));
            Assert.Equal(false, bf.testLong(val2));
            Assert.Equal(false, bf.testLong(val3));
            bf.addLong(val2);
            Assert.Equal(true, bf.testLong(val));
            Assert.Equal(true, bf.testLong(val1));
            Assert.Equal(true, bf.testLong(val2));
            Assert.Equal(false, bf.testLong(val3));
            bf.addLong(val3);
            Assert.Equal(true, bf.testLong(val));
            Assert.Equal(true, bf.testLong(val1));
            Assert.Equal(true, bf.testLong(val2));
            Assert.Equal(true, bf.testLong(val3));

            byte randVal = 0;
            for (int i = 0; i < COUNT; i++)
            {
                randVal = (byte)rand.Next(Byte.MaxValue);
                bf.addLong(randVal);
            }
            // last value should be present
            Assert.Equal(true, bf.testLong(randVal));
            // most likely this value should not exist
            Assert.Equal(false, bf.testLong(unchecked((byte)-120)));

            Assert.Equal(7800, bf.sizeInBytes());
        }
        public void testBloomFilterLong()
        {
            BloomFilter bf = new BloomFilter(10000);
            long val = Int64.MinValue;
            long val1 = 1;
            long val2 = 2;
            long val3 = Int64.MaxValue;

            Assert.Equal(false, bf.testLong(val));
            Assert.Equal(false, bf.testLong(val1));
            Assert.Equal(false, bf.testLong(val2));
            Assert.Equal(false, bf.testLong(val3));
            bf.addLong(val);
            Assert.Equal(true, bf.testLong(val));
            Assert.Equal(false, bf.testLong(val1));
            Assert.Equal(false, bf.testLong(val2));
            Assert.Equal(false, bf.testLong(val3));
            bf.addLong(val1);
            Assert.Equal(true, bf.testLong(val));
            Assert.Equal(true, bf.testLong(val1));
            Assert.Equal(false, bf.testLong(val2));
            Assert.Equal(false, bf.testLong(val3));
            bf.addLong(val2);
            Assert.Equal(true, bf.testLong(val));
            Assert.Equal(true, bf.testLong(val1));
            Assert.Equal(true, bf.testLong(val2));
            Assert.Equal(false, bf.testLong(val3));
            bf.addLong(val3);
            Assert.Equal(true, bf.testLong(val));
            Assert.Equal(true, bf.testLong(val1));
            Assert.Equal(true, bf.testLong(val2));
            Assert.Equal(true, bf.testLong(val3));

            long randVal = 0;
            for (int i = 0; i < COUNT; i++)
            {
                randVal = rand.NextLong();
                bf.addLong(randVal);
            }
            // last value should be present
            Assert.Equal(true, bf.testLong(randVal));
            // most likely this value should not exist
            Assert.Equal(false, bf.testLong(-120));

            Assert.Equal(7800, bf.sizeInBytes());
        }
        public void testBloomFilterString()
        {
            BloomFilter bf = new BloomFilter(100000);
            string val = "bloo";
            string val1 = "bloom fil";
            string val2 = "bloom filter";
            string val3 = "cuckoo filter";

            Assert.Equal(false, bf.testString(val));
            Assert.Equal(false, bf.testString(val1));
            Assert.Equal(false, bf.testString(val2));
            Assert.Equal(false, bf.testString(val3));
            bf.addString(val);
            Assert.Equal(true, bf.testString(val));
            Assert.Equal(false, bf.testString(val1));
            Assert.Equal(false, bf.testString(val2));
            Assert.Equal(false, bf.testString(val3));
            bf.addString(val1);
            Assert.Equal(true, bf.testString(val));
            Assert.Equal(true, bf.testString(val1));
            Assert.Equal(false, bf.testString(val2));
            Assert.Equal(false, bf.testString(val3));
            bf.addString(val2);
            Assert.Equal(true, bf.testString(val));
            Assert.Equal(true, bf.testString(val1));
            Assert.Equal(true, bf.testString(val2));
            Assert.Equal(false, bf.testString(val3));
            bf.addString(val3);
            Assert.Equal(true, bf.testString(val));
            Assert.Equal(true, bf.testString(val1));
            Assert.Equal(true, bf.testString(val2));
            Assert.Equal(true, bf.testString(val3));

            long randVal = 0;
            for (int i = 0; i < COUNT; i++)
            {
                randVal = rand.NextLong();
                bf.addString(randVal.ToString(CultureInfo.InvariantCulture));
            }
            // last value should be present
            Assert.Equal(true, bf.testString(randVal.ToString(CultureInfo.InvariantCulture)));
            // most likely this value should not exist
            Assert.Equal(false, bf.testString((-120L).ToString(CultureInfo.InvariantCulture)));

            Assert.Equal(77944, bf.sizeInBytes());
        }
        public void testBloomFilterFloat()
        {
            BloomFilter bf = new BloomFilter(10000);
            float val = Single.MinValue;
            float val1 = 1.1f;
            float val2 = 2.2f;
            float val3 = Single.MaxValue;

            Assert.Equal(false, bf.testDouble(val));
            Assert.Equal(false, bf.testDouble(val1));
            Assert.Equal(false, bf.testDouble(val2));
            Assert.Equal(false, bf.testDouble(val3));
            bf.addDouble(val);
            Assert.Equal(true, bf.testDouble(val));
            Assert.Equal(false, bf.testDouble(val1));
            Assert.Equal(false, bf.testDouble(val2));
            Assert.Equal(false, bf.testDouble(val3));
            bf.addDouble(val1);
            Assert.Equal(true, bf.testDouble(val));
            Assert.Equal(true, bf.testDouble(val1));
            Assert.Equal(false, bf.testDouble(val2));
            Assert.Equal(false, bf.testDouble(val3));
            bf.addDouble(val2);
            Assert.Equal(true, bf.testDouble(val));
            Assert.Equal(true, bf.testDouble(val1));
            Assert.Equal(true, bf.testDouble(val2));
            Assert.Equal(false, bf.testDouble(val3));
            bf.addDouble(val3);
            Assert.Equal(true, bf.testDouble(val));
            Assert.Equal(true, bf.testDouble(val1));
            Assert.Equal(true, bf.testDouble(val2));
            Assert.Equal(true, bf.testDouble(val3));

            float randVal = 0;
            for (int i = 0; i < COUNT; i++)
            {
                randVal = rand.NextFloat();
                bf.addDouble(randVal);
            }
            // last value should be present
            Assert.Equal(true, bf.testDouble(randVal));
            // most likely this value should not exist
            Assert.Equal(false, bf.testDouble(-120.2f));

            Assert.Equal(7800, bf.sizeInBytes());
        }