-
-
Notifications
You must be signed in to change notification settings - Fork 56
/
BehaviorTreeTest.java
124 lines (107 loc) · 4.29 KB
/
BehaviorTreeTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package net.citizensnpcs.api.ai;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.google.common.base.Function;
import net.citizensnpcs.api.ai.tree.Behavior;
import net.citizensnpcs.api.ai.tree.BehaviorGoalAdapter;
import net.citizensnpcs.api.ai.tree.BehaviorStatus;
import net.citizensnpcs.api.ai.tree.Selector;
import net.citizensnpcs.api.ai.tree.Sequence;
public class BehaviorTreeTest {
private GoalController test;
@Test
public void failureSelector() {
final CountedBehavior goal = new CountedBehavior(BehaviorStatus.SUCCESS);
CountedBehavior goal2 = new CountedBehavior(BehaviorStatus.FAILURE);
Selector p = Selector.selecting(goal2, goal).selectionFunction(new Function<List<Behavior>, Behavior>() {
int idx;
@Override
public Behavior apply(List<Behavior> input) {
Behavior b = input.get(idx++);
if (idx >= input.size())
idx = 0;
return b;
}
}).retryChildren().build();
test.addGoal(p, 1);
test.run();
assertThat("Reset count first", goal.resetCount, is(1));
assertThat("Run count first", goal.runCount, is(1));
assertThat("Should execute count first", goal.shouldExecuteCount, is(1));
assertThat("Reset count second", goal2.resetCount, is(1));
assertThat("Run count second", goal2.runCount, is(1));
assertThat("Should execute count second", goal2.shouldExecuteCount, is(1));
}
@Test
public void failureSequence() {
CountedBehavior goal = new CountedBehavior(BehaviorStatus.FAILURE);
CountedBehavior goal2 = new CountedBehavior(BehaviorStatus.SUCCESS);
Sequence p = Sequence.createRetryingSequence(goal, goal2);
test.addGoal(p, 1);
test.run();
test.run();
assertThat("Reset count", goal.resetCount, is(1));
assertThat("Run count", goal.runCount, is(1));
assertThat("Should execute count", goal.shouldExecuteCount, is(1));
assertThat("Reset count2", goal2.resetCount, is(1));
assertThat("Run count2", goal2.runCount, is(1));
assertThat("Should execute count2", goal2.shouldExecuteCount, is(1));
}
@Before
public void setUp() {
test = new SimpleGoalController();
}
@Test
public void singleSelector() {
CountedBehavior goal = new CountedBehavior(BehaviorStatus.SUCCESS);
Selector p = Selector.selecting(goal).build();
test.addGoal(p, 1);
test.run();
assertThat("Reset count", goal.resetCount, is(1));
assertThat("Run count", goal.runCount, is(1));
assertThat("Should execute count", goal.shouldExecuteCount, is(1));
}
@Test
public void singleSequence() {
CountedBehavior goal = new CountedBehavior(BehaviorStatus.SUCCESS);
Sequence p = Sequence.createSequence(goal);
test.addGoal(p, 1);
test.run();
assertThat("Reset count", goal.resetCount, is(1));
assertThat("Run count", goal.runCount, is(1));
assertThat("Should execute count", goal.shouldExecuteCount, is(1));
}
private static class CountedBehavior extends BehaviorGoalAdapter {
public int loggingTag = 0;
private int resetCount;
private final BehaviorStatus ret;
private int runCount;
private int shouldExecuteCount;
private CountedBehavior(BehaviorStatus ret) {
this.ret = ret;
}
@Override
public void reset() {
if (loggingTag > 0)
System.err.println(loggingTag + ": reset");
resetCount++;
}
@Override
public BehaviorStatus run() {
if (loggingTag > 0)
System.err.println(loggingTag + ": run " + ret);
runCount++;
return ret;
}
@Override
public boolean shouldExecute() {
if (loggingTag > 0)
System.err.println(loggingTag + ": shouldExecute");
shouldExecuteCount++;
return true;
}
}
}