public void TC_Transitions() { var problem = new Planner.SAS.Problem(new SASInputData(GetFilePath("TC_Gripper.sas"))); ISuccessor successor = problem.GetSuccessors(problem.InitialState).First(); Assert.IsFalse(successor.IsComplexTransition()); Assert.IsTrue(successor.GetSuccessorState().Equals(successor.GetTransitionResult())); var successorResults = successor.GetComplexTransitionResults().ToList(); Assert.AreEqual(1, successorResults.Count); Assert.IsTrue(successorResults.First().Equals(successor.GetTransitionResult())); IPredecessor predecessor = problem.GetPredecessors(problem.GoalConditions).First(); Assert.IsFalse(predecessor.IsComplexTransition()); Assert.IsTrue(predecessor.GetPredecessorConditions().Equals(predecessor.GetTransitionResult())); var predecessorResults = predecessor.GetComplexTransitionResults().ToList(); Assert.AreEqual(1, predecessorResults.Count); Assert.IsTrue(predecessorResults.First().Equals(predecessor.GetTransitionResult())); IPredecessor predecessor2 = problem.GetPredecessors(problem.GoalConditions.GetCorrespondingRelativeStates(problem).First()).First(); Assert.IsTrue(predecessor2.IsComplexTransition()); Assert.IsTrue(CollectionsEquality.Equals(predecessor2.GetPredecessorRelativeStates(), predecessor2.GetComplexTransitionResults())); var predecessorResults2 = predecessor2.GetComplexTransitionResults().ToList(); Assert.AreEqual(1, predecessorResults2.Count); Assert.IsTrue(predecessorResults2.First().Equals(predecessor2.GetTransitionResult())); }
/// <inheritdoc /> public bool MoveNext() { var next = _current.Next; _current = next is IPredecessor <TPayload> predecessor ? predecessor : LinkPredecessorDecorator <TPayload> .Decorate(next, new EndLink <TPayload>(next)); return(!(next is EndLink <TPayload>)); }
/// <inheritdoc /> public void Reset() { _current = new StartLink <TPayload>(_start); }
/// <summary> /// Constructor /// </summary> public PredecessorEnumerator(IPredecessor <TPayload> start) { _start = start; Reset(); }
public StartLink(IPredecessor <TPayload> next) { Next = LinkSuccessorDecorator <TPayload> .Decorate(next, this); }
/// <summary> /// Constructor /// </summary> public PredecessorEnumerable(IPredecessor <TPayload> primer) { _primer = primer; }
public static ISuccessor <TPayload> Decorate(ILink <TPayload> decorated, IPredecessor <TPayload> previous) => new LinkWrapper(decorated, previous);
/// <summary> /// Constructor /// </summary> public PredecessorWrapper(IPredecessor <TPayload> decorated, IPredecessor <TPayload> previous) { _decorated = decorated; Previous = previous; }
public static IDoubleChainedLink <TPayload> Decorate(IPredecessor <TPayload> decorated, IPredecessor <TPayload> previous) => new PredecessorWrapper(decorated, previous);