private void CheckOnAbsentFalsePositive(int hashId, int numInsertions, RetouchedBloomFilter filter, TestBloomFilters.Digits digits, short removeSchema) { AbstractCollection <Key> falsePositives = FalsePositiveUnder1000[hashId]; if (falsePositives == null) { NUnit.Framework.Assert.Fail(string.Format("false positives for hash %d not founded" , hashId)); } filter.AddFalsePositive(falsePositives); for (int i = digits.GetStart(); i < numInsertions; i += 2) { filter.Add(new Key(Runtime.GetBytesForString(Extensions.ToString( i)))); } foreach (Key key in falsePositives) { filter.SelectiveClearing(key, removeSchema); } for (int i_1 = 1 - digits.GetStart(); i_1 < numInsertions; i_1 += 2) { NUnit.Framework.Assert.IsFalse(" testRetouchedBloomFilterAddFalsePositive error " + i_1, filter.MembershipTest(new Key(Runtime.GetBytesForString(Extensions.ToString (i_1))))); } }
public virtual void TestRetouchedBloomFilterSpecific() { int numInsertions = 1000; int hashFunctionNumber = 5; ImmutableSet <int> hashes = ImmutableSet.Of(Org.Apache.Hadoop.Util.Hash.Hash.MurmurHash , Org.Apache.Hadoop.Util.Hash.Hash.JenkinsHash); foreach (int hashId in hashes) { RetouchedBloomFilter filter = new RetouchedBloomFilter(bitSize, hashFunctionNumber , hashId); CheckOnAbsentFalsePositive(hashId, numInsertions, filter, TestBloomFilters.Digits .Odd, RemoveScheme.MaximumFp); filter.And(new RetouchedBloomFilter(bitSize, hashFunctionNumber, hashId)); CheckOnAbsentFalsePositive(hashId, numInsertions, filter, TestBloomFilters.Digits .Even, RemoveScheme.MaximumFp); filter.And(new RetouchedBloomFilter(bitSize, hashFunctionNumber, hashId)); CheckOnAbsentFalsePositive(hashId, numInsertions, filter, TestBloomFilters.Digits .Odd, RemoveScheme.MinimumFn); filter.And(new RetouchedBloomFilter(bitSize, hashFunctionNumber, hashId)); CheckOnAbsentFalsePositive(hashId, numInsertions, filter, TestBloomFilters.Digits .Even, RemoveScheme.MinimumFn); filter.And(new RetouchedBloomFilter(bitSize, hashFunctionNumber, hashId)); CheckOnAbsentFalsePositive(hashId, numInsertions, filter, TestBloomFilters.Digits .Odd, RemoveScheme.Ratio); filter.And(new RetouchedBloomFilter(bitSize, hashFunctionNumber, hashId)); CheckOnAbsentFalsePositive(hashId, numInsertions, filter, TestBloomFilters.Digits .Even, RemoveScheme.Ratio); filter.And(new RetouchedBloomFilter(bitSize, hashFunctionNumber, hashId)); } }