Beispiel #1
0
        public void DecomposeDebugMTRFails_ExpectedBehavior()
        {
            var ctx = new MyDebugContext();

            ctx.Init();

            var task = new Selector <byte>()
            {
                Name = "Test"
            };

            task.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task1"
            }.AddCondition(new FuncCondition <MyContext, byte>("Done == true", context => context.Done == true)));
            task.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task2"
            });
            ctx.LastMTR.Add(0);
            var status = task.Decompose(ctx, 0, out var plan);

            Assert.IsTrue(status == DecompositionStatus.Rejected);
            Assert.IsTrue(plan == null);
            Assert.IsTrue(ctx.MTRDebug.Count == 1);
            Assert.IsTrue(ctx.MTRDebug[0].Contains("REPLAN FAIL"));
            Assert.IsTrue(ctx.MTRDebug[0].Contains("Sub-task2"));
        }
Beispiel #2
0
        public void DecomposeCompoundSubtaskLoseToLastMTR_ExpectedBehavior()
        {
            var ctx  = new MyContext();
            var task = new Selector <byte>()
            {
                Name = "Test"
            };
            var task2 = new Selector <byte>()
            {
                Name = "Test2"
            };

            task2.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task1"
            }.AddCondition(new FuncCondition <MyContext, byte>("Done == true", context => context.Done == true)));
            task2.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task2"
            });

            task.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task1"
            }.AddCondition(new FuncCondition <MyContext, byte>("Done == true", context => context.Done == true)));
            task.AddSubtask(task2);

            ctx.LastMTR.Add(0);
            var status = task.Decompose(ctx, 0, out var plan);

            Assert.IsTrue(status == DecompositionStatus.Rejected);
            Assert.IsTrue(plan == null);
            Assert.IsTrue(ctx.MethodTraversalRecord.Count == 1);
            Assert.IsTrue(ctx.MethodTraversalRecord[0] == -1);
        }
Beispiel #3
0
        public void DecomposeCompoundSubtaskFails_ExpectedBehavior()
        {
            var ctx  = new MyContext();
            var task = new Selector <byte>()
            {
                Name = "Test"
            };
            var task2 = new Selector <byte>()
            {
                Name = "Test2"
            };

            task2.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task1"
            }.AddCondition(new FuncCondition <MyContext, byte>("Done == true", context => context.Done == true)));
            task2.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task2"
            }.AddCondition(new FuncCondition <MyContext, byte>("Done == true", context => context.Done == true)));

            task.AddSubtask(task2);
            task.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task3"
            });

            var status = task.Decompose(ctx, 0, out var plan);

            Assert.IsTrue(status == DecompositionStatus.Succeeded);
            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 1);
            Assert.AreEqual("Sub-task3", plan.Peek().Name);
            Assert.IsTrue(ctx.MethodTraversalRecord.Count == 0);
        }
Beispiel #4
0
        public void DecomposeNestedSubtasks_ExpectedBehavior()
        {
            var ctx = new MyContext();
            ctx.Init();

            var task = new Sequence() { Name = "Test" };
            var task2 = new Selector() { Name = "Test2" };
            var task3 = new Selector() { Name = "Test3" };
            task3.AddSubtask(new PrimitiveTask() { Name = "Sub-task1" }.AddCondition(new FuncCondition<MyContext>("Done == true", context => context.Done == true)));
            task3.AddSubtask(new PrimitiveTask() { Name = "Sub-task2" });

            task2.AddSubtask(task3);
            task2.AddSubtask(new PrimitiveTask() { Name = "Sub-task3" });

            task.AddSubtask(task2);
            task.AddSubtask(new PrimitiveTask() { Name = "Sub-task4" });

            var status = task.Decompose(ctx, 0, out var plan);

            Assert.IsTrue(status == DecompositionStatus.Succeeded);
            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 2);
            Assert.AreEqual("Sub-task2", plan.Dequeue().Name);
            Assert.AreEqual("Sub-task4", plan.Dequeue().Name);
        }
Beispiel #5
0
        public void NestedPausePlan_ExpectedBehavior()
        {
            var ctx = new MyContext();
            ctx.Init();

            var task = new Sequence() { Name = "Test" };
            var task2 = new Selector() { Name = "Test2" };
            var task3 = new Sequence() { Name = "Test3" };
            task3.AddSubtask(new PrimitiveTask() { Name = "Sub-task1" });
            task3.AddSubtask(new PausePlanTask());
            task3.AddSubtask(new PrimitiveTask() { Name = "Sub-task2" });

            task2.AddSubtask(task3);
            task2.AddSubtask(new PrimitiveTask() { Name = "Sub-task3" });

            task.AddSubtask(task2);
            task.AddSubtask(new PrimitiveTask() { Name = "Sub-task4" });

            var status = task.Decompose(ctx, 0, out var plan);

            Assert.IsTrue(status == DecompositionStatus.Partial);
            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 1);
            Assert.AreEqual("Sub-task1", plan.Peek().Name);
            Assert.IsTrue(ctx.HasPausedPartialPlan);
            Assert.IsTrue(ctx.PartialPlanQueue.Count == 2);
            var queueAsArray = ctx.PartialPlanQueue.ToArray();
            Assert.AreEqual(task3, queueAsArray[0].Task);
            Assert.AreEqual(2, queueAsArray[0].TaskIndex);
            Assert.AreEqual(task, queueAsArray[1].Task);
            Assert.AreEqual(1, queueAsArray[1].TaskIndex);
        }
Beispiel #6
0
        public void DecomposeNestedCompoundSubtaskLoseToMTR2_ExpectedBehavior()
        {
            var ctx = new MyContext();
            ctx.Init();
            ctx.ContextState = ContextState.Planning;

            var task = new Sequence() { Name = "Test" };
            var task2 = new Selector() { Name = "Test2" };
            var task3 = new Selector() { Name = "Test3" };
            task3.AddSubtask(new PrimitiveTask() { Name = "Sub-task1" }.AddCondition(new FuncCondition<MyContext>("Done == true", context => context.Done == true)));
            task3.AddSubtask(new PrimitiveTask() { Name = "Sub-task2" });

            task2.AddSubtask(new PrimitiveTask() { Name = "Sub-task3" }.AddCondition(new FuncCondition<MyContext>("Done == true", context => context.Done == true)));
            task2.AddSubtask(task3);

            task.AddSubtask(task2);
            task.AddSubtask(new PrimitiveTask() { Name = "Sub-task4" });

            ctx.LastMTR.Add(1);
            ctx.LastMTR.Add(0);
            var status = task.Decompose(ctx, 0, out var plan);

            Assert.IsTrue(status == DecompositionStatus.Rejected);
            Assert.IsTrue(plan == null);
            Assert.IsTrue(ctx.MethodTraversalRecord.Count == 2);
            Assert.IsTrue(ctx.MethodTraversalRecord[0] == 1);
            Assert.IsTrue(ctx.MethodTraversalRecord[1] == -1);
        }
Beispiel #7
0
        public void ContinueNestedPausePlan_ExpectedBehavior()
        {
            var ctx = new MyContext();
            ctx.Init();

            var task = new Sequence() { Name = "Test" };
            var task2 = new Selector() { Name = "Test2" };
            var task3 = new Sequence() { Name = "Test3" };
            task3.AddSubtask(new PrimitiveTask() { Name = "Sub-task1" });
            task3.AddSubtask(new PausePlanTask());
            task3.AddSubtask(new PrimitiveTask() { Name = "Sub-task2" });

            task2.AddSubtask(task3);
            task2.AddSubtask(new PrimitiveTask() { Name = "Sub-task3" });

            task.AddSubtask(task2);
            task.AddSubtask(new PrimitiveTask() { Name = "Sub-task4" });

            var status = task.Decompose(ctx, 0, out var plan);

            Assert.IsTrue(status == DecompositionStatus.Partial);
            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 1);
            Assert.AreEqual("Sub-task1", plan.Dequeue().Name);
            Assert.IsTrue(ctx.HasPausedPartialPlan);
            Assert.IsTrue(ctx.PartialPlanQueue.Count == 2);
            var queueAsArray = ctx.PartialPlanQueue.ToArray();
            Assert.AreEqual(task3, queueAsArray[0].Task);
            Assert.AreEqual(2, queueAsArray[0].TaskIndex);
            Assert.AreEqual(task, queueAsArray[1].Task);
            Assert.AreEqual(1, queueAsArray[1].TaskIndex);

            ctx.HasPausedPartialPlan = false;
            plan = new Queue<ITask>();
            while (ctx.PartialPlanQueue.Count > 0)
            {
                var kvp = ctx.PartialPlanQueue.Dequeue();
                var s = kvp.Task.Decompose(ctx, kvp.TaskIndex, out var p);

                if (s == DecompositionStatus.Succeeded || s == DecompositionStatus.Partial)
                {
                    while (p.Count > 0)
                    {
                        plan.Enqueue(p.Dequeue());
                    }
                }

                if (ctx.HasPausedPartialPlan)
                    break;
            }

            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 2);
            Assert.AreEqual("Sub-task2", plan.Dequeue().Name);
            Assert.AreEqual("Sub-task4", plan.Dequeue().Name);
        }
Beispiel #8
0
        public void DecomposeCompoundSubtaskWinOverLastMTR_ExpectedBehavior()
        {
            var ctx      = new MyContext();
            var rootTask = new Selector()
            {
                Name = "Root"
            };
            var task = new Selector()
            {
                Name = "Test1"
            };
            var task2 = new Selector()
            {
                Name = "Test2"
            };
            var task3 = new Selector()
            {
                Name = "Test3"
            };

            task3.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task3-1"
            }.AddCondition(new FuncCondition <MyContext>("Done == true", context => context.Done == true)));
            task3.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task3-2"
            });

            task2.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task2-1"
            }.AddCondition(new FuncCondition <MyContext>("Done == true", context => context.Done == true)));
            task2.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task2-2"
            });

            task.AddSubtask(task2);
            task.AddSubtask(task3);
            task.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task1-1"
            }.AddCondition(new FuncCondition <MyContext>("Done == false", context => context.Done == false)));

            rootTask.AddSubtask(task);

            ctx.LastMTR.Add(0);
            ctx.LastMTR.Add(1);
            ctx.LastMTR.Add(0);

            // In this test, we prove that [0, 0, 1] beats [0, 1, 0]
            var status = rootTask.Decompose(ctx, 0, out var plan);

            Assert.IsTrue(status == DecompositionStatus.Succeeded);
        }
Beispiel #9
0
        public void DecomposeCompoundSubtaskLoseToLastMTR2_ExpectedBehavior()
        {
            var ctx      = new MyContext();
            var rootTask = new Selector()
            {
                Name = "Root"
            };
            var task = new Selector()
            {
                Name = "Test1"
            };
            var task2 = new Selector()
            {
                Name = "Test2"
            };
            var task3 = new Selector()
            {
                Name = "Test3"
            };

            task2.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task2-1"
            }.AddCondition(new FuncCondition <MyContext>("Done == true", context => context.Done == true)));
            task2.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task2-1"
            });

            task.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task1-1"
            }.AddCondition(new FuncCondition <MyContext>("Done == true", context => context.Done == true)));
            task.AddSubtask(task2);

            rootTask.AddSubtask(task);

            ctx.LastMTR.Add(0);
            ctx.LastMTR.Add(1);
            ctx.LastMTR.Add(0);

            // We expect this test to be rejected, because [0,1,1] shouldn't beat [0,1,0]
            var status = rootTask.Decompose(ctx, 0, out var plan);

            Assert.IsTrue(status == DecompositionStatus.Rejected);
            Assert.IsTrue(plan == null);
            Assert.IsTrue(ctx.MethodTraversalRecord.Count == 3);
            Assert.IsTrue(ctx.MethodTraversalRecord[0] == 0);
            Assert.IsTrue(ctx.MethodTraversalRecord[1] == 1);
            Assert.IsTrue(ctx.MethodTraversalRecord[2] == -1);
        }
Beispiel #10
0
        public void DecomposeNestedCompoundSubtaskEqualToMTR_ExpectedBehavior()
        {
            var ctx = new MyContext();

            ctx.Init();

            var task = new Sequence()
            {
                Name = "Test"
            };
            var task2 = new Selector()
            {
                Name = "Test2"
            };
            var task3 = new Selector()
            {
                Name = "Test3"
            };

            task3.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task2"
            }.AddCondition(new FuncCondition <MyContext>("Done == true", context => context.Done == true)));
            task3.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task3"
            });

            task2.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task1"
            }.AddCondition(new FuncCondition <MyContext>("Done == true", context => context.Done == true)));
            task2.AddSubtask(task3);

            task.AddSubtask(task2);
            task.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task4"
            });

            ctx.LastMTR.Add(1);
            ctx.LastMTR.Add(1);
            var plan = task.Decompose(ctx, 0);

            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 2);
            Assert.IsTrue(ctx.MethodTraversalRecord.Count == 1);
            Assert.IsTrue(ctx.MethodTraversalRecord[0] == 1);
            Assert.AreEqual("Sub-task3", plan.Dequeue().Name);
            Assert.AreEqual("Sub-task4", plan.Dequeue().Name);
        }
        public void DecomposeWithSubtasks3_ExpectedBehavior()
        {
            var ctx  = new MyContext();
            var task = new Selector()
            {
                Name = "Test"
            };

            task.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task1"
            }.AddCondition(new FuncCondition <MyContext>("Done == true", context => context.Done == true)));
            task.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task2"
            });
            var plan = task.Decompose(ctx, 0);

            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 1);
            Assert.AreEqual("Sub-task2", plan.Peek().Name);
        }
        public void DecomposeWithSubtasks_ExpectedBehavior()
        {
            var ctx  = new MyContext();
            var task = new Selector()
            {
                Name = "Test"
            };

            task.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task1"
            });
            task.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task2"
            });
            var plan = task.Decompose(ctx, 0);

            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 1);
            Assert.AreEqual("Sub-task1", plan.Peek().Name);
        }
Beispiel #13
0
        public void DecomposeNestedCompoundSubtaskLoseToMTRReturnToPreviousWorldState_ExpectedBehavior()
        {
            var ctx = new MyContext();
            ctx.Init();
            ctx.ContextState = ContextState.Planning;
            ctx.SetState(MyWorldState.HasA, true, EffectType.PlanAndExecute);
            ctx.SetState(MyWorldState.HasB, true, EffectType.Permanent);
            ctx.SetState(MyWorldState.HasC, true, EffectType.PlanOnly);

            var task = new Sequence() { Name = "Test" };
            var task2 = new Selector() { Name = "Test2" };
            var task3 = new Selector() { Name = "Test3" };
            task3.AddSubtask(new PrimitiveTask() { Name = "Sub-task2" }.AddCondition(new FuncCondition<MyContext>("Done == true", context => context.Done == true)));
            task3.AddSubtask(new PrimitiveTask() { Name = "Sub-task3" }.AddEffect(new ActionEffect<MyContext>("TestEffect", EffectType.Permanent, (context, type) => context.SetState(MyWorldState.HasA, false, EffectType.PlanOnly))));

            task2.AddSubtask(task3);
            task2.AddSubtask(new PrimitiveTask() { Name = "Sub-task4" }.AddEffect(new ActionEffect<MyContext>("TestEffect", EffectType.Permanent, (context, type) => context.SetState(MyWorldState.HasB, false, EffectType.PlanOnly))));

            task.AddSubtask(new PrimitiveTask() { Name = "Sub-task1" }
                .AddEffect(new ActionEffect<MyContext>("TestEffect", EffectType.Permanent, (context, type) => context.SetState(MyWorldState.HasA, false, EffectType.PlanOnly))));
            task.AddSubtask(task2);
            task.AddSubtask(new PrimitiveTask() { Name = "Sub-task5" }.AddEffect(new ActionEffect<MyContext>("TestEffect", EffectType.Permanent, (context, type) => context.SetState(MyWorldState.HasC, false, EffectType.PlanOnly))));

            ctx.LastMTR.Add(0);
            ctx.LastMTR.Add(0);
            var status = task.Decompose(ctx, 0, out var plan);

            Assert.IsTrue(status == DecompositionStatus.Rejected);
            Assert.IsTrue(plan == null);
            Assert.IsTrue(ctx.MethodTraversalRecord.Count == 2);
            Assert.IsTrue(ctx.MethodTraversalRecord[0] == 0);
            Assert.IsTrue(ctx.MethodTraversalRecord[1] == -1);
            Assert.IsTrue(ctx.WorldStateChangeStack[(int) MyWorldState.HasA].Count == 1);
            Assert.IsTrue(ctx.WorldStateChangeStack[(int) MyWorldState.HasB].Count == 1);
            Assert.IsTrue(ctx.WorldStateChangeStack[(int) MyWorldState.HasC].Count == 1);
            Assert.AreEqual(1, ctx.GetState(MyWorldState.HasA));
            Assert.AreEqual(1, ctx.GetState(MyWorldState.HasB));
            Assert.AreEqual(1, ctx.GetState(MyWorldState.HasC));
        }
Beispiel #14
0
        public void DecomposeWithSubtasks_ExpectedBehavior()
        {
            var ctx  = new MyContext();
            var task = new Selector <byte>()
            {
                Name = "Test"
            };

            task.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task1"
            });
            task.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task2"
            });
            var status = task.Decompose(ctx, 0, out var plan);

            Assert.IsTrue(status == DecompositionStatus.Succeeded);
            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 1);
            Assert.AreEqual("Sub-task1", plan.Peek().Name);
        }
        public void DecomposeMTRSucceedsWhenEqual_ExpectedBehavior()
        {
            var ctx  = new MyContext();
            var task = new Selector()
            {
                Name = "Test"
            };

            task.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task1"
            }.AddCondition(new FuncCondition <MyContext>("Done == true", context => context.Done == true)));
            task.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task2"
            });
            ctx.LastMTR.Add(1);
            var plan = task.Decompose(ctx, 0);

            Assert.IsTrue(plan != null);
            Assert.IsTrue(ctx.MethodTraversalRecord.Count == 0);
            Assert.IsTrue(plan.Count == 1);
        }
Beispiel #16
0
        public void AddSubtask_ExpectedBehavior()
        {
            var task = new Selector <byte>()
            {
                Name = "Test"
            };
            var t = task.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task"
            });

            Assert.IsTrue(t == task);
            Assert.IsTrue(task.Subtasks.Count == 1);
        }
Beispiel #17
0
        public void IsValid_ExpectedBehavior()
        {
            var ctx  = new MyContext();
            var task = new Selector <byte>()
            {
                Name = "Test"
            };

            task.AddSubtask(new PrimitiveTask <byte>()
            {
                Name = "Sub-task"
            });

            Assert.IsTrue(task.IsValid(ctx));
        }
Beispiel #18
0
        public void ContinueMultipleNestedPausePlan_ExpectedBehavior()
        {
            var ctx = new MyContext();

            ctx.Init();

            var task = new Sequence()
            {
                Name = "Test"
            };
            var task2 = new Selector()
            {
                Name = "Test2"
            };
            var task3 = new Sequence()
            {
                Name = "Test3"
            };
            var task4 = new Sequence()
            {
                Name = "Test4"
            };

            task3.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task1"
            });
            task3.AddSubtask(new PausePlanTask());
            task3.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task2"
            });

            task2.AddSubtask(task3);
            task2.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task3"
            });

            task4.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task5"
            });
            task4.AddSubtask(new PausePlanTask());
            task4.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task6"
            });

            task.AddSubtask(task2);
            task.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task4"
            });
            task.AddSubtask(task4);
            task.AddSubtask(new PrimitiveTask()
            {
                Name = "Sub-task7"
            });

            var plan = task.Decompose(ctx, 0);

            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 1);
            Assert.AreEqual("Sub-task1", plan.Dequeue().Name);
            Assert.IsTrue(ctx.HasPausedPartialPlan);
            Assert.IsTrue(ctx.PartialPlanQueue.Count == 2);
            var queueAsArray = ctx.PartialPlanQueue.ToArray();

            Assert.AreEqual(task3, queueAsArray[0].Task);
            Assert.AreEqual(2, queueAsArray[0].TaskIndex);
            Assert.AreEqual(task, queueAsArray[1].Task);
            Assert.AreEqual(1, queueAsArray[1].TaskIndex);

            ctx.HasPausedPartialPlan = false;
            plan = new Queue <ITask>();
            while (ctx.PartialPlanQueue.Count > 0)
            {
                var kvp = ctx.PartialPlanQueue.Dequeue();
                var p   = kvp.Task.Decompose(ctx, kvp.TaskIndex);
                while (p.Count > 0)
                {
                    plan.Enqueue(p.Dequeue());
                }

                if (ctx.HasPausedPartialPlan)
                {
                    break;
                }
            }

            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 3);
            Assert.AreEqual("Sub-task2", plan.Dequeue().Name);
            Assert.AreEqual("Sub-task4", plan.Dequeue().Name);
            Assert.AreEqual("Sub-task5", plan.Dequeue().Name);

            ctx.HasPausedPartialPlan = false;
            plan = new Queue <ITask>();
            while (ctx.PartialPlanQueue.Count > 0)
            {
                var kvp = ctx.PartialPlanQueue.Dequeue();
                var p   = kvp.Task.Decompose(ctx, kvp.TaskIndex);
                while (p.Count > 0)
                {
                    plan.Enqueue(p.Dequeue());
                }

                if (ctx.HasPausedPartialPlan)
                {
                    break;
                }
            }

            Assert.IsTrue(plan != null);
            Assert.IsTrue(plan.Count == 2);
            Assert.AreEqual("Sub-task6", plan.Dequeue().Name);
            Assert.AreEqual("Sub-task7", plan.Dequeue().Name);
        }