public async Task ShouldUseFallbackGoal() { var goal = new TestGoal{Weight = 1}; var planner = PlannerFactory.CreatePlanner(); var agent = new FallbackAgent(planner, goal); await Assert.ThrowsAsync<InvalidOperationException>( async () => await agent.RunActionsAsync()); Assert.Equal(goal, agent.CurrentGoal); }
public async Task ShouldRunActionToReachGoal() { var goal = new TestGoal{Weight = 1}; var planner = PlannerFactory.CreatePlanner(); var agent = new FallbackAgent(planner, goal); agent.AddGoal(goal); agent.AddAction(new NoRunAction()); await Assert.ThrowsAsync<NoRunException>( async () => await agent.RunActionsAsync()); }
public async Task ShouldChooseHighestRatedGoal() { var planner = PlannerFactory.CreatePlanner(); var agent = new Agent(planner); var goal1 = new TestGoal{Weight = 0.2f}; var goal2 = new TestGoal{Weight = 0.5f}; agent.AddGoal(goal1); agent.AddGoal(goal2); await Assert.ThrowsAsync<InvalidOperationException>( async() => await agent.RunActionsAsync()); Assert.Equal(goal2, agent.CurrentGoal); }
public async Task ShouldUseConsiderationToChooseBestGoal() { var planner = PlannerFactory.CreatePlanner(); var agent = new Agent(planner); var goal1 = new TestGoal{Weight = 1}; var goal2 = new TestGoal{Weight = 1}; goal1.AddConsideration(Consideration.FromFunc(d => 0.5f)); goal2.AddConsideration(Consideration.FromFunc(d => 0.2f)); agent.AddGoal(goal1); agent.AddGoal(goal2); await Assert.ThrowsAsync<InvalidOperationException>( async() => await agent.RunActionsAsync()); Assert.Equal(goal1, agent.CurrentGoal); }
public async Task CancellationOfRunningActionsShouldWork() { var goal = new TestGoal{Weight = 1}; var action = new InfiniteRunAction(); var planner = PlannerFactory.CreatePlanner(); var agent = new Agent(planner); var source = new CancellationTokenSource(); agent.AddGoal(goal); agent.AddAction(action); var agentTask = agent.RunActionsAsync(source.Token); var cancelTask = Task.Run(() => source.Cancel()); await Task.WhenAll(agentTask, cancelTask); Assert.Equal(action, agent.CurrentAction); }