Example #1
0
        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);
        }
Example #2
0
        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")));
        }
Example #3
0
        public void Match3_EmptyTrie_DoesNothing()
        {
            Word4Trie trie  = new Word4Trie();
            int       count = 0;

            trie.Match3('a', 'b', 'c', w => ++ count);

            Assert.Equal(0, count);
        }
Example #4
0
        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")));
        }
Example #5
0
        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));
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #9
0
        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);
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }
Example #12
0
        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]);
        }
Example #13
0
        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);
        }
Example #14
0
        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);
        }
Example #15
0
        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")));
        }
Example #16
0
        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);
        }
Example #17
0
        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);
        }
Example #18
0
        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);
        }