public void BuildTest() { { var matcher = Builder.Build(new[] { DiscreteMatchProvider.GetName() }, true); Assert.IsTrue(matcher.IsCaseSensitive); Assert.IsTrue(matcher.ProviderTypes.Count == 1); Assert.IsTrue(matcher.ProviderTypes[0] == DiscreteMatchProvider.GetName()); } { var matcher = Builder.Build(new[] { DiscreteMatchProvider.GetName(), ChineseZhCnPinYinMatchProvider.GetName() }, false); Assert.IsTrue(matcher.IsCaseSensitive == false); Assert.IsTrue(matcher.ProviderTypes.Count == 2); Assert.IsTrue(matcher.ProviderTypes.Any(x => x == DiscreteMatchProvider.GetName())); Assert.IsTrue(matcher.ProviderTypes.Any(x => x == ChineseZhCnPinYinMatchProvider.GetName())); } #if !NET45 { var matcher = Builder.Build(new[] { JapaneseRomajiProvider.GetName(), ChineseZhCnPinYinInitialsMatchProvider.GetName() }, true); Assert.IsTrue(matcher.IsCaseSensitive == true); Assert.IsTrue(matcher.ProviderTypes.Count == 2); Assert.IsTrue(matcher.ProviderTypes.Any(x => x == JapaneseRomajiProvider.GetName())); Assert.IsTrue(matcher.ProviderTypes.Any(x => x == ChineseZhCnPinYinInitialsMatchProvider.GetName())); } #endif }
private static void LoadProviders() { if (AvailableProviders.ContainsKey(DirectMatchProvider.GetName()) == false) { AvailableProviders.Add(DirectMatchProvider.GetName(), new DirectMatchProvider(false)); } if (AvailableProviders.ContainsKey(InitialsMatchProvider.GetName()) == false) { AvailableProviders.Add(InitialsMatchProvider.GetName(), new InitialsMatchProvider(false)); } if (AvailableProviders.ContainsKey(DiscreteMatchProvider.GetName()) == false) { AvailableProviders.Add(DiscreteMatchProvider.GetName(), new DiscreteMatchProvider(false)); } if (AvailableProviders.ContainsKey(ChineseZhCnPinYinInitialsMatchProvider.GetName()) == false) { AvailableProviders.Add(ChineseZhCnPinYinInitialsMatchProvider.GetName(), new ChineseZhCnPinYinInitialsMatchProvider(false)); } if (AvailableProviders.ContainsKey(ChineseZhCnPinYinMatchProvider.GetName()) == false) { AvailableProviders.Add(ChineseZhCnPinYinMatchProvider.GetName(), new ChineseZhCnPinYinMatchProvider(false)); } try { var files = Directory.GetFiles(Directory.GetParent(typeof(Builder).Assembly.Location).FullName, "*.dll"); foreach (var dllPath in files) { var assembly = Assembly.LoadFile(dllPath); var types = assembly.GetTypes(); var providers = types.Where(item => item.IsSubclassOf(typeof(MatchProviderBase)) && !item.IsAbstract) .Select(type => CreateProviderInstance(type, false)); foreach (var provider in providers.OrderBy(x => x.GetProviderDescription())) { var t = provider.GetProviderName(); if (AvailableProviders.ContainsKey(t) == false) { AvailableProviders.Add(t, provider); } } } } catch (Exception) { } }
public void GetProviderDescriptionTest() { { var dsp1 = Builder.GetProviderDescription(DirectMatchProvider.GetName()); var dsp2 = Builder.GetProviderDescriptionEn(DirectMatchProvider.GetName()); Assert.IsTrue(!string.IsNullOrEmpty(dsp1)); Assert.IsTrue(!string.IsNullOrEmpty(dsp2)); } { var dsp1 = Builder.GetProviderDescription(InitialsMatchProvider.GetName()); var dsp2 = Builder.GetProviderDescriptionEn(InitialsMatchProvider.GetName()); Assert.IsTrue(!string.IsNullOrEmpty(dsp1)); Assert.IsTrue(!string.IsNullOrEmpty(dsp2)); } { var dsp1 = Builder.GetProviderDescription(DiscreteMatchProvider.GetName()); var dsp2 = Builder.GetProviderDescriptionEn(DiscreteMatchProvider.GetName()); Assert.IsTrue(!string.IsNullOrEmpty(dsp1)); Assert.IsTrue(!string.IsNullOrEmpty(dsp2)); } { var dsp1 = Builder.GetProviderDescription(ChineseZhCnPinYinMatchProvider.GetName()); var dsp2 = Builder.GetProviderDescriptionEn(ChineseZhCnPinYinMatchProvider.GetName()); Assert.IsTrue(!string.IsNullOrEmpty(dsp1)); Assert.IsTrue(!string.IsNullOrEmpty(dsp2)); } { var dsp1 = Builder.GetProviderDescription(ChineseZhCnPinYinInitialsMatchProvider.GetName()); var dsp2 = Builder.GetProviderDescriptionEn(ChineseZhCnPinYinInitialsMatchProvider.GetName()); Assert.IsTrue(!string.IsNullOrEmpty(dsp1)); Assert.IsTrue(!string.IsNullOrEmpty(dsp2)); } #if !NET45 { var dsp1 = Builder.GetProviderDescription(JapaneseRomajiProvider.GetName()); var dsp2 = Builder.GetProviderDescriptionEn(JapaneseRomajiProvider.GetName()); Assert.IsTrue(!string.IsNullOrEmpty(dsp1)); Assert.IsTrue(!string.IsNullOrEmpty(dsp2)); } #endif }
public void MatchTest_String_SingleKeyword() { { var matcher = Builder.Build(new[] { DirectMatchProvider.GetName() }, false); string str = "HelloWorld 你好世界!"; Assert.IsTrue(matcher.Match(str, "llow").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "llOW").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "世界").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "!").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "!").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "He l").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, " ").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "啊").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "X").IsMatchAllKeywords == false); } { var matcher = Builder.Build(new[] { DirectMatchProvider.GetName(), ChineseZhCnPinYinInitialsMatchProvider.GetName() }, false); string str = "HelloWorld 你好世界!"; Assert.IsTrue(matcher.Match(str, "llow").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "llOW").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "世界").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "!").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, " NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "nh").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, " nH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "ld nh").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "ld NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "!").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "He l").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, " ").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "啊").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "X").IsMatchAllKeywords == false); } { var matcher = Builder.Build(new[] { DirectMatchProvider.GetName(), ChineseZhCnPinYinInitialsMatchProvider.GetName() }, true); string str = "HelloWorld 你好世界!"; Assert.IsTrue(matcher.Match(str, "llow").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "lloW").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "世界").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "!").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, " NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "nh").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, " nH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "ld nh").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "ld NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "lD nh").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "lD NH").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "!").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "He l").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, " ").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "啊").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "X").IsMatchAllKeywords == false); } { var matcher = Builder.Build(new[] { DirectMatchProvider.GetName(), ChineseZhCnPinYinInitialsMatchProvider.GetName(), ChineseZhCnPinYinMatchProvider.GetName() }, false); string str = "HelloWorld 你好世界!"; Assert.IsTrue(matcher.Match(str, "llow").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "llOW").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "世界").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "SHIJIE").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "!").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, " NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "nh").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, " nH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "ld nh").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "ld NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "ld NIHA").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "ld NIHAo").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(str, "!").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "He l").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, " ").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "啊").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(str, "X").IsMatchAllKeywords == false); } }
public void MatchTest_Cache_MultiKeywords() { { var matcher = Builder.Build(new[] { DirectMatchProvider.GetName(), ChineseZhCnPinYinInitialsMatchProvider.GetName() }, false); string str = "HelloWorld 你好世界!"; var cache = matcher.CreateStringCache(str); Assert.IsTrue(matcher.Match(cache, new[] { "llow", "NH" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "llOW", "NH" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "llOW", "世界" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", "世界", "!" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "nh", "!" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", "世界", "!" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", "X" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", " " }).IsMatchAllKeywords == false); } { var matcher = Builder.Build(new[] { DirectMatchProvider.GetName(), ChineseZhCnPinYinInitialsMatchProvider.GetName() }, true); string str = "HelloWorld 你好世界!"; var cache = matcher.CreateStringCache(str); Assert.IsTrue(matcher.Match(cache, new[] { "llow", "NH" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "llOW", "NH" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "llOW", "世界" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", "世界" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", "世界", "!" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "nh", "!" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", "世界", "!" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", "X" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", " " }).IsMatchAllKeywords == false); } { var matcher = Builder.Build(new[] { DirectMatchProvider.GetName(), ChineseZhCnPinYinMatchProvider.GetName() }, false); string str = "HelloWorld 你好世界!"; var cache = matcher.CreateStringCache(str); Assert.IsTrue(matcher.Match(cache, new[] { "llow", "NH" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "llOW", "NH" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "llOW", "世界" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", "世界", "!" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", "SHIJIE", "!" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "NI", "hao", "!" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "NI", "hao", "w" }).IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", "世界", "!" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", "X" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "lloW", " " }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "a", " " }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { "a" }).IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, new[] { " " }).IsMatchAllKeywords == true); } }
public void MatchTest_MatchCache_SingleKeyword() { { var matcher = Builder.Build(new[] { DirectMatchProvider.GetName(), ChineseZhCnPinYinInitialsMatchProvider.GetName() }, false); string str = "HelloWorld 你好世界!"; var cache = matcher.CreateStringCache(str); Assert.IsTrue(matcher.Match(cache, "llow").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "llOW").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "世界").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "!").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, " NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "nh").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, " nH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "ld nh").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "ld NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "!").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, "He l").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, " ").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, "啊").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, "a").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, "X").IsMatchAllKeywords == false); } { var matcher = Builder.Build(new[] { DirectMatchProvider.GetName(), ChineseZhCnPinYinInitialsMatchProvider.GetName() }, true); string str = "HelloWorld 你好世界!"; var cache = matcher.CreateStringCache(str); Assert.IsTrue(matcher.Match(cache, "llow").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, "lloW").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "世界").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "!").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, " NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "nh").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, " nH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "ld nh").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "ld NH").IsMatchAllKeywords == true); Assert.IsTrue(matcher.Match(cache, "lD nh").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, "lD NH").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, "!").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, "He l").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, " ").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, "啊").IsMatchAllKeywords == false); Assert.IsTrue(matcher.Match(cache, "X").IsMatchAllKeywords == false); } }
public void FindMatchesTestCase() { var matcherCase = new ChineseZhCnPinYinInitialsMatchProvider(true); var dspen = matcherCase.GetProviderDescriptionEn(); var dsp = matcherCase.GetProviderDescription(); { var ret = matcherCase.DoMatches(new MatchCache(""), new[] { "" }); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var ret = matcherCase.DoMatches(new MatchCache("a"), new[] { "" }); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "abcdefg"; var kws = new[] { "a" }; var ret = matcherCase.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "a"); Assert.IsTrue(ret.IsMatchAllKeywords == false); // false by no Chinese char } { string org = "abcdefg"; var kws = new[] { "A" }; var ret = matcherCase.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "A"); Assert.IsTrue(ret.IsMatchAllKeywords == false); // false by no Chinese char } var test = new MatchCache("多重多次,行中Ab, "); matcherCase.AppendDescriptions(ref test); { var kws = new[] { "DZ" }; var ret = matcherCase.DoMatches(new MatchCache("多重多次,行中Ab, "), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == true && m[1] == true && m[2] == false && m[3] == false && m[4] == false && m[5] == false && m[6] == false && m[7] == false && m[8] == false && m[9] == false && m[10] == false); } { var kws = new[] { "DC" }; matcherCase.AppendDescriptions(ref test); var ret = matcherCase.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == true && m[1] == true && m[2] == true && m[3] == true && m[4] == false && m[5] == false && m[6] == false && m[7] == false && m[8] == false && m[9] == false && m[10] == false); } { var kws = new[] { "Dz", "HZ" }; var ret = matcherCase.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == true && m[1] == true && m[2] == false && m[3] == false && m[4] == false && m[5] == true && m[6] == true && m[7] == false && m[8] == false && m[9] == false && m[10] == false); } { var kws = new[] { "XZA" }; var ret = matcherCase.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == false && m[1] == false && m[2] == false && m[3] == false && m[4] == false && m[5] == true && m[6] == true && m[7] == true && m[8] == false && m[9] == false && m[10] == false); } { var kws = new[] { "XZAb" }; var ret = matcherCase.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == false && m[1] == false && m[2] == false && m[3] == false && m[4] == false && m[5] == true && m[6] == true && m[7] == true && m[8] == true && m[9] == false && m[10] == false); } { var kws = new[] { "XZab" }; var ret = matcherCase.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { "aB", "," }; var ret = matcherCase.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { ",", ", " }; var ret = matcherCase.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == false && m[1] == false && m[2] == false && m[3] == false && m[4] == true && m[5] == false && m[6] == false && m[7] == false && m[8] == false && m[9] == true && m[10] == true); } { var ret = matcherCase.DoMatches(new MatchCache("大夫A"), new[] { "DF", "B" }); Assert.IsTrue(ret.IsMatchAllKeywords == false); var m = ret.HitFlags; Assert.IsTrue(m.Count == 3 && m[0] == true && m[1] == true && m[2] == false); } }
public void FindMatchesTest() { var matcher = new ChineseZhCnPinYinInitialsMatchProvider(false); var dspen = matcher.GetProviderDescriptionEn(); var dsp = matcher.GetProviderDescription(); Assert.IsTrue(matcher.GetProviderName() == nameof(ChineseZhCnPinYinInitialsMatchProvider)); { var ret = matcher.DoMatches(new MatchCache(""), new[] { "" }); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var ret = matcher.DoMatches(new MatchCache("a"), new[] { "" }); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { "a" }; var sd = new MatchCache("abcdefg"); matcher.AppendDescriptions(ref sd); // no Chinese Assert.IsTrue( sd.SpellCaches[nameof(ChineseZhCnPinYinInitialsMatchProvider)] is SpellCache sc && sc.Units.All(x => x.Count == 0)); var ret = matcher.DoMatches(sd, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "abcdefg"; var kws = new[] { "a" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); // false by no Chinese char Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "a"); } { string org = "abcdefg"; var kws = new[] { "A" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); // false by no Chinese char Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "A"); } var test = new MatchCache("多重多次,行中Ab, "); matcher.AppendDescriptions(ref test); Assert.IsTrue(test.SpellCaches[matcher.GetProviderName()].GetProviderName() == matcher.GetProviderName()); { var ret = matcher.DoMatches(new MatchCache("大夫"), new[] { "df" }); Assert.IsTrue(ret.IsMatchAllKeywords == true); Assert.IsTrue(ret.HitFlags.All(x => x)); } { var ret = matcher.DoMatches(new MatchCache("大夫"), new[] { "tf" }); Assert.IsTrue(ret.IsMatchAllKeywords == true); Assert.IsTrue(ret.HitFlags.All(x => x)); } { var kws = new[] { "DZ" }; var ret = matcher.DoMatches(new MatchCache("多重多次,行中Ab, "), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == true && m[1] == true && m[2] == false && m[3] == false && m[4] == false && m[5] == false && m[6] == false && m[7] == false && m[8] == false && m[9] == false && m[10] == false); } { var kws = new[] { "DC" }; matcher.AppendDescriptions(ref test); var ret = matcher.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == true && m[1] == true && m[2] == true && m[3] == true && m[4] == false && m[5] == false && m[6] == false && m[7] == false && m[8] == false && m[9] == false && m[10] == false); } { var kws = new[] { "Dz", "HZ" }; var ret = matcher.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == true && m[1] == true && m[2] == false && m[3] == false && m[4] == false && m[5] == true && m[6] == true && m[7] == false && m[8] == false && m[9] == false && m[10] == false); } { var kws = new[] { "XZA" }; var ret = matcher.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == false && m[1] == false && m[2] == false && m[3] == false && m[4] == false && m[5] == true && m[6] == true && m[7] == true && m[8] == false && m[9] == false && m[10] == false); } { var kws = new[] { "XZAb" }; var ret = matcher.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == false && m[1] == false && m[2] == false && m[3] == false && m[4] == false && m[5] == true && m[6] == true && m[7] == true && m[8] == true && m[9] == false && m[10] == false); } { var kws = new[] { "aB", "," }; var ret = matcher.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == false && m[1] == false && m[2] == false && m[3] == false && m[4] == false && m[5] == false && m[6] == false && m[7] == true && m[8] == true && m[9] == true && m[10] == false); } { var kws = new[] { ",", ", " }; var ret = matcher.DoMatches(test, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == false && m[1] == false && m[2] == false && m[3] == false && m[4] == true && m[5] == false && m[6] == false && m[7] == false && m[8] == false && m[9] == true && m[10] == true); } }
public void DoMatchesTest() { var matcher1 = new DirectMatchProvider(false); var matcher2 = new ChineseZhCnPinYinInitialsMatchProvider(false); var test = new MatchCache("多重hello world"); matcher1.AppendDescriptions(ref test); matcher2.AppendDescriptions(ref test); { bool throwException = false; try { var ret = matcher1.DoMatches(new MatchCache("123"), new List <string>() { "dc" }); var ret2 = matcher1.DoMatches(new MatchCache("abc"), new List <string>() { "dc" }); ret.Merge(ret2); } catch (Exception e) { Console.WriteLine(e); throwException = true; } Assert.IsTrue(throwException); } { var ret = matcher1.DoMatches(test, new List <string>() { "dc" }); var ret2 = matcher2.DoMatches(test, new List <string>() { "dc" }); ret.Merge(ret2); Assert.IsTrue(ret.IsMatchAllKeywords == true); Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "dc"); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == true && m[1] == true && m[2] == false && m[3] == false && m[4] == false && m[5] == false && m[6] == false && m[7] == false && m[8] == false && m[9] == false && m[10] == false && m[11] == false && m[12] == false); } { var kws = new List <string>() { "dc" }; var ret = matcher1.DoMatches(test, kws); var ret2 = matcher2.DoMatches(test, kws); ret.Merge(ret2); Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "dc"); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == true && m[1] == true && m[2] == false && m[3] == false && m[4] == false && m[5] == false && m[6] == false && m[7] == false && m[8] == false && m[9] == false && m[10] == false && m[11] == false && m[12] == false); } { var ret = matcher1.DoMatches(test, new List <string>() { "wor" }); var ret2 = matcher2.DoMatches(test, new List <string>() { "Dc" }); ret.Merge(ret2); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(ret.Keywords.Count == 2 && ret.Keywords.Any(x => x == "Dc") && ret.Keywords.Any(x => x == "wor")); Assert.IsTrue(m.Count == test.StringLength && m[0] == true && m[1] == true && m[2] == false && m[3] == false && m[4] == false && m[5] == false && m[6] == false && m[7] == false && m[8] == true && m[9] == true && m[10] == true && m[11] == false && m[12] == false); } { var ret = matcher2.DoMatches(test, new List <string>() { "dc" }); ret.Merge(matcher1.DoMatches(test, new List <string>() { "wor", "abs" })); Assert.IsTrue(ret.IsMatchAllKeywords == false); Assert.IsTrue(ret.Keywords.Count == 3); var m = ret.HitFlags; Assert.IsTrue(m.Count == test.StringLength && m[0] == true && m[1] == true && m[2] == false && m[3] == false && m[4] == false && m[5] == false && m[6] == false && m[7] == false && m[8] == true && m[9] == true && m[10] == true && m[11] == false && m[12] == false); } }