public void testStatefulSeq() { log.enterScope("testStatefulSeq"); bool first = true; var foo = new StatefulSequence(new BehaviorAction(delegate(){ return(BehaviorReturnCode.Success); }), new BehaviorAction(delegate(){ if (first) { first = false; return(BehaviorReturnCode.Running); } else { return(BehaviorReturnCode.Success); } }), new BehaviorAction(delegate(){ return(BehaviorReturnCode.Success); })); new VerificationPoint().VerifyEquals("1st running", true, foo.Behave(), BehaviorReturnCode.Running); new VerificationPoint().VerifyEquals("2nd success", true, foo.Behave(), BehaviorReturnCode.Success); new VerificationPoint().VerifyEquals("3rd success", true, foo.Behave(), BehaviorReturnCode.Success); log.logMessage("restting first"); first = true; new VerificationPoint().VerifyEquals("after reset running", true, foo.Behave(), BehaviorReturnCode.Running); new VerificationPoint().VerifyEquals("final success", true, foo.Behave(), BehaviorReturnCode.Success); log.exitScope(); }
public void When_running_Then_complete_with_many_behave_calls() { var sequence = new StatefulSequence(new BehaviourAction(CalledAndSuccess), new BehaviourAction(new TestHelper().RunningTwiceThenSuccess), new BehaviourAction(CalledAndSuccess)); Assert.AreEqual(BehaviourReturnCode.Running, sequence.Behave()); Assert.AreEqual(BehaviourReturnCode.Running, sequence.Behave()); Assert.AreEqual(BehaviourReturnCode.Running, sequence.Behave()); Assert.AreEqual(BehaviourReturnCode.Success, sequence.Behave()); Assert.AreEqual(2, _calledAndSuccessTimes); }
public void When_behave_running_takes_up_from_where_it_left_without_re_evaluating_prev_conditions() { var called = 0; var exclusive = new StatefulSequence(new Conditional(() => { called++; return(true); }), TestHelper.CreateRunningAction(), TestHelper.CreateSuccessAction() ); exclusive.Behave(); exclusive.Behave(); Assert.AreEqual(1, called); }
public void When_behave_Running_then_completes_until_running_behaviour() { _calledAndSuccessTimes = 0; var seq = new StatefulSequence(new BehaviourAction(CalledAndSuccess), new BehaviourAction(CalledAndRunning), new BehaviourAction(CalledAndSuccess)); var returnCode = seq.Behave(); Assert.AreEqual(1, _calledAndSuccessTimes); Assert.AreEqual(BehaviourReturnCode.Running, returnCode); }
static void Main() { BehaviorComponent tree; Blackboard blackboard; blackboard = new Blackboard(); blackboard.SetVariable("num", 0); tree = new StatefulSequence( new BehaviorAction(delegate(object ag, Blackboard bb) { int num = (int)bb.GetVariable("num"); if (num < 9) { bb.SetVariable("num", num + 1); return(BehaviorReturnCode.Running); } return(BehaviorReturnCode.Success); }), new BehaviorAction(delegate(object ag, Blackboard bb) { bb.SetVariable("successCode", 45); return(BehaviorReturnCode.Success); }) ); BehaviorReturnCode treeState; do { treeState = tree.Behave(null, blackboard); }while (treeState == BehaviorReturnCode.Running); int res = (int)blackboard.GetVariable("num"); int suc = (int)blackboard.GetVariable("successCode"); // If res isn't 9 and suc isn't 45, then the tree didn't work as expected if (res != 9 || suc != 45 || treeState != BehaviorReturnCode.Success) { throw new Exception(); } System.Console.WriteLine("All tests passed! Press ESC to exit"); Console.ReadKey(); }
public void TestStatefulSeq() { //_log.enterScope("testStatefulSeq"); bool first = true; var foo = new StatefulSequence(new BehaviorAction(delegate(){ if (first) { return(BehaviorReturnCode.Success); } else { return(BehaviorReturnCode.Failure); } }), new BehaviorAction(delegate(){ if (first) { first = false; return(BehaviorReturnCode.Running); } else { return(BehaviorReturnCode.Success); } }), new BehaviorAction(delegate(){ return(BehaviorReturnCode.Success); })); Assert.That(foo.Behave() == BehaviorReturnCode.Running); Assert.That(foo.Behave() == BehaviorReturnCode.Success); Assert.That(foo.Behave() == BehaviorReturnCode.Failure); first = true; Assert.That(foo.Behave() == BehaviorReturnCode.Running); Assert.That(foo.Behave() == BehaviorReturnCode.Success); Assert.That(foo.Behave() == BehaviorReturnCode.Failure); }