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()));
        }
Beispiel #2
0
        /// <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>));
        }
Beispiel #3
0
 /// <inheritdoc />
 public void Reset()
 {
     _current = new StartLink <TPayload>(_start);
 }
Beispiel #4
0
 /// <summary>
 /// Constructor
 /// </summary>
 public PredecessorEnumerator(IPredecessor <TPayload> start)
 {
     _start = start;
     Reset();
 }
Beispiel #5
0
 public StartLink(IPredecessor <TPayload> next)
 {
     Next = LinkSuccessorDecorator <TPayload> .Decorate(next, this);
 }
Beispiel #6
0
 /// <summary>
 /// Constructor
 /// </summary>
 public PredecessorEnumerable(IPredecessor <TPayload> primer)
 {
     _primer = primer;
 }
Beispiel #7
0
 public static ISuccessor <TPayload> Decorate(ILink <TPayload> decorated, IPredecessor <TPayload> previous)
 => new LinkWrapper(decorated, previous);
Beispiel #8
0
 /// <summary>
 /// Constructor
 /// </summary>
 public PredecessorWrapper(IPredecessor <TPayload> decorated, IPredecessor <TPayload> previous)
 {
     _decorated = decorated;
     Previous   = previous;
 }
Beispiel #9
0
 public static IDoubleChainedLink <TPayload> Decorate(IPredecessor <TPayload> decorated, IPredecessor <TPayload> previous)
 => new PredecessorWrapper(decorated, previous);