/// <summary> /// append cache for this match provider to MatchCache /// </summary> /// <returns></returns> /// <param name="matchCache"></param> public override void AppendDescriptions(ref MatchCache matchCache) { if (matchCache.SpellCaches.ContainsKey(nameof(InitialsMatchProvider))) { matchCache.SpellCaches.TryRemove(nameof(InitialsMatchProvider), out _); } var sp = new SpellCache(GetProviderName(), matchCache.StringLength); // set PinYin chart cache for (var i = 0; i < matchCache.OriginalString.Length; i++) { var c = matchCache.OriginalString[i]; if (i == 0 && c != ' ' || i > 0 && matchCache.OriginalString[i - 1] == ' ' && c != ' ') { sp.Units[i].Add(base.IsCaseSensitive ? c.ToString() : c.ToString().ToLower()); } else { sp.SkipFlag[i] = true; } } matchCache.SpellCaches.AddOrUpdate(nameof(InitialsMatchProvider), sp, (key, value) => value); }
static Caches() { Account = new AccountCache(); User = new UserCache(); Match = new MatchCache(); Fight = new FightCache(); }
/// <summary> /// create a matching spell cache for the string /// </summary> /// <returns></returns> public MatchCache CreateStringCache(string originalString) { CheckProviders(); var sd = new MatchCache(originalString); foreach (var provider in _providers) { provider.AppendDescriptions(ref sd); } return(sd); }
private static bool IsMatch(string message, string regex) { var key = message.GetHashCode() ^ regex.GetHashCode(); if (!MatchCache.TryGetValue(key, out var match)) { match = Regex.IsMatch(message, regex, RegexOptions.IgnoreCase); MatchCache[key] = match; } return(match); }
/// <summary> /// using keywords to match the cache of the original string /// </summary> /// <param name="matchCache">cache of the original string</param> /// <param name="keywords">list of keywords</param> /// <returns></returns> public MatchResult Match(MatchCache matchCache, IEnumerable <string> keywords) { CheckProviders(); var result = MatchResult.CreateUnmatchedResult(matchCache.OriginalString, keywords, IsCaseSensitive); foreach (var r in _providers.Select(provider => provider.DoMatches(matchCache, keywords))) { result.Merge(r); } return(result); }
protected override MatchResult DoFindMatches(MatchCache matchCache, IEnumerable <string> keywords, IEnumerable <string> keywordsInTrueCase) { if (!matchCache.SpellCaches.ContainsKey(nameof(JapaneseRomajiProvider))) { AppendDescriptions(ref matchCache); } Debug.Assert(!string.IsNullOrEmpty(matchCache.OriginalString)); if (matchCache.SpellCaches[nameof(JapaneseRomajiProvider)] is SpellCache4JapaneseRomaji spell) { if (string.IsNullOrEmpty(spell.SpellString) || spell.ConvertFlag.All(x => x == false)) { return(MatchResult.CreateUnmatchedResult(matchCache.OriginalString, keywords, IsCaseSensitive)); } var keywordList = keywordsInTrueCase?.ToList(); Debug.Assert(keywordList?.Any() == true); var orgStringInTrueCase = spell.SpellString; var spellHitFlags = CreateBoolFlags(orgStringInTrueCase.Length); var keywordsMatchedFlags = CreateBoolFlags(keywordList.Count()); for (var i = 0; i < keywordList.Count; i++) { var keyword = keywordList[i]; keywordsMatchedFlags[i] = DoMatch(orgStringInTrueCase, spell.BeginFlags, keyword, ref spellHitFlags); } // gent hit flag var hitFlags = CreateBoolFlags(matchCache.StringLength); for (int i = 0; i < spellHitFlags.Count; i++) { if (spellHitFlags[i]) { for (int j = 0; j < spell.SpellCharToOrgIndexes[i].Count; j++) { hitFlags[spell.SpellCharToOrgIndexes[i][j]] = true; } } } var ret = new MatchResult(matchCache.OriginalString, keywords, base.IsCaseSensitive, keywordsMatchedFlags, hitFlags); return(ret); } else { throw new Exception( $"{nameof(ISpellCache)} Type error, should be {nameof(SpellCache4JapaneseRomaji)}, but now is {matchCache.SpellCaches[nameof(JapaneseRomajiProvider)].GetType().Name}"); } }
public bool CanHandle(string source, DiaryMode mode) { if (!Supports(mode)) return false; foreach (var regex in regexes) { var match = regex.Match(source); if (match.Success) { cached = new MatchCache(source, match); return true; } } return false; }
/// <summary> /// Delete an estate object. /// </summary> /// <param name="key">Key of object to delete.</param> /// <returns>True if object was successfully deleted.</returns> public static bool DeleteObject(int key) { if (DealCache.ContainsKey(key)) { return false; } OrderCache.Query (new SqlFieldsQuery ($"delete from Orders where ObjectID={key};")); BookmarkCache.Query (new SqlFieldsQuery ($"delete from Bookmarks where ObjectID={key};")); MatchCache.Query (new SqlFieldsQuery ($"delete from Matches where ObjectID={key};")); ObjectCache.Remove(key); return true; }
/// <summary> /// append cache for this match provider to MatchCache /// </summary> /// <returns></returns> public override void AppendDescriptions(ref MatchCache matchCache) { var sp = new SpellCache(GetProviderName(), matchCache.StringLength); // set PinYin chart cache for (var i = 0; i < matchCache.OriginalString.Length; i++) { var tmp = ToolGood.Words.Pinyin.WordsHelper.GetAllPinyin(matchCache.OriginalString[i]); if (tmp?.Any() == true) { foreach (var t in tmp) { // PinYin ignore case sp.Units[i].Add(t.ToLower()); } sp.ConvertFlag[i] = true; } else { sp.ConvertFlag[i] = false; } } // no Chinese character. if (sp.Units.All(x => x.Count == 0)) { matchCache.SpellCaches.AddOrUpdate(nameof(ChineseZhCnPinYinMatchProvider), new SpellCache(GetProviderName(), matchCache.StringLength), (key, value) => value); return; } // set original char cache for (var i = 0; i < matchCache.OriginalString.Length; i++) { if (sp.Units[i].Count == 0) { var c = matchCache.OriginalString[i]; // PinYin ignore case sp.Units[i].Add(base.IsCaseSensitive ? c.ToString() : c.ToString().ToLower()); } } matchCache.SpellCaches.AddOrUpdate(nameof(ChineseZhCnPinYinMatchProvider), sp, (key, value) => value); }
protected override MatchResult DoFindMatches(MatchCache matchCache, IEnumerable <string> keywords, IEnumerable <string> keywordsInTrueCase) { Debug.Assert(!string.IsNullOrEmpty(matchCache.OriginalString)); var keywordList = keywordsInTrueCase?.ToList(); Debug.Assert(keywordList?.Any() == true); var orgStringInTrueCase = ConvertStringToTrueCase(matchCache.OriginalString, base.IsCaseSensitive); var hitFlags = CreateBoolFlags(matchCache.StringLength); var keywordsMatchedFlags = CreateBoolFlags(keywordList.Count()); for (var i = 0; i < keywordList.Count; i++) { var keyword = keywordList[i]; keywordsMatchedFlags[i] = DoMatch(orgStringInTrueCase, keyword, ref hitFlags); } var ret = new MatchResult(matchCache.OriginalString, keywords, base.IsCaseSensitive, keywordsMatchedFlags, hitFlags); return(ret); }
/// <summary> /// using keywords to match the cache of the original sting /// </summary> /// <param name="matchCache">cache of the original sting</param> /// <param name="keywords">list of keywords</param> /// <returns></returns> public MatchResult DoMatches(MatchCache matchCache, IEnumerable <string> keywords) { if (string.IsNullOrEmpty(matchCache?.OriginalString)) { return(MatchResult.CreateUnmatchedResult(matchCache.OriginalString, keywords, IsCaseSensitive)); } var keywordsInTrueCase = keywords.Distinct().Where(x => !string.IsNullOrEmpty(x)).ToList(); if (keywordsInTrueCase?.Any() != true) { return(MatchResult.CreateUnmatchedResult(matchCache.OriginalString, keywords, IsCaseSensitive)); } if (IsCaseSensitive == false) { for (var i = 0; i < keywordsInTrueCase.Count; i++) { keywordsInTrueCase[i] = keywordsInTrueCase[i].ToLower(); } } return(DoFindMatches(matchCache, keywords, keywordsInTrueCase)); }
protected override MatchResult DoFindMatches(MatchCache matchCache, IEnumerable <string> keywords, IEnumerable <string> keywordsInTrueCase) { if (!matchCache.SpellCaches.ContainsKey(nameof(InitialsMatchProvider))) { AppendDescriptions(ref matchCache); } if (matchCache.SpellCaches[nameof(InitialsMatchProvider)] is SpellCache spell) { if (spell.Units.Count == 0 || spell.SkipFlag.All(x => x)) { return(MatchResult.CreateUnmatchedResult(matchCache.OriginalString, keywords, IsCaseSensitive)); } Debug.Assert(!string.IsNullOrEmpty(matchCache.OriginalString)); var keywordList = keywordsInTrueCase?.ToList(); Debug.Assert(keywordList?.Any() == true); var orgStringInTrueCase = ConvertStringToTrueCase(matchCache.OriginalString, base.IsCaseSensitive); var hitFlags = CreateBoolFlags(matchCache.StringLength); var keywordsMatchedFlags = CreateBoolFlags(keywordList.Count()); for (var i = 0; i < keywordList.Count; i++) { var keyword = keywordList[i]; keywordsMatchedFlags[i] = DoMatch(orgStringInTrueCase, spell, keyword, ref hitFlags); } var ret = new MatchResult(matchCache.OriginalString, keywords, base.IsCaseSensitive, keywordsMatchedFlags, hitFlags); return(ret); } else { throw new Exception( $"{typeof(ISpellCache).Name} Type error, should be {typeof(SpellCache).Name}, but now is {matchCache.SpellCaches[nameof(InitialsMatchProvider)].GetType().Name}"); } }
/// <summary> /// Put match entity into the cache. <br/> /// Referential integrity check is done on: <br/> /// Match.WishID - ClientWish.key <br/> /// Match.ObjectID - Object.key <br/> /// </summary> /// <param name="value">Match to put into the cache.</param> public static void PutMatch (Match value) { using (var tx = Client.GetTransactions().TxStart()) { // Error if ClientWish with key = value.WishID is not found. if (!(ClientWishCache.ContainsKey(value.WishID))) { tx.Commit(); throw new ReferentialException ("Can not put new entry into Match cache.") { Operation = "put", TableName = "Match", FieldName = "WishID", ReadableMessage = $"Can not put new entry into Match cache because ClientWish with key {value.WishID} does not exist." }; } // Error if EstateObject with key = value.ObjectID is not found. if (!(ObjectCache.ContainsKey(value.ObjectID))) { tx.Commit(); throw new ReferentialException ("Can not put new entry into Match cache.") { Operation = "put", TableName = "Match", FieldName = "ObjectID", ReadableMessage = $"Can not put new entry into Match cache because EstateObject with key {value.ObjectID} does not exist." }; } // Normal operation long key = (((long)value.WishID)<<32) + value.ObjectID; MatchCache.Put (key, value); tx.Commit(); } }
public void FindMatchesTest() { var matcher = new InitialsMatchProvider(false); var dspen = matcher.GetProviderDescriptionEn(); var dsp = matcher.GetProviderDescription(); Assert.IsTrue(matcher.GetProviderName() == nameof(InitialsMatchProvider)); { var ret = matcher.DoMatches(new MatchCache(""), new[] { "" }); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = " "; var str = new MatchCache(org); matcher.AppendDescriptions(ref str); Assert.IsTrue(str.SpellCaches[matcher.GetProviderName()].GetProviderName() == matcher.GetProviderName()); matcher.DoMatches(str, new[] { " " }); Assert.IsTrue( str.SpellCaches[nameof(InitialsMatchProvider)] is SpellCache sc && sc.SkipFlag.All(x => x)); } { string org = "abcdefg"; var str = new MatchCache(org); matcher.AppendDescriptions(ref str); matcher.AppendDescriptions(ref str); } { string org = "abcdefg"; var kws = new[] { "a" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "a"); Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false); } { string org = "abcdefg"; var kws = new[] { "A" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "A"); Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false); } { string org = "abaa a"; var kws = new[] { " " }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "abAAa"; var kws = new[] { "aa" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "abAA A"; var kws = new[] { "aa" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == false && m[3] == false && m[4] == false && m[5] == true); } { string org = "abAA A"; var kws = new[] { "Aa" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == false && m[3] == false && m[4] == false && m[5] == true); } { string org = "a b c d e"; var kws = new[] { "ab", "cd" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == false && m[4] == true && m[5] == false && m[6] == true && m[7] == false && m[8] == false); } { string org = "a BC de"; var kws = new[] { "ab", "cd" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "a BC de"; var kws = new[] { "ab", "bc" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "a Bc dE "; var kws = new[] { "abd" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == false && m[4] == false && m[5] == true && m[6] == false && m[7] == false); } { string org = "a Bc dE "; var kws = new[] { "AB", "bd" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == false && m[4] == false && m[5] == true && m[6] == false && m[7] == false); } }
public void FindMatchesTestCase() { var matcher = new InitialsMatchProvider(true); var dspen = matcher.GetProviderDescriptionEn(); var dsp = matcher.GetProviderDescription(); { string org = "abcdefg"; var str = new MatchCache(org); matcher.AppendDescriptions(ref str); } { string org = "abcdefg"; var kws = new[] { "a" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "a"); Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false); } { string org = "abcdefg"; var kws = new[] { "A" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "abaa a"; var kws = new[] { " " }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "abAAa"; var kws = new[] { "aa" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "abAA A"; var kws = new[] { "Aa" }; var ret = matcher.DoMatches(new MatchCache(org), kws); } { string org = "abAA A"; var kws = new[] { "aA" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == false && m[3] == false && m[4] == false && m[5] == true); } { string org = "a b c d e"; var kws = new[] { "ab", "cd" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == false && m[4] == true && m[5] == false && m[6] == true && m[7] == false && m[8] == false); } { string org = "a BC de"; var kws = new[] { "ab", "cd" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "a BC de"; var kws = new[] { "ab", "bc" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "a Bc dE "; var kws = new[] { "abd" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "a Bc dE "; var kws = new[] { "aBd" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == false && m[4] == false && m[5] == true && m[6] == false && m[7] == false); } { string org = "a Bc dE "; var kws = new[] { "AB", "bd" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "a Bc dE "; var kws = new[] { "aB", "Bd" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == false && m[4] == false && m[5] == true && m[6] == false && m[7] == false); } { string org = "a Bc dE "; var kws = new[] { "aB", "Bd", "K" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == false && m[4] == false && m[5] == true && m[6] == false && m[7] == false); } }
/// <summary> /// append cache for this match provider to MatchCache /// </summary> /// <returns></returns> public override void AppendDescriptions(ref MatchCache matchCache) { // do nothing }
public override void AppendDescriptions(ref MatchCache matchCache) { var ps = GetRomaji(matchCache.OriginalString); if (ps?.Count == 0) { matchCache.SpellCaches.AddOrUpdate(nameof(JapaneseRomajiProvider), new SpellCache4JapaneseRomaji(GetName(), "", new List <List <int> >(), new List <bool>() { false }, new List <bool>() { false }), (key, value) => value); return; } int i = 0; var indexes = new List <List <int> >(); var convertFlag = new List <bool>(); var beginFlag = new List <bool>(); var sb = new StringBuilder(); foreach (var division in ps) { var orgElement = ""; foreach (var d in division) { orgElement += d.Element; } i = matchCache.OriginalString.IndexOf(orgElement, i, StringComparison.Ordinal); Debug.Assert(i >= 0); if (string.IsNullOrEmpty(division.RomaReading) || division.RomaReading == orgElement) { for (var j = 0; j < orgElement.Length; j++) { var c = orgElement[j]; sb.Append(base.IsCaseSensitive ? c.ToString() : c.ToString().ToLower()); convertFlag.Add(false); beginFlag.Add(true); indexes.Add(new List <int>() { i + j }); Debug.Assert(sb.Length == indexes.Count); Debug.Assert(sb.Length == convertFlag.Count); } } else { var ls = new List <int>(); for (var j = 0; j < orgElement.Length; j++) { ls.Add(i + j); } foreach (var c in division.RomaReading) { sb.Append(c.ToString().ToLower()); beginFlag.Add(false); convertFlag.Add(true); indexes.Add(ls); Debug.Assert(sb.Length == indexes.Count); Debug.Assert(sb.Length == convertFlag.Count); } beginFlag[beginFlag.Count - division.RomaReading.Length] = true; } i += orgElement.Length; Debug.Assert(i <= matchCache.StringLength); } Debug.Assert(i == matchCache.StringLength); Debug.Assert(sb.Length == indexes.Count); Debug.Assert(sb.Length == convertFlag.Count); Debug.Assert(sb.Length == beginFlag.Count); var sp = new SpellCache4JapaneseRomaji(GetName(), sb.ToString(), indexes, convertFlag, beginFlag); matchCache.SpellCaches.AddOrUpdate(nameof(JapaneseRomajiProvider), sp, (key, value) => value); }
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); } }
public bool CanHandle(string source, DiaryMode mode) { var match = regex.Match(source); cached = new MatchCache(source, match); return match.Success; }
/// <summary> /// using keywords to match the cache of the original string /// </summary> /// <param name="matchCache">cache of the original string</param> /// <param name="keyword">single keyword</param> /// <returns></returns> public MatchResult Match(MatchCache matchCache, string keyword) { return(Match(matchCache, new[] { keyword })); }
public void FindMatchesTest() { var matcher = new ChineseZhCnPinYinMatchProvider(false); var matcherCase = new ChineseZhCnPinYinMatchProvider(true); var dspen = matcher.GetProviderDescriptionEn(); var dsp = matcher.GetProviderDescription(); Assert.IsTrue(matcher.GetProviderName() == nameof(ChineseZhCnPinYinMatchProvider)); { 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); } { 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"); } { 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 ret = matcher.DoMatches(new MatchCache("大夫"), new[] { "Daif" }); Assert.IsTrue(ret.IsMatchAllKeywords == true); Assert.IsTrue(ret.HitFlags.All(x => x)); } { var ret = matcher.DoMatches(new MatchCache("大夫"), new[] { "Daf" }); Assert.IsTrue(ret.IsMatchAllKeywords == true); Assert.IsTrue(ret.HitFlags.All(x => x)); } { var ret = matcher.DoMatches(new MatchCache("大夫A"), new[] { "DaifUa" }); Assert.IsTrue(ret.IsMatchAllKeywords == true); Assert.IsTrue(ret.HitFlags.All(x => x)); } { var ret = matcher.DoMatches(new MatchCache("大夫B"), new[] { "Dafb" }); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var ret = matcher.DoMatches(new MatchCache("大夫C"), new[] { "DaifUa" }); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var sd = new MatchCache("这东西重量有多重?"); matcher.AppendDescriptions(ref sd); Assert.IsTrue(sd.SpellCaches[matcher.GetProviderName()].GetProviderName() == matcher.GetProviderName()); } { var kws = new[] { "a" }; var sd = new MatchCache("abcdefg"); matcher.AppendDescriptions(ref sd); // no Chinese Assert.IsTrue( sd.SpellCaches[nameof(ChineseZhCnPinYinMatchProvider)] is SpellCache sc && sc.Units.All(x => x.Count == 0)); var ret = matcher.DoMatches(sd, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } var testNoCase = new MatchCache("多重多次,行中Ab, "); matcher.AppendDescriptions(ref testNoCase); { var kws = new[] { "A" }; var ret = matcher.DoMatches(new MatchCache("啊a"), kws); var m = ret.HitFlags; Assert.IsTrue(m[0] == true && m[1] == true); } { var kws = new[] { "a" }; var ret = matcher.DoMatches(new MatchCache("啊a"), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m[0] == true && m[1] == true); } { var kws = new[] { "DUOC" }; var ret = matcher.DoMatches(new MatchCache(testNoCase.OriginalString), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "DUOCHONG" }; matcher.AppendDescriptions(ref testNoCase); var ret = matcher.DoMatches(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "DUOZHONG", "Hangzhong" }; var ret = matcher.DoMatches(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "XingZhongA" }; var ret = matcher.DoMatches(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "XingZhonga" }; var ret = matcher.DoMatches(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "HangZhongA" }; var ret = matcher.DoMatches(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "HangZhonga" }; var ret = matcher.DoMatches(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "XINGZhongAb" }; var ret = matcher.DoMatches(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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 kws = new[] { "A" }; var ret = matcherCase.DoMatches(new MatchCache("啊a"), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m[0] == true && m[1] == false); } { var kws = new[] { "a" }; var ret = matcherCase.DoMatches(new MatchCache("啊a"), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m[0] == true && m[1] == true); } { var kws = new[] { "DuoZ" }; var ret = matcherCase.DoMatches(new MatchCache("多重多次,行中Ab, "), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "DuoC" }; matcherCase.AppendDescriptions(ref testNoCase); var ret = matcherCase.DoMatches(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "Duoz", "HangZ" }; var ret = matcherCase.DoMatches(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "Duoz", "XingZ" }; var ret = matcherCase.DoMatches(testNoCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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 testCase = new MatchCache("多重多次,行中Ab, "); matcherCase.AppendDescriptions(ref testCase); { var kws = new[] { "XingZhongA" }; var ret = matcherCase.DoMatches(testCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "XingZhonga" }; var ret = matcherCase.DoMatches(testCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { "HangZhongA" }; var ret = matcherCase.DoMatches(testCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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[] { "HangZhonga" }; var ret = matcherCase.DoMatches(testCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { "xingzhongab" }; var ret = matcherCase.DoMatches(testCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { "aB", "," }; var ret = matcherCase.DoMatches(testCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { ",", ", " }; var ret = matcherCase.DoMatches(testCase, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == testNoCase.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 = matcher.DoMatches(new MatchCache("大夫A"), new[] { "Daf", "B" }); Assert.IsTrue(ret.IsMatchAllKeywords == false); var m = ret.HitFlags; Assert.IsTrue(m.Count == 3 && m[0] == true && m[1] == true && m[2] == false); } }
/// <summary> /// append cache for this match provider to MatchCache /// </summary> /// <returns></returns> public abstract void AppendDescriptions(ref MatchCache matchCache);
public void FindMatchesTestCase() { var matcher = new JapaneseRomajiProvider(true); Assert.IsTrue(matcher.GetProviderName() == nameof(JapaneseRomajiProvider)); var dspen = matcher.GetProviderDescriptionEn(); var dsp = matcher.GetProviderDescription(); { { string str = "abcdefg"; var kws = new[] { "a" }; var ret = matcher.DoMatches(new MatchCache(str), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); // false by no Chinese char Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "a"); } { string str = "abcdefg"; var kws = new[] { "A" }; var ret = matcher.DoMatches(new MatchCache(str), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); // false by no Chinese char Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "A"); } } var org = new MatchCache("こんにちは, 世界A"); matcher.AppendDescriptions(ref org); Assert.IsTrue(org.SpellCaches.First().Value.GetProviderName() == matcher.GetProviderName()); { var kws = new[] { "kon" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.StringLength && m[0] == true && m[1] == true && m[2] == true && m[3] == true && m[4] == true && m[5] == false && m[6] == false && m[7] == false && m[8] == false && m[9] == false); } { var kws = new[] { "konaa" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { "konaA" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.StringLength && m[0] == true && m[1] == true && m[2] == true && m[3] == true && m[4] == true && m[5] == false && m[6] == false && m[7] == false && m[8] == false && m[9] == true); } { var kws = new[] { "sk" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.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] == false); } { var kws = new[] { "se" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.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] == false); } { var kws = new[] { "skai" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.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] == false); } { var kws = new[] { "skaia" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { "skaiA" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.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); } { var kws = new[] { "," }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.StringLength && m[0] == false && m[1] == false && m[2] == false && m[3] == false && m[4] == false && m[5] == true && m[6] == false && m[7] == false && m[8] == false && m[9] == false); } matcher.AppendDescriptions(ref org); { var kws = new[] { "konse" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.StringLength && m[0] == true && m[1] == true && m[2] == true && m[3] == true && m[4] == true && m[5] == false && m[6] == false && m[7] == true && m[8] == true && m[9] == false); } matcher.AppendDescriptions(ref org); { var kws = new[] { "kon", "se" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.StringLength && m[0] == true && m[1] == true && m[2] == true && m[3] == true && m[4] == true && m[5] == false && m[6] == false && m[7] == true && m[8] == true && m[9] == false); } matcher.AppendDescriptions(ref org); { var kws = new[] { "kon", "," }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.StringLength && m[0] == true && m[1] == true && m[2] == true && m[3] == true && m[4] == true && m[5] == true && m[6] == false && m[7] == false && m[8] == false && m[9] == false); } { var kws = new[] { "chi" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { "kai" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { "konkai" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { var kws = new[] { "kon", "kai" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); } matcher.AppendDescriptions(ref org); { var kws = new[] { "kon", ",", "ABC" }; var ret = matcher.DoMatches(org, kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.StringLength && m[0] == true && m[1] == true && m[2] == true && m[3] == true && m[4] == true && m[5] == true && m[6] == false && m[7] == false && m[8] == false && m[9] == false); } }
/// <summary> /// for subclass /// </summary> /// <param name="matchCache"></param> /// <param name="keywords"></param> /// <param name="keywordsInTrueCase"></param> /// <returns></returns> protected abstract MatchResult DoFindMatches(MatchCache matchCache, IEnumerable <string> keywords, IEnumerable <string> keywordsInTrueCase);
public void FindMatchesTest() { var matcher = new DiscreteMatchProvider(false); var matcherCase = new DiscreteMatchProvider(true); var dspen = matcher.GetProviderDescriptionEn(); var dsp = matcher.GetProviderDescription(); Assert.IsTrue(matcher.GetProviderName() == nameof(DiscreteMatchProvider)); { var ret = matcher.DoMatches(new MatchCache(""), new[] { "" }); Assert.IsTrue(ret.IsMatchAllKeywords == false); } { string org = "abcdefg"; var str = new MatchCache(org); matcher.AppendDescriptions(ref str); matcherCase.AppendDescriptions(ref str); } { string org = "abcdefg"; var kws = new[] { "a" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "a"); Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false); } { string org = "abcdefg"; var kws = new[] { "A" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(ret.Keywords.Count == 1 && ret.Keywords[0] == "A"); Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == 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 == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == 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); var m = ret.HitFlags; Assert.IsTrue(m.All(x => x == false)); } { string org = "abcdefgabcdefg"; var kws = new[] { "defg", "abc" }; var ret = matcherCase.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m.All(x => x == true)); } { string org = "abaaa"; var kws = new[] { "aa" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == true && m[4] == true); } { string org = "abaa a"; var kws = new[] { "aa" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == true && m[4] == false && m[5] == true); } { string org = "abaa a"; var kws = new[] { " " }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == false && m[1] == false && m[2] == false && m[3] == false && m[4] == true && m[5] == false); } { string org = "abAAa"; var kws = new[] { "aa" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == true && m[4] == true); } { string org = "abAA a"; var kws = new[] { "aa" }; var ret = matcher.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == true && m[4] == false && m[5] == true); } { string org = "abAA a"; var kws = new[] { "aA" }; var ret = matcherCase.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == true && m[3] == false && m[4] == false && m[5] == false); } { string org = "abAA a"; var kws = new[] { "aa" }; var ret = matcherCase.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == false && m[2] == false && m[3] == false && m[4] == false && m[5] == true); } { string org = "abAA ab"; var kws = new[] { "aa", "ab" }; var ret = matcherCase.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == true); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == true && m[2] == false && m[3] == false && m[4] == false && m[5] == true && m[6] == true); } { string org = "abAA a"; var kws = new[] { "ab", "AB" }; var ret = matcherCase.DoMatches(new MatchCache(org), kws); Assert.IsTrue(ret.IsMatchAllKeywords == false); var m = ret.HitFlags; Assert.IsTrue(m.Count == org.Length && m[0] == true && m[1] == true && m[2] == false && m[3] == false && m[4] == false && m[5] == false); } }