ObjectiveManager.java

1
package com.takenoko.engine;
2
3
import com.takenoko.objective.Objective;
4
import com.takenoko.objective.PandaObjective;
5
import java.util.ArrayList;
6
import java.util.List;
7
import java.util.Objects;
8
9
/** This class is used to manage the objectives of the bot. */
10
public class ObjectiveManager {
11
    private final List<Objective> objectives;
12
    private final List<Objective> achievedObjectives;
13
    private final List<Objective> redeemedObjectives;
14
15
    public ObjectiveManager() {
16
        this.objectives = new ArrayList<>();
17
        this.achievedObjectives = new ArrayList<>();
18
        this.redeemedObjectives = new ArrayList<>();
19
    }
20
21
    public ObjectiveManager(ObjectiveManager objectiveManager) {
22
        this.objectives = new ArrayList<>(objectiveManager.objectives);
23
        this.achievedObjectives = new ArrayList<>(objectiveManager.achievedObjectives);
24
        this.redeemedObjectives = new ArrayList<>(objectiveManager.redeemedObjectives);
25
    }
26
27
    /**
28
     * Get the current Objectives of the bot
29
     *
30
     * @return Objectives
31
     */
32
    public List<Objective> getObjectives() {
33 1 1. getObjectives : replaced return value with Collections.emptyList for com/takenoko/engine/ObjectiveManager::getObjectives → KILLED
        return new ArrayList<>(objectives);
34
    }
35
36
    /**
37
     * get the score of the achieved objectives
38
     *
39
     * @return the score of the achieved objectives
40
     */
41
    public int getObjectiveScore() {
42 1 1. getObjectiveScore : replaced int return with 0 for com/takenoko/engine/ObjectiveManager::getObjectiveScore → KILLED
        return redeemedObjectives.stream().mapToInt(Objective::getPoints).sum();
43
    }
44
45
    /**
46
     * Get the list of the redeemed objectives
47
     *
48
     * @return the list of the redeemed objectives
49
     */
50
    public List<Objective> getRedeemedObjectives() {
51 1 1. getRedeemedObjectives : replaced return value with Collections.emptyList for com/takenoko/engine/ObjectiveManager::getRedeemedObjectives → TIMED_OUT
        return new ArrayList<>(redeemedObjectives);
52
    }
53
54
    /**
55
     * get the list of achieved objectives
56
     *
57
     * @return the list of achieved objectives
58
     */
59
    public List<Objective> getAchievedObjectives() {
60 1 1. getAchievedObjectives : replaced return value with Collections.emptyList for com/takenoko/engine/ObjectiveManager::getAchievedObjectives → TIMED_OUT
        return new ArrayList<>(achievedObjectives);
61
    }
62
63
    /**
64
     * for each objective, check if it is achieved
65
     *
66
     * @param board the board
67
     * @param botState the bot manager
68
     */
69
    public void verifyObjectives(Board board, BotState botState) {
70
        for (Objective objective : objectives) {
71 1 1. verifyObjectives : removed call to com/takenoko/objective/Objective::verify → TIMED_OUT
            objective.verify(board, botState);
72
        }
73
        for (Objective objective : achievedObjectives) {
74 1 1. verifyObjectives : removed call to com/takenoko/objective/Objective::verify → TIMED_OUT
            objective.verify(board, botState);
75
        }
76
    }
77
78
    /**
79
     * Set the current Objective of the bot
80
     *
81
     * @param objective the objectives
82
     */
83
    public void addObjective(Objective objective) {
84
        this.objectives.add(objective);
85
    }
86
87
    /**
88
     * update the objectives
89
     *
90
     * @param board the board
91
     * @param botState the bot manager
92
     */
93
    public void updateObjectives(Board board, BotState botState) {
94 1 1. updateObjectives : removed call to com/takenoko/engine/ObjectiveManager::verifyObjectives → TIMED_OUT
        verifyObjectives(board, botState);
95
96
        // If objective is achieved, add it to the list of achieved objectives
97
        List<Objective> toAchieve = new ArrayList<>();
98
        for (Objective objective : objectives) {
99 1 1. updateObjectives : negated conditional → TIMED_OUT
            if (objective.isAchieved()) {
100
                toAchieve.add(objective);
101
            }
102
        }
103
        for (Objective objective : toAchieve) {
104 1 1. updateObjectives : removed call to com/takenoko/engine/ObjectiveManager::setObjectiveAchieved → TIMED_OUT
            setObjectiveAchieved(objective);
105
        }
106
107
        // If objective is no more achievable, remove it from the list of objectives
108
        List<Objective> toRemove = new ArrayList<>();
109
        for (Objective objective : achievedObjectives) {
110 1 1. updateObjectives : negated conditional → TIMED_OUT
            if (!objective.isAchieved()) {
111
                toRemove.add(objective);
112
            }
113
        }
114
        for (Objective objective : toRemove) {
115 1 1. updateObjectives : removed call to com/takenoko/engine/ObjectiveManager::setObjectiveNotAchieved → TIMED_OUT
            setObjectiveNotAchieved(objective);
116
        }
117
    }
118
119
    /**
120
     * set an objective as not achieved
121
     *
122
     * @param objective the objective
123
     */
124
    public void setObjectiveNotAchieved(Objective objective) {
125
        this.achievedObjectives.remove(objective);
126
        this.objectives.add(objective);
127
    }
128
129
    /**
130
     * set an objective as achieved
131
     *
132
     * @param objective the objective
133
     */
134
    public void setObjectiveAchieved(Objective objective) {
135
        this.objectives.remove(objective);
136
        this.achievedObjectives.add(objective);
137
    }
138
139
    /**
140
     * redeem an objective
141
     *
142
     * @param objective the objective
143
     */
144
    public void redeemObjective(Objective objective, BotState botState) {
145
        this.achievedObjectives.remove(objective);
146 1 1. redeemObjective : negated conditional → KILLED
        if (objective instanceof PandaObjective pandaObjective) {
147 1 1. redeemObjective : removed call to com/takenoko/inventory/Inventory::useBamboo → TIMED_OUT
            botState.getInventory().useBamboo(pandaObjective.getBambooTarget());
148
        }
149
        this.redeemedObjectives.add(objective);
150
    }
151
152
    /**
153
     * Returns the sum of the points of all the panda objectives
154
     *
155
     * @return the sum of the points of all the panda objectives
156
     */
157
    public int getPandaObjectiveScore() {
158 1 1. getPandaObjectiveScore : replaced int return with 0 for com/takenoko/engine/ObjectiveManager::getPandaObjectiveScore → KILLED
        return redeemedObjectives.stream()
159
                .filter(PandaObjective.class::isInstance)
160
                .mapToInt(Objective::getPoints)
161
                .sum();
162
    }
163
164
    /**
165
     * Set the starting deck for a bot
166
     *
167
     * @param objectives list of objectives
168
     */
169
    public void setStartingDeck(List<Objective> objectives) {
170
        this.objectives.addAll(objectives);
171
    }
172
173
    /**
174
     * Return a copy of the current ObjectiveManager
175
     *
176
     * @return ObjectiveManager
177
     */
178
    public ObjectiveManager copy() {
179 1 1. copy : replaced return value with null for com/takenoko/engine/ObjectiveManager::copy → NO_COVERAGE
        return new ObjectiveManager(this);
180
    }
181
182
    /** Reset all the attributes of the ObjectiveManager */
183
    public void reset() {
184 1 1. reset : removed call to java/util/List::clear → TIMED_OUT
        this.objectives.clear();
185 1 1. reset : removed call to java/util/List::clear → TIMED_OUT
        this.achievedObjectives.clear();
186 1 1. reset : removed call to java/util/List::clear → TIMED_OUT
        this.redeemedObjectives.clear();
187
    }
188
189
    @Override
190
    public boolean equals(Object o) {
191 2 1. equals : negated conditional → SURVIVED
2. equals : replaced boolean return with false for com/takenoko/engine/ObjectiveManager::equals → NO_COVERAGE
        if (this == o) return true;
192 3 1. equals : replaced boolean return with true for com/takenoko/engine/ObjectiveManager::equals → NO_COVERAGE
2. equals : negated conditional → KILLED
3. equals : negated conditional → KILLED
        if (o == null || getClass() != o.getClass()) return false;
193
        ObjectiveManager that = (ObjectiveManager) o;
194 2 1. equals : replaced boolean return with true for com/takenoko/engine/ObjectiveManager::equals → SURVIVED
2. equals : negated conditional → KILLED
        return Objects.equals(objectives, that.objectives)
195 1 1. equals : negated conditional → KILLED
                && Objects.equals(achievedObjectives, that.achievedObjectives)
196 1 1. equals : negated conditional → KILLED
                && Objects.equals(redeemedObjectives, that.redeemedObjectives);
197
    }
198
199
    @Override
200
    public int hashCode() {
201 1 1. hashCode : replaced int return with 0 for com/takenoko/engine/ObjectiveManager::hashCode → SURVIVED
        return Objects.hash(objectives, achievedObjectives, redeemedObjectives);
202
    }
203
204
    public List<Objective> getNotAchievedObjectives() {
205 1 1. getNotAchievedObjectives : replaced return value with Collections.emptyList for com/takenoko/engine/ObjectiveManager::getNotAchievedObjectives → TIMED_OUT
        return new ArrayList<>(
206 2 1. lambda$getNotAchievedObjectives$0 : negated conditional → TIMED_OUT
2. lambda$getNotAchievedObjectives$0 : replaced boolean return with true for com/takenoko/engine/ObjectiveManager::lambda$getNotAchievedObjectives$0 → TIMED_OUT
                objectives.stream().filter(objective -> !objective.isAchieved()).toList());
207
    }
208
}

Mutations

33

1.1
Location : getObjectives
Killed by : com.takenoko.actions.objective.DrawObjectiveActionTest.[engine:junit-jupiter]/[class:com.takenoko.actions.objective.DrawObjectiveActionTest]/[nested-class:TestCanBePlayed]/[method:canDrawObjective_shouldReturnFalseIfCantDrawObjective()]
replaced return value with Collections.emptyList for com/takenoko/engine/ObjectiveManager::getObjectives → KILLED

42

1.1
Location : getObjectiveScore
Killed by : com.takenoko.engine.BotStateTest.[engine:junit-jupiter]/[class:com.takenoko.engine.BotStateTest]/[method:test_getScore()]
replaced int return with 0 for com/takenoko/engine/ObjectiveManager::getObjectiveScore → KILLED

51

1.1
Location : getRedeemedObjectives
Killed by : none
replaced return value with Collections.emptyList for com/takenoko/engine/ObjectiveManager::getRedeemedObjectives → TIMED_OUT

60

1.1
Location : getAchievedObjectives
Killed by : none
replaced return value with Collections.emptyList for com/takenoko/engine/ObjectiveManager::getAchievedObjectives → TIMED_OUT

71

1.1
Location : verifyObjectives
Killed by : none
removed call to com/takenoko/objective/Objective::verify → TIMED_OUT

74

1.1
Location : verifyObjectives
Killed by : none
removed call to com/takenoko/objective/Objective::verify → TIMED_OUT

94

1.1
Location : updateObjectives
Killed by : none
removed call to com/takenoko/engine/ObjectiveManager::verifyObjectives → TIMED_OUT

99

1.1
Location : updateObjectives
Killed by : none
negated conditional → TIMED_OUT

104

1.1
Location : updateObjectives
Killed by : none
removed call to com/takenoko/engine/ObjectiveManager::setObjectiveAchieved → TIMED_OUT

110

1.1
Location : updateObjectives
Killed by : none
negated conditional → TIMED_OUT

115

1.1
Location : updateObjectives
Killed by : none
removed call to com/takenoko/engine/ObjectiveManager::setObjectiveNotAchieved → TIMED_OUT

146

1.1
Location : redeemObjective
Killed by : com.takenoko.engine.BotStateTest.[engine:junit-jupiter]/[class:com.takenoko.engine.BotStateTest]/[method:test_getScore()]
negated conditional → KILLED

147

1.1
Location : redeemObjective
Killed by : none
removed call to com/takenoko/inventory/Inventory::useBamboo → TIMED_OUT

158

1.1
Location : getPandaObjectiveScore
Killed by : com.takenoko.engine.BotStateTest.[engine:junit-jupiter]/[class:com.takenoko.engine.BotStateTest]/[nested-class:TestGetPandaObjectiveScore]/[method:getPandaObjectiveScore_shouldReturnScoreIfPandaObjectiveIsRedeemed()]
replaced int return with 0 for com/takenoko/engine/ObjectiveManager::getPandaObjectiveScore → KILLED

179

1.1
Location : copy
Killed by : none
replaced return value with null for com/takenoko/engine/ObjectiveManager::copy → NO_COVERAGE

184

1.1
Location : reset
Killed by : none
removed call to java/util/List::clear → TIMED_OUT

185

1.1
Location : reset
Killed by : none
removed call to java/util/List::clear → TIMED_OUT

186

1.1
Location : reset
Killed by : none
removed call to java/util/List::clear → TIMED_OUT

191

1.1
Location : equals
Killed by : none
negated conditional → SURVIVED

2.2
Location : equals
Killed by : none
replaced boolean return with false for com/takenoko/engine/ObjectiveManager::equals → NO_COVERAGE

192

1.1
Location : equals
Killed by : com.takenoko.engine.BotStateTest.[engine:junit-jupiter]/[class:com.takenoko.engine.BotStateTest]/[nested-class:TestEquals]/[method:equals_shouldReturnTrueWhenEqual()]
negated conditional → KILLED

2.2
Location : equals
Killed by : com.takenoko.engine.BotStateTest.[engine:junit-jupiter]/[class:com.takenoko.engine.BotStateTest]/[nested-class:TestEquals]/[method:equals_shouldReturnTrueWhenEqual()]
negated conditional → KILLED

3.3
Location : equals
Killed by : none
replaced boolean return with true for com/takenoko/engine/ObjectiveManager::equals → NO_COVERAGE

194

1.1
Location : equals
Killed by : com.takenoko.engine.BotStateTest.[engine:junit-jupiter]/[class:com.takenoko.engine.BotStateTest]/[nested-class:TestEquals]/[method:equals_shouldReturnTrueWhenEqual()]
negated conditional → KILLED

2.2
Location : equals
Killed by : none
replaced boolean return with true for com/takenoko/engine/ObjectiveManager::equals → SURVIVED

195

1.1
Location : equals
Killed by : com.takenoko.engine.BotStateTest.[engine:junit-jupiter]/[class:com.takenoko.engine.BotStateTest]/[nested-class:TestEquals]/[method:equals_shouldReturnTrueWhenEqual()]
negated conditional → KILLED

196

1.1
Location : equals
Killed by : com.takenoko.engine.BotStateTest.[engine:junit-jupiter]/[class:com.takenoko.engine.BotStateTest]/[nested-class:TestEquals]/[method:equals_shouldReturnTrueWhenEqual()]
negated conditional → KILLED

201

1.1
Location : hashCode
Killed by : none
replaced int return with 0 for com/takenoko/engine/ObjectiveManager::hashCode → SURVIVED

205

1.1
Location : getNotAchievedObjectives
Killed by : none
replaced return value with Collections.emptyList for com/takenoko/engine/ObjectiveManager::getNotAchievedObjectives → TIMED_OUT

206

1.1
Location : lambda$getNotAchievedObjectives$0
Killed by : none
negated conditional → TIMED_OUT

2.2
Location : lambda$getNotAchievedObjectives$0
Killed by : none
replaced boolean return with true for com/takenoko/engine/ObjectiveManager::lambda$getNotAchievedObjectives$0 → TIMED_OUT

Active mutators

Tests examined


Report generated by PIT 1.8.0