public void Deselect_WithSelectedValue_SetsStateAndSquareCountCorrectly() { var puzzle = new Puzzle(4); var matrix = new ExactCoverMatrix(puzzle); new RowUniquenessConstraint().Constrain(puzzle, matrix); new ColumnUniquenessConstraint().Constrain(puzzle, matrix); int valueIndex = 0; Square square = matrix.GetSquare(new Coordinate(0, 1)); PossibleValue possibleValue = square.GetPossibleValue(valueIndex); Assert.True(possibleValue.TrySelect()); possibleValue.Deselect(); Assert.Equal(PossibleSquareState.UNKNOWN, possibleValue.State); Assert.Equal(4, square.NumPossibleValues); }
public void Deselect_WithSelectedValue_ReturnsDroppedRows() { var puzzle = new Puzzle(4); var matrix = new ExactCoverMatrix(puzzle); new RowUniquenessConstraint().Constrain(puzzle, matrix); new ColumnUniquenessConstraint().Constrain(puzzle, matrix); int valueIndex = 0; Square square = matrix.GetSquare(new Coordinate(0, 1)); PossibleValue possibleValue = square.GetPossibleValue(valueIndex); Assert.True(possibleValue.TrySelect()); possibleValue.Deselect(); Link linkA = possibleValue.FirstLink; Link linkB = linkA.Right; ConstraintHeader constraintA = linkA.Constraint; ConstraintHeader constraintB = linkB.Constraint; Assert.False(constraintA.IsSatisfied); Assert.False(constraintB.IsSatisfied); Assert.Equal(4, constraintA.Count); Assert.Equal(4, constraintB.Count); foreach (Link link in constraintA.GetLinks()) { if (link != linkA) { Assert.Equal(PossibleSquareState.UNKNOWN, link.PossibleSquare.State); } } foreach (Link link in constraintB.GetLinks()) { if (link != linkB) { Assert.Equal(PossibleSquareState.UNKNOWN, link.PossibleSquare.State); } } }