public void Test() { DateTime dateAdded = DateTime.UtcNow.AddDays(-100); DateTime dateRepeated1 = dateAdded + new TimeSpan(1, 0, 0, 0); DateTime dateForgotten = dateAdded + new TimeSpan(2, 0, 0, 0); DateTime dateRepeated2 = dateAdded + new TimeSpan(2, 0, 1, 0); DateTime dateRepeated3 = dateAdded + new TimeSpan(3, 0, 0, 0); DateTime dateLearned = dateAdded + new TimeSpan(4, 0, 0, 0); DateTime dateVerified = dateAdded + new TimeSpan(10, 0, 0, 0); Word word = new Word(); word.Name = "name"; word.Description = "descr"; word.Tags = "tag1, tag2"; word.Events.Add(new WordEvent(dateAdded, WordEventType.Added)); word.Events.Add(new WordEvent(dateRepeated1, WordEventType.Remembered)); word.Events.Add(new WordEvent(dateForgotten, WordEventType.Forgotten)); word.Events.Add(new WordEvent(dateRepeated2, WordEventType.Remembered)); WordList wordList = new WordList(); wordList.Populate(new List <Word> { word }); WordInfo wordInfo = WordInfo.Create(wordList, word); Assert.That(wordInfo.LastEvent.LastStateChange, Is.EqualTo(dateForgotten)); Assert.That(wordInfo.State, Is.EqualTo(WordState.Studied)); Assert.That(wordInfo.IsStudied); Assert.That(!wordInfo.IsLearned); Assert.That(!wordInfo.IsVerified); word.Events.Add(new WordEvent(dateRepeated3, WordEventType.Remembered)); wordInfo.Update(); Assert.That(wordInfo.LastEvent.LastStateChange, Is.EqualTo(dateRepeated3)); Assert.That(wordInfo.State, Is.EqualTo(WordState.Repeated)); Assert.That(wordInfo.IsStudied); Assert.That(!wordInfo.IsLearned); Assert.That(!wordInfo.IsVerified); word.Events.Add(new WordEvent(dateLearned, WordEventType.Remembered)); wordInfo.Update(); Assert.That(wordInfo.LastEvent.LastStateChange, Is.EqualTo(dateLearned)); Assert.That(wordInfo.State, Is.EqualTo(WordState.Learned)); Assert.That(wordInfo.IsStudied); Assert.That(wordInfo.IsLearned); Assert.That(!wordInfo.IsVerified); word.Events.Add(new WordEvent(dateVerified, WordEventType.Remembered)); wordInfo.Update(); Assert.That(wordInfo.LastEvent.LastStateChange, Is.EqualTo(dateVerified)); Assert.That(wordInfo.State, Is.EqualTo(WordState.Verified)); Assert.That(wordInfo.IsStudied); Assert.That(wordInfo.IsLearned); Assert.That(wordInfo.IsVerified); }
public WordFilter(string[] words) { _trie = new Trie <WordInfo>(); _trieOfReversed = new Trie <WordInfo>(); for (int i = 0; i < words.Length; ++i) { Func <string, WordInfo> getNodeInfo = s => WordInfo.Create(words[i], i); _trie.Insert(words[i], getNodeInfo); var reversedWord = new string(words[i].Reverse().ToArray()); _trieOfReversed.Insert(reversedWord, getNodeInfo); } }