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); }
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); }
public void GetComparer_OrdinalIgnoreCase() { //Act var actual = CharComparer.GetComparer(StringComparison.OrdinalIgnoreCase); //Assert actual.Should().Be(CharComparer.OrdinalIgnoreCase); }
public void GetComparer_InvariantCultureIgnoreCase() { //Act var actual = CharComparer.GetComparer(StringComparison.InvariantCultureIgnoreCase); //Assert actual.Should().Be(CharComparer.InvariantCultureIgnoreCase); }
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); }
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); }
public void Compare_CurrentCultureIgnoreCase_SameCase() { //Act var target = CharComparer.GetComparer(StringComparison.CurrentCultureIgnoreCase); var actual = target.Compare(CapitalLetterI, CapitalLetterI); //Assert actual.Should().Be(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); }
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); }
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); }
public void Compare_Ordinal_SameCase() { //Act var target = CharComparer.GetComparer(StringComparison.Ordinal); var actual = target.Compare(SmallLetterI, SmallLetterI); //Assert actual.Should().Be(0); }
public void Compare_InvariantCultureIgnoreCase_SameCase() { //Act var target = CharComparer.GetComparer(StringComparison.InvariantCultureIgnoreCase); var actual = target.Compare(SmallDotlessLetterI, SmallDotlessLetterI); //Assert actual.Should().Be(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); }
public void GetComparer_BadComparison() { Action action = () => CharComparer.GetComparer((StringComparison)1000); action.ShouldThrowArgumentOutOfRangeException(); }