public void Find_DisallowDuplicatesExactlyTwoMatches_ExecutesOnFoundTwice() { Word4Trie trie = new Word4Trie(); trie.Add(new Word4("abcd")); trie.Add(new Word4("acde")); trie.Add(new Word4("cdef")); trie.Add(new Word4("bdef")); trie.Add(new Word4("cefg")); trie.Add(new Word4("defg")); trie.Add(new Word4("efgh")); trie.Add(new Word4("dfgh")); trie.Add(new Word4("efgi")); trie.Add(new Word4("dfgi")); Word4GridFinder finder = new Word4GridFinder(trie, false); List <Word4Grid> grids = new List <Word4Grid>(); finder.Find(new Word4("abcd"), g => grids.Add(g)); Assert.Equal(2, grids.Count); Assert.Equal(new Word4("abcd"), grids[0].Row1); Assert.Equal(new Word4("cdef"), grids[0].Row2); Assert.Equal(new Word4("defg"), grids[0].Row3); Assert.Equal(new Word4("efgh"), grids[0].Row4); Assert.Equal(new Word4("abcd"), grids[1].Row1); Assert.Equal(new Word4("cdef"), grids[1].Row2); Assert.Equal(new Word4("defg"), grids[1].Row3); Assert.Equal(new Word4("efgi"), grids[1].Row4); }
public void Remove_FirstTimeReturnsTrueNextTimeReturnsFalse() { Word4Trie trie = new Word4Trie(); trie.Add(new Word4("zzzz")); Assert.True(trie.Remove(new Word4("zzzz"))); Assert.False(trie.Remove(new Word4("zzzz"))); Assert.False(trie.Remove(new Word4("zzzz"))); trie.Add(new Word4("zzzy")); Assert.True(trie.Remove(new Word4("zzzy"))); Assert.False(trie.Remove(new Word4("zzzy"))); Assert.False(trie.Remove(new Word4("zzzy"))); trie.Add(new Word4("zzxy")); Assert.True(trie.Remove(new Word4("zzxy"))); Assert.False(trie.Remove(new Word4("zzxy"))); Assert.False(trie.Remove(new Word4("zzxy"))); trie.Add(new Word4("zwxy")); Assert.True(trie.Remove(new Word4("zwxy"))); Assert.False(trie.Remove(new Word4("zwxy"))); Assert.False(trie.Remove(new Word4("zwxy"))); trie.Add(new Word4("vwxy")); Assert.True(trie.Remove(new Word4("vwxy"))); Assert.False(trie.Remove(new Word4("vwxy"))); Assert.False(trie.Remove(new Word4("vwxy"))); }
public void Match3_EmptyTrie_DoesNothing() { Word4Trie trie = new Word4Trie(); int count = 0; trie.Match3('a', 'b', 'c', w => ++ count); Assert.Equal(0, count); }
public void Remove_TrieEmpty_AlwaysReturnsFalse() { Word4Trie trie = new Word4Trie(); Assert.False(trie.Remove(new Word4("zzzz"))); Assert.False(trie.Remove(new Word4("zzzy"))); Assert.False(trie.Remove(new Word4("zzxy"))); Assert.False(trie.Remove(new Word4("zwxy"))); Assert.False(trie.Remove(new Word4("vwxy"))); }
public void Construct_WordSequence_AddsToTrie() { Word4 w1 = new Word4("aaaa"); Word4 w2 = new Word4("zzzz"); Word4Trie trie = new Word4Trie(new Word4[] { w1, w2 }); Assert.True(trie.Contains(w1)); Assert.True(trie.Contains(w2)); }
public void Match3_NoMatch_DoesNothing() { Word4Trie trie = new Word4Trie(); trie.Add(new Word4("bbbb")); int count = 0; trie.Match3('a', 'b', 'c', w => ++ count); Assert.Equal(0, count); }
private static void NoMatchesForInputWordInnerTest(bool allowDuplicateWords) { Word4Trie trie = new Word4Trie(); Word4GridFinder finder = new Word4GridFinder(trie, allowDuplicateWords); int count = 0; finder.Find(new Word4("abcd"), g => ++ count); Assert.Equal(0, count); }
public void Match1_NullOnMatch_ThrowsArgumentNull() { Word4Trie trie = new Word4Trie(); Action <Word4> onMatch = null; Exception e = Record.Exception(() => trie.Match1('a', onMatch)); Assert.NotNull(e); ArgumentNullException ane = Assert.IsType <ArgumentNullException>(e); Assert.Equal("onMatch", ane.ParamName); }
public void Match3_NullAction_ThrowsArgumentNull() { Word4Trie trie = new Word4Trie(); Action <Word4> action = null; Exception e = Record.Exception(() => trie.Match3('a', 'b', 'c', action)); Assert.NotNull(e); ArgumentNullException ane = Assert.IsType <ArgumentNullException>(e); Assert.Equal("onMatch", ane.ParamName); }
private static void MatchInputWordButNoOtherWordsInnerTest(bool allowDuplicateWords) { Word4Trie trie = new Word4Trie(); trie.Add(new Word4("abcd")); Word4GridFinder finder = new Word4GridFinder(trie, allowDuplicateWords); int count = 0; finder.Find(new Word4("abcd"), g => ++ count); Assert.Equal(0, count); }
public void Find_AllowDuplicatesMatchesFirstAndSecondRowAndColumnsButNoOtherWords_DoesNothing() { Word4Trie trie = new Word4Trie(); trie.Add(new Word4("abcd")); trie.Add(new Word4("bcde")); Word4GridFinder finder = new Word4GridFinder(trie, true); int count = 0; finder.Find(new Word4("abcd"), g => ++ count); Assert.Equal(0, count); }
public void Match3_WithMatches_ExecutesForEachPrefixMatch() { Word4Trie trie = new Word4Trie(); trie.Add(new Word4("abbc")); trie.Add(new Word4("abbd")); trie.Add(new Word4("baaa")); trie.Add(new Word4("bacd")); List <string> wordsSeen = new List <string>(); trie.Match3('a', 'b', 'b', w => wordsSeen.Add(w.ToString())); wordsSeen.Sort(); Assert.Equal(2, wordsSeen.Count); Assert.Equal("abbc", wordsSeen[0]); Assert.Equal("abbd", wordsSeen[1]); }
public void Find_DisallowDuplicatesNoMatchesWithSixWords_DoesNothing() { Word4Trie trie = new Word4Trie(); trie.Add(new Word4("abcd")); trie.Add(new Word4("abce")); trie.Add(new Word4("bcde")); trie.Add(new Word4("cdef")); trie.Add(new Word4("defg")); trie.Add(new Word4("eefg")); Word4GridFinder finder = new Word4GridFinder(trie, false); int count = 0; finder.Find(new Word4("abcd"), g => ++ count); Assert.Equal(0, count); }
public void Find_DisallowDuplicatesNoMatchesWithSevenWordsLastRow_DoesNothing() { Word4Trie trie = new Word4Trie(); trie.Add(new Word4("abcc")); trie.Add(new Word4("acbc")); trie.Add(new Word4("babx")); trie.Add(new Word4("bbbx")); trie.Add(new Word4("cadx")); trie.Add(new Word4("cdbx")); trie.Add(new Word4("cxxx")); Word4GridFinder finder = new Word4GridFinder(trie, false); int count = 0; finder.Find(new Word4("abcc"), g => ++ count); Assert.Equal(0, count); }
public void Contains_ReturnsTrueIfFoundFalseOtherwise() { Word4Trie trie = new Word4Trie(); Assert.False(trie.Contains(new Word4("abcd"))); trie.Add(new Word4("abcd")); Assert.True(trie.Contains(new Word4("abcd"))); Assert.False(trie.Contains(new Word4("abdd"))); trie.Add(new Word4("abdd")); Assert.True(trie.Contains(new Word4("abdd"))); trie.Remove(new Word4("abcd")); Assert.False(trie.Contains(new Word4("abcd"))); }
private static void MismatchOnLastColumnInnerTest(bool allowDuplicateWords) { Word4Trie trie = new Word4Trie(); trie.Add(new Word4("arts")); trie.Add(new Word4("root")); trie.Add(new Word4("mire")); trie.Add(new Word4("sled")); trie.Add(new Word4("arms")); trie.Add(new Word4("roil")); trie.Add(new Word4("tore")); Word4GridFinder finder = new Word4GridFinder(trie, allowDuplicateWords); int count = 0; finder.Find(new Word4("arts"), g => ++ count); Assert.Equal(0, count); }
public void Find_AllowDuplicatesExactlyOneMatchWithFourWords_ExecutesOnFoundOnce() { Word4Trie trie = new Word4Trie(); trie.Add(new Word4("abcd")); trie.Add(new Word4("bcde")); trie.Add(new Word4("cdef")); trie.Add(new Word4("defg")); Word4GridFinder finder = new Word4GridFinder(trie, true); List <Word4Grid> grids = new List <Word4Grid>(); finder.Find(new Word4("abcd"), g => grids.Add(g)); Assert.Equal(1, grids.Count); Assert.Equal(new Word4("abcd"), grids[0].Row1); Assert.Equal(new Word4("bcde"), grids[0].Row2); Assert.Equal(new Word4("cdef"), grids[0].Row3); Assert.Equal(new Word4("defg"), grids[0].Row4); }
private static void FindOneMatchEightWordsInnerTest(bool allowDuplicateWords) { Word4Trie trie = new Word4Trie(); trie.Add(new Word4("pray")); trie.Add(new Word4("hole")); trie.Add(new Word4("idea")); trie.Add(new Word4("seer")); trie.Add(new Word4("phis")); trie.Add(new Word4("rode")); trie.Add(new Word4("alee")); trie.Add(new Word4("year")); Word4GridFinder finder = new Word4GridFinder(trie, allowDuplicateWords); List <Word4Grid> grids = new List <Word4Grid>(); finder.Find(new Word4("pray"), g => grids.Add(g)); Assert.Equal(1, grids.Count); Assert.Equal(new Word4("pray"), grids[0].Row1); Assert.Equal(new Word4("hole"), grids[0].Row2); Assert.Equal(new Word4("idea"), grids[0].Row3); Assert.Equal(new Word4("seer"), grids[0].Row4); }