public void TryDropAndReturnPossibility_WhenOkWithParent_Succeeds() { var fakePossibilities = new FakePossibility[] { new FakePossibility(), new FakePossibility(), }; var optional = OptionalObjective.CreateWithPossibilities(fakePossibilities, 1); var parent = new FakeObjective(isRequired: true); IPossibility possibility = optional; IObjective objective = optional; var linkToParent = Link.CreateConnectedLink(possibility, parent); var childToDrop = fakePossibilities[0]; Assert.True(objective.TryDropPossibility(childToDrop.AttachedObjectives.First())); Assert.Equal(NodeState.UNKNOWN, optional.State); Assert.Empty(fakePossibilities[1].DroppedFromObjectives); Assert.Empty(parent.DroppedPossibilities); Assert.True(objective.TryDropPossibility(fakePossibilities[1].AttachedObjectives.First())); Assert.Equal(NodeState.DROPPED, optional.State); Assert.Empty(fakePossibilities[1].DroppedFromObjectives); Assert.Single(parent.DroppedPossibilities, linkToParent); objective.ReturnPossibility(fakePossibilities[1].AttachedObjectives.First()); Assert.Equal(NodeState.UNKNOWN, optional.State); Assert.Empty(fakePossibilities[1].DroppedFromObjectives); Assert.Empty(parent.DroppedPossibilities); objective.ReturnPossibility(childToDrop.AttachedObjectives.First()); Assert.Equal(NodeState.UNKNOWN, optional.State); Assert.Empty(fakePossibilities[1].DroppedFromObjectives); Assert.Empty(parent.DroppedPossibilities); }
public void TryDropAndReturnPossibility_Succeeds() { var puzzle = new Puzzle(4); var matrix = ExactCoverGraph.Create(puzzle); var possibilities = new FakePossibility[] { new FakePossibility(), new FakePossibility(), new FakePossibility(), }; var toDrop = possibilities[0]; var concreteObjective = Objective.CreateFullyConnected(matrix, possibilities, 2); IObjective objective = concreteObjective; Assert.True(objective.TryDropPossibility(toDrop.AttachedObjectives.First())); Assert.Equal(2, concreteObjective.CountUnknown); Assert.Equal(2, objective.GetUnknownDirectPossibilities().Count()); Assert.Contains(possibilities[1], objective.GetUnknownDirectPossibilities()); Assert.Contains(possibilities[2], objective.GetUnknownDirectPossibilities()); Assert.Empty(toDrop.DroppedFromObjectives); objective.ReturnPossibility(toDrop.AttachedObjectives.First()); Assert.Equal(3, concreteObjective.CountUnknown); Assert.Equal(3, objective.GetUnknownDirectPossibilities().Count()); Assert.Contains(toDrop, objective.GetUnknownDirectPossibilities()); Assert.Contains(possibilities[1], objective.GetUnknownDirectPossibilities()); Assert.Contains(possibilities[2], objective.GetUnknownDirectPossibilities()); }