public IdentifierInfo( BloomFilter identifierFilter, BloomFilter escapedIdentifierFilter) { _identifierFilter = identifierFilter ?? throw new ArgumentNullException(nameof(identifierFilter)); _escapedIdentifierFilter = escapedIdentifierFilter ?? throw new ArgumentNullException(nameof(escapedIdentifierFilter)); }
public SyntaxTreeIdentifierInfo( VersionStamp version, BloomFilter identifierFilter, BloomFilter escapedIdentifierFilter) : base(version) { _version = version; _identifierFilter = identifierFilter ?? throw new ArgumentNullException(nameof(identifierFilter)); _escapedIdentifierFilter = escapedIdentifierFilter ?? throw new ArgumentNullException(nameof(escapedIdentifierFilter)); }
public SyntaxTreeIdentifierInfo( VersionStamp version, BloomFilter identifierFilter, BloomFilter escapedIdentifierFilter) : base(version) { if (identifierFilter == null) { throw new ArgumentNullException("identifierFilter"); } if (escapedIdentifierFilter == null) { throw new ArgumentNullException("escapedIdentifierFilter"); } this.version = version; this.identifierFilter = identifierFilter; this.escapedIdentifierFilter = escapedIdentifierFilter; }
private void Test(bool isCaseSensitive) { var comparer = isCaseSensitive ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase; var strings = GenerateStrings(2000).Skip(500).Take(1000).ToSet(comparer); var testStrings = GenerateStrings(100000); for (var d = 0.1; d >= 0.0001; d /= 10) { var filter = new BloomFilter(strings.Count, d, isCaseSensitive); filter.AddRange(strings); var correctCount = 0.0; var incorrectCount = 0.0; foreach (var test in testStrings) { var actualContains = strings.Contains(test); var filterContains = filter.ProbablyContains(test); if (!filterContains) { // if the filter says no, then it can't be in the real set. Assert.False(actualContains); } if (actualContains == filterContains) { correctCount++; } else { incorrectCount++; } } var falsePositivePercentage = incorrectCount / (correctCount + incorrectCount); Assert.True(falsePositivePercentage < (d * 1.5), string.Format("falsePositivePercentage={0}, d={1}", falsePositivePercentage, d)); } }
public void TestEmpty() { for (var d = 0.1; d >= 0.0001; d /= 10) { var filter = new BloomFilter(0, d, isCaseSensitive: true); Assert.False(filter.ProbablyContains(string.Empty)); Assert.False(filter.ProbablyContains("a")); Assert.False(filter.ProbablyContains("b")); Assert.False(filter.ProbablyContains("c")); var testStrings = GenerateStrings(100000); foreach (var test in testStrings) { Assert.False(filter.ProbablyContains(test)); } } }
public void TestSerialization() { var stream = new MemoryStream(); var bloomFilter = new BloomFilter(0.001, false, new[] { "Hello, World" }); using (var writer = new StreamObjectWriter(stream)) { bloomFilter.WriteTo(writer); } stream.Position = 0; using (var reader = new StreamObjectReader(stream)) { var rehydratedFilter = BloomFilter.ReadFrom(reader); Assert.True(bloomFilter.IsEquivalent(rehydratedFilter)); } }