예제 #1
0
        public void SeveralWordsTest()
        {
            var lookingWords = new List <string>()
            {
                "text", "search"
            };

            var fsa = new SearchFsa <char>();

            foreach (var word in lookingWords)
            {
                fsa.Add(word);
            }
            fsa.Prepare();

            var words = new List <string>();
            var ep    = fsa.GetEndPoint((index, context) =>
            {
                var currentWord = context.ToString();
                words.Add(currentWord);
            });

            var data = "the search text example";

            foreach (var ch in data)
            {
                ep.ProcessIncome(ch);
            }

            foreach (var word in lookingWords)
            {
                Assert.AreEqual(words.Contains(word), true);
            }
        }
예제 #2
0
        public void LoremSampleTest()
        {
            var lookingWords = new List <string>()
            {
                "vitae", "magna", "tempus", "lectus", "varius", "libero", "sed", "nunc"
            };

            var fsa = new SearchFsa <char>();

            foreach (var word in lookingWords)
            {
                fsa.Add(word);
            }
            fsa.Prepare();

            var words = new List <string>();
            var ep    = fsa.GetEndPoint((index, context) =>
            {
                var currentWord = context.ToString();
                words.Add(currentWord);
            });

            foreach (var ch in Lorem5)
            {
                ep.ProcessIncome(ch);
            }

            foreach (var word in lookingWords)
            {
                Assert.AreEqual(words.Contains(word), true);
            }
        }
예제 #3
0
        public void OverlappingTextTest()
        {
            var lookingWords = new List <string>()
            {
                "test", "tester", "eres", "este", "est", "ste"
            };

            var fsa = new SearchFsa <char>();

            foreach (var word in lookingWords)
            {
                fsa.Add(word);
            }
            fsa.Prepare();

            var words = new List <string>();
            var ep    = fsa.GetEndPoint((index, context) =>
            {
                var currentWord = context.ToString();
                words.Add(currentWord);
            });

            var data = "tetetestesterest";

            foreach (var ch in data)
            {
                ep.ProcessIncome(ch);
            }

            foreach (var word in lookingWords)
            {
                Assert.AreEqual(words.Contains(word), true);
            }
        }
        public List <IToken> IntGetTokens(string sourceText, IFileSource fileSource, OffsetsStore offsetsStore)
        {
            var clearText        = ClearSourceText(sourceText, offsetsStore);
            SearchFsa <char> fsa = PrepareFsa();

            var tokens = new List <IToken>();
            var ep     = fsa.GetEndPoint((index, context) =>
            {
                var currentWord = context.ToString();
                var token       = new CsToken()
                {
                    Code         = CSharpKeywords.Keywords[currentWord],
                    Position     = index,
                    FileSource   = fileSource,
                    StringLength = currentWord.Length
                };
                tokens.Add(token);
            });

            foreach (var ch in sourceText)
            {
                ep.ProcessIncome(ch);
            }

            return(tokens);
        }
 private static SearchFsa <char> PrepareFsa()
 {
     if (_fsa == null)
     {
         _fsa = new SearchFsa <char>();
         foreach (var word in CSharpKeywords.Keywords)
         {
             _fsa.Add(word.Key);
         }
         _fsa.Prepare();
     }
     return(_fsa);
 }
예제 #6
0
        public void SingleWordTest()
        {
            var fsa = new SearchFsa <char>();

            fsa.Add("text");
            fsa.Prepare();

            var correct = false;
            var ep      = fsa.GetEndPoint((index, context) =>
            {
                correct = true;
            });

            var data = "the search text example";

            foreach (var ch in data)
            {
                ep.ProcessIncome(ch);
            }

            Assert.AreEqual(correct, true);
        }
예제 #7
0
        public void OverlappingTextTest2()
        {
            var lookingWords = new List <string>()
            {
                "telega", "eleg"
            };
            var fsa = new SearchFsa <char>();

            foreach (var word in lookingWords)
            {
                fsa.Add(word);
            }
            fsa.Prepare();

            var words = new Dictionary <string, int>();
            var ep    = fsa.GetEndPoint((index, context) =>
            {
                var currentWord = context.ToString();
                if (!words.ContainsKey(currentWord))
                {
                    words[currentWord] = 0;
                }
                words[currentWord]++;
            });

            var data = "telegrammaotelega";

            foreach (var ch in data)
            {
                ep.ProcessIncome(ch);
            }

            var keys = words.Keys.ToArray();
            Func <string, int, bool> checkWord = (word, cnt) => keys.Contains(word) && (words[word] == cnt);

            Assert.AreEqual(checkWord("telega", 1), true);
            Assert.AreEqual(checkWord("eleg", 2), true);
        }