SmartObjective.java

1
package com.takenoko.bot.unitary;
2
3
import com.takenoko.actions.objective.DrawObjectiveAction;
4
import com.takenoko.actions.objective.RedeemObjectiveAction;
5
import com.takenoko.bot.PriorityBot;
6
import com.takenoko.bot.utils.HistoryAnalysis;
7
import com.takenoko.engine.Board;
8
import com.takenoko.engine.BotState;
9
import com.takenoko.engine.GameEngine;
10
import com.takenoko.engine.History;
11
import com.takenoko.objective.EmperorObjective;
12
import com.takenoko.objective.Objective;
13
import com.takenoko.objective.ObjectiveType;
14
import com.takenoko.objective.PandaObjective;
15
import java.util.List;
16
17
public class SmartObjective extends PriorityBot {
18
    private static final int ARBITRARY_MARGIN = 0;
19
20
    @Override
21
    protected void fillAction(Board board, BotState botState, History history) {
22 1 1. fillAction : removed call to com/takenoko/bot/unitary/SmartObjective::addActionWithPriority → TIMED_OUT
        this.addActionWithPriority(analyzeObjectivesToRedeem(botState, history), DEFAULT_PRIORITY);
23
24 1 1. fillAction : negated conditional → TIMED_OUT
        if (board.hasObjectiveTypeInDeck(ObjectiveType.PANDA)) {
25 1 1. fillAction : removed call to com/takenoko/bot/unitary/SmartObjective::addActionWithPriority → TIMED_OUT
            this.addActionWithPriority(
26
                    new DrawObjectiveAction(ObjectiveType.PANDA), DEFAULT_PRIORITY);
27
        }
28 1 1. fillAction : negated conditional → TIMED_OUT
        if (board.hasObjectiveTypeInDeck(ObjectiveType.GARDENER)) {
29 1 1. fillAction : removed call to com/takenoko/bot/unitary/SmartObjective::addActionWithPriority → TIMED_OUT
            this.addActionWithPriority(
30
                    new DrawObjectiveAction(ObjectiveType.GARDENER), DEFAULT_PRIORITY);
31
        }
32 1 1. fillAction : negated conditional → TIMED_OUT
        if (board.hasObjectiveTypeInDeck(ObjectiveType.SHAPE)) {
33 1 1. fillAction : removed call to com/takenoko/bot/unitary/SmartObjective::addActionWithPriority → TIMED_OUT
            this.addActionWithPriority(
34
                    new DrawObjectiveAction(ObjectiveType.SHAPE), DEFAULT_PRIORITY);
35
        }
36
37
        botState.getAchievedObjectives().stream()
38 2 1. lambda$fillAction$0 : negated conditional → TIMED_OUT
2. lambda$fillAction$0 : replaced boolean return with true for com/takenoko/bot/unitary/SmartObjective::lambda$fillAction$0 → TIMED_OUT
                .filter(v -> v.getClass() != PandaObjective.class)
39 1 1. fillAction : removed call to java/util/stream/Stream::forEach → TIMED_OUT
                .forEach(
40
                        v ->
41 1 1. lambda$fillAction$1 : removed call to com/takenoko/bot/unitary/SmartObjective::addActionWithPriority → TIMED_OUT
                                this.addActionWithPriority(
42
                                        new RedeemObjectiveAction(v), DEFAULT_PRIORITY));
43
    }
44
45
    public RedeemObjectiveAction analyzeObjectivesToRedeem(BotState botState, History history) {
46
        /*
47
         * If we have only one panda objective, do not redeem it
48
         * If we have any other objective, redeem any of them
49
         */
50
        List<Objective> pandaObjectives =
51
                botState.getAchievedObjectives().stream()
52
                        .filter(PandaObjective.class::isInstance)
53
                        .toList();
54
55
        // If we have two PandaObjective we redeem one
56 2 1. analyzeObjectivesToRedeem : changed conditional boundary → TIMED_OUT
2. analyzeObjectivesToRedeem : negated conditional → KILLED
        if (pandaObjectives.size() > 1) {
57 1 1. analyzeObjectivesToRedeem : replaced return value with null for com/takenoko/bot/unitary/SmartObjective::analyzeObjectivesToRedeem → TIMED_OUT
            return new RedeemObjectiveAction(pandaObjectives.get(0));
58
        }
59
60
        // If when we redeem an objective, and it does not make us win we don't redeem
61 1 1. analyzeObjectivesToRedeem : Replaced integer addition with subtraction → TIMED_OUT
        if (botState.getRedeemedObjectives().size() + 1
62 2 1. analyzeObjectivesToRedeem : changed conditional boundary → TIMED_OUT
2. analyzeObjectivesToRedeem : negated conditional → TIMED_OUT
                < GameEngine.DEFAULT_NUMBER_OF_OBJECTIVES_TO_WIN.get(history.keySet().size())) {
63
            return null;
64
        }
65
66 1 1. analyzeObjectivesToRedeem : negated conditional → TIMED_OUT
        if (pandaObjectives.size() == 1
67
                && pandaObjectives.get(0).getPoints()
68 2 1. analyzeObjectivesToRedeem : Replaced integer addition with subtraction → TIMED_OUT
2. analyzeObjectivesToRedeem : Replaced integer addition with subtraction → TIMED_OUT
                                + botState.getObjectiveScore()
69
                                + EmperorObjective.EMPEROR_BONUS
70 3 1. analyzeObjectivesToRedeem : changed conditional boundary → TIMED_OUT
2. analyzeObjectivesToRedeem : Replaced integer addition with subtraction → TIMED_OUT
3. analyzeObjectivesToRedeem : negated conditional → TIMED_OUT
                        > HistoryAnalysis.getMaxCurrentBotScore(history) + ARBITRARY_MARGIN) {
71 1 1. analyzeObjectivesToRedeem : replaced return value with null for com/takenoko/bot/unitary/SmartObjective::analyzeObjectivesToRedeem → TIMED_OUT
            return new RedeemObjectiveAction(pandaObjectives.get(0));
72
        }
73
74
        return null;
75
    }
76
}

Mutations

22

1.1
Location : fillAction
Killed by : none
removed call to com/takenoko/bot/unitary/SmartObjective::addActionWithPriority → TIMED_OUT

24

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

25

1.1
Location : fillAction
Killed by : none
removed call to com/takenoko/bot/unitary/SmartObjective::addActionWithPriority → TIMED_OUT

28

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

29

1.1
Location : fillAction
Killed by : none
removed call to com/takenoko/bot/unitary/SmartObjective::addActionWithPriority → TIMED_OUT

32

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

33

1.1
Location : fillAction
Killed by : none
removed call to com/takenoko/bot/unitary/SmartObjective::addActionWithPriority → TIMED_OUT

38

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

2.2
Location : lambda$fillAction$0
Killed by : none
replaced boolean return with true for com/takenoko/bot/unitary/SmartObjective::lambda$fillAction$0 → TIMED_OUT

39

1.1
Location : fillAction
Killed by : none
removed call to java/util/stream/Stream::forEach → TIMED_OUT

41

1.1
Location : lambda$fillAction$1
Killed by : none
removed call to com/takenoko/bot/unitary/SmartObjective::addActionWithPriority → TIMED_OUT

56

1.1
Location : analyzeObjectivesToRedeem
Killed by : none
changed conditional boundary → TIMED_OUT

2.2
Location : analyzeObjectivesToRedeem
Killed by : com.takenoko.bot.utils.HistoryAnalysisTest.[engine:junit-jupiter]/[class:com.takenoko.bot.utils.HistoryAnalysisTest]/[nested-class:IntegrationTest]/[method:test1()]
negated conditional → KILLED

57

1.1
Location : analyzeObjectivesToRedeem
Killed by : none
replaced return value with null for com/takenoko/bot/unitary/SmartObjective::analyzeObjectivesToRedeem → TIMED_OUT

61

1.1
Location : analyzeObjectivesToRedeem
Killed by : none
Replaced integer addition with subtraction → TIMED_OUT

62

1.1
Location : analyzeObjectivesToRedeem
Killed by : none
changed conditional boundary → TIMED_OUT

2.2
Location : analyzeObjectivesToRedeem
Killed by : none
negated conditional → TIMED_OUT

66

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

68

1.1
Location : analyzeObjectivesToRedeem
Killed by : none
Replaced integer addition with subtraction → TIMED_OUT

2.2
Location : analyzeObjectivesToRedeem
Killed by : none
Replaced integer addition with subtraction → TIMED_OUT

70

1.1
Location : analyzeObjectivesToRedeem
Killed by : none
changed conditional boundary → TIMED_OUT

2.2
Location : analyzeObjectivesToRedeem
Killed by : none
Replaced integer addition with subtraction → TIMED_OUT

3.3
Location : analyzeObjectivesToRedeem
Killed by : none
negated conditional → TIMED_OUT

71

1.1
Location : analyzeObjectivesToRedeem
Killed by : none
replaced return value with null for com/takenoko/bot/unitary/SmartObjective::analyzeObjectivesToRedeem → TIMED_OUT

Active mutators

Tests examined


Report generated by PIT 1.8.0