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;
        }
Beispiel #4
0
        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));
            }
        }
Beispiel #5
0
        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));
                }
            }
        }
Beispiel #6
0
        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));
            }
        }