Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }