Beispiel #1
0
    private static AhoCorasick BuildAhoCorasick(SqlXml xml, SqlString culture)
    {
        var          xe         = XElement.Load(xml.CreateReader());
        var          words      = xe.Elements().Select(e => e.FirstAttribute.Value);
        var          c          = culture.Value.Split(':');
        var          ignoreCase = c.Length > 1 && c[1] == "i";
        CharComparer cc;

        switch (c[0])
        {
        case "c":
            cc = CharComparer.Create(CultureInfo.CurrentCulture, ignoreCase);
            break;

        case "n":
            cc = CharComparer.Create(CultureInfo.InvariantCulture, ignoreCase);
            break;

        case "o":
        case "":
            cc = ignoreCase ? CharComparer.OrdinalIgnoreCase : CharComparer.Ordinal;
            break;

        default:
            cc = CharComparer.Create(CultureInfo.GetCultureInfo(c[0]), ignoreCase);
            break;
        }
        var ac = new AhoCorasick(cc, words);

        return(ac);
    }
Beispiel #2
0
        public IDictionary <char, string> GetCodes(string str)
        {
            FillFrequencyList(str, true);
            var codes        = new Dictionary <char, string>();
            var frequency    = new List <Symbol>(Frequency);
            var charComparer = new CharComparer();

            while (frequency.Count > 1)
            {
                var first = frequency.Last();
                frequency.Remove(first);
                var second = frequency.Last();
                frequency.Remove(second);

                var unionSymbols = new Symbol(first.Current + second.Current,
                                              first.Frequency + second.Frequency)
                {
                    Left  = first,
                    Right = second
                };

                frequency.Add(unionSymbols);
                frequency.Sort(charComparer);
            }

            FillCodesDictionary(frequency.First(), codes);

            return(codes);
        }
Beispiel #3
0
        public void GetComparer_OrdinalIgnoreCase()
        {
            //Act
            var actual = CharComparer.GetComparer(StringComparison.OrdinalIgnoreCase);

            //Assert
            actual.Should().Be(CharComparer.OrdinalIgnoreCase);
        }
Beispiel #4
0
        public void GetComparer_InvariantCultureIgnoreCase()
        {
            //Act
            var actual = CharComparer.GetComparer(StringComparison.InvariantCultureIgnoreCase);

            //Assert
            actual.Should().Be(CharComparer.InvariantCultureIgnoreCase);
        }
Beispiel #5
0
        public void Compare_CurrentCultureIgnoreCase_FirstLessThanSecond()
        {
            //Act - Cannot actually detect comparer type so use heuristics
            var target = CharComparer.GetComparer(StringComparison.CurrentCultureIgnoreCase);
            var actual = target.Compare(SmallLetterI, SmallDotlessLetterI);

            //Assert
            actual.Should().Be(-1);
        }
Beispiel #6
0
        public void Compare_CurrentCultureIgnoreCase_MixedCase()
        {
            //Act - Cannot actually detect comparer type so use heuristics
            var target = CharComparer.GetComparer(StringComparison.CurrentCultureIgnoreCase);
            var actual = target.Compare(CapitalLetterI, SmallLetterI);

            //Assert
            actual.Should().Be(0);
        }
Beispiel #7
0
        public void Compare_CurrentCultureIgnoreCase_SameCase()
        {
            //Act
            var target = CharComparer.GetComparer(StringComparison.CurrentCultureIgnoreCase);
            var actual = target.Compare(CapitalLetterI, CapitalLetterI);

            //Assert
            actual.Should().Be(0);
        }
Beispiel #8
0
        public void GetComparer_CurrentCultureIgnoreCase()
        {
            //Act - Cannot actually detect comparer type so use heuristics
            var target = CharComparer.GetComparer(StringComparison.CurrentCultureIgnoreCase);
            var actual = target.Compare('A', 'a');

            //Assert
            actual.Should().Be(0);
        }
Beispiel #9
0
        public void Compare_OrdinalIgnoreCase_FirstGreaterThanSecond()
        {
            //Act - Cannot actually detect comparer type so use heuristics
            var target = CharComparer.GetComparer(StringComparison.OrdinalIgnoreCase);
            var actual = target.Compare(SmallDotlessLetterI, CapitalLetterI);

            //Assert
            actual.Should().Be(1);
        }
Beispiel #10
0
        public void Compare_Ordinal_MixedCase()
        {
            //Act - Cannot actually detect comparer type so use heuristics
            var target = CharComparer.GetComparer(StringComparison.Ordinal);
            var actual = target.Compare(CapitalLetterI, SmallLetterI);

            //Assert
            actual.Should().NotBe(0);
        }
Beispiel #11
0
        public void Compare_Ordinal_SameCase()
        {
            //Act
            var target = CharComparer.GetComparer(StringComparison.Ordinal);
            var actual = target.Compare(SmallLetterI, SmallLetterI);

            //Assert
            actual.Should().Be(0);
        }
Beispiel #12
0
        public void Compare_InvariantCultureIgnoreCase_SameCase()
        {
            //Act
            var target = CharComparer.GetComparer(StringComparison.InvariantCultureIgnoreCase);
            var actual = target.Compare(SmallDotlessLetterI, SmallDotlessLetterI);

            //Assert
            actual.Should().Be(0);
        }
Beispiel #13
0
        public void OverloadsTest()
        {
            var ac = new AhoCorasick(new List <string> {
                "a"
            });

            CollectionAssert.AreEqual(new WordMatchList {
                { 0, "a" }
            }, ac.Search("a").ToList());
            Assert.AreEqual(0, ac.Search("b").Count());

            ac = new AhoCorasick(CharComparer.OrdinalIgnoreCase, new List <string> {
                "a", "ab", "bab", "bC", "bca", "c", "caa"
            });
            var m        = ac.Search("abCcab").ToList();
            var expected = new WordMatchList {
                { 0, "a" }, { 0, "ab" }, { 1, "bC" }, { 2, "c" }, { 3, "c" }, { 4, "a" }, { 4, "ab" }
            };

            CollectionAssert.AreEqual(expected, m);

            ac = new AhoCorasick();
            ac.Add("a");
            ac.BuildFail();
            CollectionAssert.AreEqual(new WordMatchList {
                { 0, "a" }
            }, ac.Search("a").ToList());
            Assert.AreEqual(0, ac.Search("b").Count());

            ac       = new AhoCorasick(CharComparer.Create(CultureInfo.InvariantCulture, true), "a", "ab", "bab", "bc", "bca", "c", "caa");
            m        = ac.Search("abccab").ToList();
            expected = new WordMatchList {
                { 0, "a" }, { 0, "ab" }, { 1, "bc" }, { 2, "c" }, { 3, "c" }, { 4, "a" }, { 4, "ab" }
            };
            CollectionAssert.AreEqual(expected, m);
        }
Beispiel #14
0
        public void GetComparer_BadComparison()
        {
            Action action = () => CharComparer.GetComparer((StringComparison)1000);

            action.ShouldThrowArgumentOutOfRangeException();
        }