public void VerifyIsValueUsedInBox()
        {
            int[,] array = new int[9, 9]
            {
                { 0, 2, 3, 1, 0, 0, 0, 0, 0 },
                { 4, 5, 6, 0, 0, 0, 0, 0, 0 },
                { 7, 8, 9, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 9, 8, 7 },
                { 0, 0, 0, 0, 0, 0, 6, 5, 4 },
                { 0, 0, 0, 0, 0, 0, 3, 2, 0 },
            };

            SudokuTable          st  = new SudokuTable(array);
            SudokuTableValidator stv = new SudokuTableValidator(st);

            // box 1 - numbers 2-9 are used, 1 is available to set
            Assert.IsFalse(stv.IsUsedInBox(1, 1));
            Assert.IsTrue(stv.IsUsedInBox(1, 5));
            Assert.IsTrue(stv.IsUsedInBox(1, 9));

            // box 2 - number 1 is used, 2-9 are available to set
            Assert.IsTrue(stv.IsUsedInBox(2, 1));
            Assert.IsFalse(stv.IsUsedInBox(2, 2));
            Assert.IsFalse(stv.IsUsedInBox(2, 3));
            Assert.IsFalse(stv.IsUsedInBox(2, 4));
            Assert.IsFalse(stv.IsUsedInBox(2, 5));
            Assert.IsFalse(stv.IsUsedInBox(2, 6));
            Assert.IsFalse(stv.IsUsedInBox(2, 7));
            Assert.IsFalse(stv.IsUsedInBox(2, 8));
            Assert.IsFalse(stv.IsUsedInBox(2, 9));

            // box 9 - numbers 2-9 are used, 1 is available
            Assert.IsFalse(stv.IsUsedInBox(9, 1));
            Assert.IsTrue(stv.IsUsedInBox(9, 2));
            Assert.IsTrue(stv.IsUsedInBox(9, 3));
            Assert.IsTrue(stv.IsUsedInBox(9, 4));
            Assert.IsTrue(stv.IsUsedInBox(9, 5));
            Assert.IsTrue(stv.IsUsedInBox(9, 6));
            Assert.IsTrue(stv.IsUsedInBox(9, 7));
            Assert.IsTrue(stv.IsUsedInBox(9, 8));
            Assert.IsTrue(stv.IsUsedInBox(9, 9));
        }
        public void VerifyIsValueUsedInRow()
        {
            int[,] array = new int[9, 9]
            {
                { 1, 2, 3, 4, 5, 0, 7, 8, 9 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 8, 7, 6, 5, 4, 3, 2, 1 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 9, 8, 7, 6, 5, 4, 3, 2, 1 },
            };

            SudokuTable          st  = new SudokuTable(array);
            SudokuTableValidator stv = new SudokuTableValidator(st);

            // row 0 - 2-9 are used, 1 is available
            Assert.IsFalse(stv.IsUsedInRow(0, 6));
            // Assert.IsTrue(stv.IsUsedInRow(0, 1));
            Assert.IsTrue(stv.IsUsedInRow(0, 9));

            // row 1 - 1-9 are not used
            Assert.IsFalse(stv.IsUsedInRow(1, 1));
            Assert.IsFalse(stv.IsUsedInRow(1, 2));
            Assert.IsFalse(stv.IsUsedInRow(1, 3));
            Assert.IsFalse(stv.IsUsedInRow(1, 4));
            Assert.IsFalse(stv.IsUsedInRow(1, 5));
            Assert.IsFalse(stv.IsUsedInRow(1, 6));
            Assert.IsFalse(stv.IsUsedInRow(1, 7));
            Assert.IsFalse(stv.IsUsedInRow(1, 8));
            Assert.IsFalse(stv.IsUsedInRow(1, 9));

            // row 4 - 1-8 are used
            Assert.IsFalse(stv.IsUsedInRow(4, 9));
            Assert.IsTrue(stv.IsUsedInRow(4, 8));
            Assert.IsTrue(stv.IsUsedInRow(4, 4));
            Assert.IsTrue(stv.IsUsedInRow(4, 1));

            // row 9 - all 1-9 are used
            Assert.IsTrue(stv.IsUsedInRow(8, 1));
            Assert.IsTrue(stv.IsUsedInRow(8, 4));
            Assert.IsTrue(stv.IsUsedInRow(8, 9));
        }
        public void VerifyIsSafe()
        {
            // fully solved sudoku table, but position [4,4], where 9 is missing
            int[,] array = new int[9, 9]
            {
                { 2, 6, 7, 1, 3, 8, 5, 4, 9 },
                { 1, 9, 4, 6, 7, 5, 8, 3, 2 },
                { 5, 3, 8, 9, 2, 4, 1, 6, 7 },
                { 9, 4, 3, 8, 1, 7, 2, 5, 6 },
                { 6, 2, 1, 5, 0, 3, 7, 8, 4 },
                { 7, 8, 5, 2, 4, 6, 9, 1, 3 },
                { 3, 5, 9, 4, 8, 2, 6, 7, 1 },
                { 4, 1, 6, 7, 5, 9, 3, 2, 8 },
                { 8, 7, 2, 3, 6, 1, 4, 9, 5 },
            };

            SudokuTable          st  = new SudokuTable(array);
            SudokuTableValidator stv = new SudokuTableValidator(st);

            Assert.IsTrue(stv.IsSafe(4, 4, 9));
            Assert.IsFalse(stv.IsSafe(4, 4, 1));
            Assert.IsFalse(stv.IsSafe(4, 4, 8));
            Assert.IsFalse(stv.IsSafe(4, 4, 3));
        }
Example #4
0
        public void VerifyGetNextEmptyCell()
        {
            int[,] array = new int[9, 9]
            {
                { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
                { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
                { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
                { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
                { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
                { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
                { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
                { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
                { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
            };

            SudokuTable          st  = new SudokuTable(array);
            SudokuTableValidator stv = new SudokuTableValidator(st);

            // no empty cells, so it should return [-1,-1]
            Assert.IsTrue(st.GetNextEmptyCell()[0].Equals(-1));
            Assert.IsTrue(st.GetNextEmptyCell()[1].Equals(-1));


            array = new int[9, 9]
            {
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
            };

            st  = new SudokuTable(array);
            stv = new SudokuTableValidator(st);

            // all empty cells, so 1st one - [0,0]
            Assert.IsTrue(st.GetNextEmptyCell()[0].Equals(0));
            Assert.IsTrue(st.GetNextEmptyCell()[1].Equals(0));


            array = new int[9, 9]
            {
                { 1, 2, 3, 4, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
            };

            st  = new SudokuTable(array);
            stv = new SudokuTableValidator(st);

            // 1st empty cell - [0,4]
            Assert.IsTrue(st.GetNextEmptyCell()[0].Equals(0));
            Assert.IsTrue(st.GetNextEmptyCell()[1].Equals(4));


            array = new int[9, 9]
            {
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 0, 2, 3, 4, 5, 6, 7, 8, 0 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
            };

            st  = new SudokuTable(array);
            stv = new SudokuTableValidator(st);

            // 1st empty cell - [4,0]
            Assert.IsTrue(st.GetNextEmptyCell()[0].Equals(4));
            Assert.IsTrue(st.GetNextEmptyCell()[1].Equals(0));


            array = new int[9, 9]
            {
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 0 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
            };

            st  = new SudokuTable(array);
            stv = new SudokuTableValidator(st);

            // 1st empty cell - [4,8]
            Assert.IsTrue(st.GetNextEmptyCell()[0].Equals(4));
            Assert.IsTrue(st.GetNextEmptyCell()[1].Equals(8));


            array = new int[9, 9]
            {
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 0, 2, 3, 4, 5, 6, 7, 8, 9 },
            };

            st  = new SudokuTable(array);
            stv = new SudokuTableValidator(st);

            // 1st empty cell - [8,0]
            Assert.IsTrue(st.GetNextEmptyCell()[0].Equals(8));
            Assert.IsTrue(st.GetNextEmptyCell()[1].Equals(0));


            array = new int[9, 9]
            {
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
                { 1, 2, 3, 4, 5, 6, 7, 8, 0 },
            };

            st  = new SudokuTable(array);
            stv = new SudokuTableValidator(st);

            // 1st empty cell - [8,8]
            Assert.IsTrue(st.GetNextEmptyCell()[0].Equals(8));
            Assert.IsTrue(st.GetNextEmptyCell()[1].Equals(8));
        }
        public void VerifyIsValueUsedInColumn()
        {
            int[,] array = new int[9, 9]
            {
                { 1, 1, 0, 9, 0, 3, 0, 0, 9 },
                { 2, 0, 0, 0, 0, 0, 0, 8, 8 },
                { 3, 0, 0, 0, 0, 0, 0, 7, 7 },
                { 4, 0, 0, 0, 0, 0, 0, 6, 6 },
                { 5, 0, 0, 0, 0, 0, 0, 5, 5 },
                { 6, 0, 0, 0, 0, 0, 0, 4, 4 },
                { 7, 0, 0, 0, 0, 0, 0, 3, 3 },
                { 8, 0, 0, 0, 0, 0, 0, 2, 2 },
                { 0, 0, 1, 0, 9, 0, 3, 1, 0 },
            };

            SudokuTable          st  = new SudokuTable(array);
            SudokuTableValidator stv = new SudokuTableValidator(st);

            // 1st col - 1-8 are used, 9 is available
            Assert.IsTrue(stv.IsUsedInColumn(0, 1));
            Assert.IsFalse(stv.IsUsedInColumn(0, 9));

            // 2nd col - only 1 is used
            Assert.IsTrue(stv.IsUsedInColumn(1, 1));
            Assert.IsFalse(stv.IsUsedInColumn(1, 5));
            Assert.IsFalse(stv.IsUsedInColumn(1, 9));

            // 3rd col - only 1 is used, different position
            Assert.IsTrue(stv.IsUsedInColumn(2, 1));
            Assert.IsFalse(stv.IsUsedInColumn(2, 5));
            Assert.IsFalse(stv.IsUsedInColumn(2, 9));

            // 4th col - only 9 is used
            Assert.IsTrue(stv.IsUsedInColumn(3, 9));
            Assert.IsFalse(stv.IsUsedInColumn(3, 6));
            Assert.IsFalse(stv.IsUsedInColumn(3, 2));

            // 5th col - only 9 is used, different position
            Assert.IsTrue(stv.IsUsedInColumn(4, 9));
            Assert.IsFalse(stv.IsUsedInColumn(4, 6));
            Assert.IsFalse(stv.IsUsedInColumn(4, 2));

            // 6th col - only 3 is used
            Assert.IsTrue(stv.IsUsedInColumn(5, 3));
            Assert.IsFalse(stv.IsUsedInColumn(5, 2));
            Assert.IsFalse(stv.IsUsedInColumn(5, 8));

            // 7th col - only 3 is used, different position
            Assert.IsTrue(stv.IsUsedInColumn(6, 3));
            Assert.IsFalse(stv.IsUsedInColumn(6, 2));
            Assert.IsFalse(stv.IsUsedInColumn(6, 8));

            // 8th col - 1-8 are used, 9 avail
            Assert.IsFalse(stv.IsUsedInColumn(7, 9));
            Assert.IsTrue(stv.IsUsedInColumn(7, 1));
            Assert.IsTrue(stv.IsUsedInColumn(7, 8));

            // 8th col - 2-9 are used, 1 avail
            Assert.IsTrue(stv.IsUsedInColumn(8, 2));
            Assert.IsTrue(stv.IsUsedInColumn(8, 9));
            Assert.IsFalse(stv.IsUsedInColumn(8, 1));
        }