public void TestSolve()
        {
            var cpb = new CPBoard(bSolvableByCP);
            var sr  = CPSolver.Solve(cpb);

            Assert.True(sr.DidSolve);
            Assert.True(CPSolver.IsSolved(sr.CPB));

            cpb = new CPBoard(bSolved);
            sr  = CPSolver.Solve(cpb);
            Assert.True(sr.DidSolve);
            Assert.Equal("7", cpb.Get(0));
            Assert.True(CPSolver.IsSolved(sr.CPB));

            // Double check results
            cpb = new CPBoard(bSolvable);
            sr  = CPSolver.Solve(cpb);
            Assert.True(sr.DidSolve);
            Assert.True(CPSolver.IsSolved(sr.CPB));

            cpb = new CPBoard(bEmpty);
            sr  = CPSolver.Solve(cpb);
            Assert.True(sr.DidSolve);
            Assert.True(CPSolver.IsSolved(sr.CPB));
        }
        public void TestInitializeConstraints()
        {
            // This board is solvable from the constraints alone
            var cpb = new CPBoard(bSolvableByCP);

            Assert.True(CPSolver.InitializeConstraints(cpb));
            Assert.True(CPSolver.IsSolved(cpb));

            cpb = new CPBoard(bInvalid);
            Assert.False(CPSolver.InitializeConstraints(cpb));

            cpb = new CPBoard(bEmpty);
            Assert.True(CPSolver.InitializeConstraints(cpb));
            for (int i = 0; i < Const.N2; i++)
            {
                Assert.Equal("123456789", cpb.Get(i));
            }

            cpb = new CPBoard("1234" + bEmpty.Remove(0, 4));
            CPSolver.InitializeConstraints(cpb);
            Assert.Equal("1", cpb.Get(0));
            Assert.Equal("2", cpb.Get(1));
            Assert.Equal("3", cpb.Get(2));
            Assert.Equal("4", cpb.Get(3));
            Assert.Equal("56789", cpb.Get(4));

            // TODO: Double check results
            cpb = new CPBoard(bSolvable);
            CPSolver.InitializeConstraints(cpb);
            Assert.Equal("1458", cpb.Get(2));
        }
        public void TestIsSolved()
        {
            var cpb = new CPBoard(bSolvableByCP);

            Assert.False(CPSolver.IsSolved(cpb));

            cpb = new CPBoard(bSolved);
            Assert.True(CPSolver.IsSolved(cpb));

            cpb = new CPBoard(bInvalid);
            Assert.False(CPSolver.IsSolved(cpb));
        }