BambooLayer.java

1
package com.takenoko.layers.bamboo;
2
3
import com.takenoko.engine.Board;
4
import com.takenoko.layers.tile.ImprovementType;
5
import com.takenoko.layers.tile.TileType;
6
import com.takenoko.vector.PositionVector;
7
import java.util.HashMap;
8
import java.util.List;
9
import java.util.Objects;
10
import java.util.Optional;
11
12
/** BambooLayer class. The bamboo layer contains the number of bamboo on each tile. */
13
public class BambooLayer {
14
    private final HashMap<PositionVector, LayerBambooStack> bamboo;
15
16
    /** Constructor for the BambooLayer class. */
17
    public BambooLayer() {
18
        bamboo = new HashMap<>();
19
    }
20
21
    public BambooLayer(BambooLayer bambooLayer) {
22
        this();
23
        for (PositionVector positionVector : bambooLayer.bamboo.keySet()) {
24
            bamboo.put(positionVector, bambooLayer.bamboo.get(positionVector).copy());
25
        }
26
    }
27
28
    /**
29
     * Grow bamboo on a tile. By default, the number of bamboo is 1 if the tile is irrigated.
30
     *
31
     * @param positionVector the position of the tile
32
     * @param board the board
33
     * @return the number of bamboo grown
34
     */
35
    public LayerBambooStack growBamboo(PositionVector positionVector, Board board) {
36 1 1. growBamboo : negated conditional → KILLED
        if (!board.isBambooGrowableAt(positionVector)) {
37
            throw new IllegalArgumentException("The tile is not growable");
38
        }
39
40
        Optional<ImprovementType> improvement = board.getTileAt(positionVector).getImprovement();
41
42 1 1. lambda$growBamboo$0 : replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::lambda$growBamboo$0 → KILLED
        bamboo.computeIfAbsent(positionVector, k -> new LayerBambooStack(0));
43
44 2 1. growBamboo : negated conditional → KILLED
2. growBamboo : negated conditional → KILLED
        if (improvement.isPresent() && improvement.get() == ImprovementType.FERTILIZER) {
45
46 1 1. growBamboo : negated conditional → KILLED
            if (bamboo.get(positionVector).bambooCount == LayerBambooStack.MAX_BAMBOO - 1) {
47 1 1. growBamboo : removed call to com/takenoko/layers/bamboo/LayerBambooStack::growBamboo → KILLED
                bamboo.get(positionVector).growBamboo();
48 1 1. growBamboo : replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::growBamboo → SURVIVED
                return new LayerBambooStack(1);
49
            }
50 1 1. growBamboo : removed call to com/takenoko/layers/bamboo/LayerBambooStack::growBamboo → KILLED
            bamboo.get(positionVector).growBamboo(2);
51 1 1. growBamboo : replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::growBamboo → KILLED
            return new LayerBambooStack(2);
52
        }
53
54 1 1. growBamboo : removed call to com/takenoko/layers/bamboo/LayerBambooStack::growBamboo → KILLED
        bamboo.get(positionVector).growBamboo();
55 1 1. growBamboo : replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::growBamboo → KILLED
        return new LayerBambooStack(1);
56
    }
57
58
    /**
59
     * Get the number of bamboo on a tile.
60
     *
61
     * @param positionVector the position of the tile
62
     * @param board the board
63
     * @return the number of bamboo on the tile
64
     */
65
    public LayerBambooStack getBambooAt(PositionVector positionVector, Board board) {
66 1 1. getBambooAt : negated conditional → KILLED
        if (board.isTile(positionVector)) {
67 1 1. lambda$getBambooAt$1 : replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::lambda$getBambooAt$1 → KILLED
            bamboo.computeIfAbsent(positionVector, k -> new LayerBambooStack(0));
68 1 1. getBambooAt : replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::getBambooAt → KILLED
            return bamboo.get(positionVector);
69
        } else {
70
            throw new IllegalArgumentException("The position is not a tile");
71
        }
72
    }
73
74
    /**
75
     * Eat a bamboo from a tile.
76
     *
77
     * @param positionVector the position of the tile
78
     * @param board the board
79
     */
80
    public void eatBamboo(PositionVector positionVector, Board board) {
81 1 1. eatBamboo : negated conditional → KILLED
        if (board.isBambooEatableAt(positionVector)) {
82 1 1. eatBamboo : removed call to com/takenoko/layers/bamboo/LayerBambooStack::eatBamboo → KILLED
            bamboo.get(positionVector).eatBamboo();
83
        } else {
84
            throw new IllegalArgumentException("The tile is not eatable");
85
        }
86
    }
87
88
    public BambooLayer copy() {
89 1 1. copy : replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::copy → KILLED
        return new BambooLayer(this);
90
    }
91
92
    @Override
93
    public boolean equals(Object o) {
94 2 1. equals : negated conditional → KILLED
2. equals : replaced boolean return with false for com/takenoko/layers/bamboo/BambooLayer::equals → KILLED
        if (this == o) return true;
95 3 1. equals : negated conditional → KILLED
2. equals : negated conditional → KILLED
3. equals : replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::equals → KILLED
        if (o == null || getClass() != o.getClass()) return false;
96
        BambooLayer that = (BambooLayer) o;
97 2 1. equals : replaced boolean return with false for com/takenoko/layers/bamboo/BambooLayer::equals → KILLED
2. equals : replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::equals → KILLED
        return bamboo.equals(that.bamboo);
98
    }
99
100
    @Override
101
    public int hashCode() {
102 1 1. hashCode : replaced int return with 0 for com/takenoko/layers/bamboo/BambooLayer::hashCode → KILLED
        return Objects.hash(bamboo);
103
    }
104
105
    public boolean isEatableAt(PositionVector positionVector, Board board) {
106 1 1. isEatableAt : negated conditional → KILLED
        if (board.isTile(positionVector)
107 1 1. isEatableAt : negated conditional → KILLED
                && board.getTileAt(positionVector).getType() != TileType.POND) {
108
109
            Optional<ImprovementType> improvementType =
110
                    board.getTileAt(positionVector).getImprovement();
111 1 1. isEatableAt : negated conditional → KILLED
            if (improvementType.isPresent()
112 1 1. isEatableAt : negated conditional → KILLED
                    && improvementType.get().equals(ImprovementType.ENCLOSURE)) {
113 1 1. isEatableAt : replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::isEatableAt → KILLED
                return false;
114
            }
115 2 1. isEatableAt : replaced boolean return with false for com/takenoko/layers/bamboo/BambooLayer::isEatableAt → KILLED
2. isEatableAt : replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::isEatableAt → KILLED
            return board.getBambooAt(positionVector).isEatable();
116
        }
117 1 1. isEatableAt : replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::isEatableAt → KILLED
        return false;
118
    }
119
120
    public boolean isGrowableAt(PositionVector positionVector, Board board) {
121 2 1. isGrowableAt : negated conditional → KILLED
2. isGrowableAt : replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::isGrowableAt → KILLED
        return board.isTile(positionVector)
122 1 1. isGrowableAt : negated conditional → KILLED
                && board.getTileAt(positionVector).getType() != TileType.POND
123 1 1. isGrowableAt : negated conditional → KILLED
                && board.getBambooAt(positionVector).isGrowable()
124 1 1. isGrowableAt : negated conditional → KILLED
                && board.isIrrigatedAt(positionVector);
125
    }
126
127
    public List<PositionVector> getGrowablePositions(Board board) {
128 1 1. getGrowablePositions : replaced return value with Collections.emptyList for com/takenoko/layers/bamboo/BambooLayer::getGrowablePositions → TIMED_OUT
        return board.getTiles().keySet().stream()
129 2 1. lambda$getGrowablePositions$2 : replaced boolean return with false for com/takenoko/layers/bamboo/BambooLayer::lambda$getGrowablePositions$2 → TIMED_OUT
2. lambda$getGrowablePositions$2 : replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::lambda$getGrowablePositions$2 → TIMED_OUT
                .filter(positionVector -> isGrowableAt(positionVector, board))
130
                .toList();
131
    }
132
}

Mutations

36

1.1
Location : growBamboo
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestGrowBamboo]/[method:shouldThrowAnExceptionIfThePositionIsTheSameAsThePond()]
negated conditional → KILLED

42

1.1
Location : lambda$growBamboo$0
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestGrowBamboo]/[method:shouldAddABambooToTheBambooLayerIfTheKeyExists()]
replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::lambda$growBamboo$0 → KILLED

44

1.1
Location : growBamboo
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestGrowBamboo]/[method:shouldAddABambooToTheBambooLayerIfTheKeyExists()]
negated conditional → KILLED

2.2
Location : growBamboo
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestGrowBamboo]/[method:shouldAddTwoBamboosToTheBambooLayerWhenFertilized()]
negated conditional → KILLED

46

1.1
Location : growBamboo
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestGrowBamboo]/[method:shouldAddTwoBamboosToTheBambooLayerWhenFertilized()]
negated conditional → KILLED

47

1.1
Location : growBamboo
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestGrowBamboo]/[method:shouldNotGrowBambooPastTheMaximumNumberOfBamboos()]
removed call to com/takenoko/layers/bamboo/LayerBambooStack::growBamboo → KILLED

48

1.1
Location : growBamboo
Killed by : none
replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::growBamboo → SURVIVED

50

1.1
Location : growBamboo
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestGrowBamboo]/[method:shouldAddTwoBamboosToTheBambooLayerWhenFertilized()]
removed call to com/takenoko/layers/bamboo/LayerBambooStack::growBamboo → KILLED

51

1.1
Location : growBamboo
Killed by : com.takenoko.bot.utils.HistoryAnalysisTest.[engine:junit-jupiter]/[class:com.takenoko.bot.utils.HistoryAnalysisTest]/[nested-class:IntegrationTest]/[method:test1()]
replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::growBamboo → KILLED

54

1.1
Location : growBamboo
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestGrowBamboo]/[method:shouldAddABambooToTheBambooLayerIfTheKeyExists()]
removed call to com/takenoko/layers/bamboo/LayerBambooStack::growBamboo → KILLED

55

1.1
Location : growBamboo
Killed by : com.takenoko.bot.utils.HistoryAnalysisTest.[engine:junit-jupiter]/[class:com.takenoko.bot.utils.HistoryAnalysisTest]/[nested-class:IntegrationTest]/[method:test1()]
replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::growBamboo → KILLED

66

1.1
Location : getBambooAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestGetBambooAt]/[method:shouldReturn0OnAnEmptyTile()]
negated conditional → KILLED

67

1.1
Location : lambda$getBambooAt$1
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestGetBambooAt]/[method:shouldReturn0OnAnEmptyTile()]
replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::lambda$getBambooAt$1 → KILLED

68

1.1
Location : getBambooAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestGetBambooAt]/[method:shouldReturn0OnAnEmptyTile()]
replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::getBambooAt → KILLED

81

1.1
Location : eatBamboo
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestRemoveBamboo]/[method:shouldThrowAnExceptionIfThePositionIsNotOnTheBoard()]
negated conditional → KILLED

82

1.1
Location : eatBamboo
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestRemoveBamboo]/[method:shouldThrowAnExceptionIfTheBambooStackIsEmpty()]
removed call to com/takenoko/layers/bamboo/LayerBambooStack::eatBamboo → KILLED

89

1.1
Location : copy
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestCopy]/[method:shouldReturnACopyOfTheBambooLayer()]
replaced return value with null for com/takenoko/layers/bamboo/BambooLayer::copy → KILLED

94

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

2.2
Location : equals
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestEquals]/[method:shouldReturnTrueIfTheBambooLayerEqualsItself()]
replaced boolean return with false for com/takenoko/layers/bamboo/BambooLayer::equals → KILLED

95

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

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

3.3
Location : equals
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestEquals]/[method:shouldReturnFalseIfItIsNotABambooLayer()]
replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::equals → KILLED

97

1.1
Location : equals
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestEquals]/[method:shouldReturnTrueIfTheBambooLayersAreEqual()]
replaced boolean return with false for com/takenoko/layers/bamboo/BambooLayer::equals → KILLED

2.2
Location : equals
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestEquals]/[method:shouldReturnFalseIfTheBambooLayersAreNotEqual()]
replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::equals → KILLED

102

1.1
Location : hashCode
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestHashCode]/[method:shouldReturnADifferentHashCodeIfTheBambooLayersAreNotEqual()]
replaced int return with 0 for com/takenoko/layers/bamboo/BambooLayer::hashCode → KILLED

106

1.1
Location : isEatableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsEatableAt]/[method:whenTheTileIsNeitherAPondNorHasAnImprovementEnclosureShouldReturnTrue()]
negated conditional → KILLED

107

1.1
Location : isEatableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsEatableAt]/[method:whenItIsAPondShouldReturnFalse()]
negated conditional → KILLED

111

1.1
Location : isEatableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsEatableAt]/[method:whenTheTileHasAnImprovementEnclosureShouldReturnFalse()]
negated conditional → KILLED

112

1.1
Location : isEatableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsEatableAt]/[method:whenTheTileHasAnImprovementEnclosureShouldReturnFalse()]
negated conditional → KILLED

113

1.1
Location : isEatableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsEatableAt]/[method:whenTheTileHasAnImprovementEnclosureShouldReturnFalse()]
replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::isEatableAt → KILLED

115

1.1
Location : isEatableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsEatableAt]/[method:whenTheTileIsNeitherAPondNorHasAnImprovementEnclosureShouldReturnTrue()]
replaced boolean return with false for com/takenoko/layers/bamboo/BambooLayer::isEatableAt → KILLED

2.2
Location : isEatableAt
Killed by : com.takenoko.bot.utils.HistoryAnalysisTest.[engine:junit-jupiter]/[class:com.takenoko.bot.utils.HistoryAnalysisTest]/[nested-class:IntegrationTest]/[method:test1()]
replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::isEatableAt → KILLED

117

1.1
Location : isEatableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsEatableAt]/[method:whenItIsAPondShouldReturnFalse()]
replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::isEatableAt → KILLED

121

1.1
Location : isGrowableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsGrowableAt]/[method:whenTheTileIsNotAPondAndIsAGrowableTileShouldReturnTrue()]
negated conditional → KILLED

2.2
Location : isGrowableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsGrowableAt]/[method:whenItIsAPondShouldReturnFalse()]
replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::isGrowableAt → KILLED

122

1.1
Location : isGrowableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsGrowableAt]/[method:whenItIsAPondShouldReturnFalse()]
negated conditional → KILLED

123

1.1
Location : isGrowableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsGrowableAt]/[method:whenTheTileIsNotAPondAndIsAGrowableTileShouldReturnTrue()]
negated conditional → KILLED

124

1.1
Location : isGrowableAt
Killed by : com.takenoko.layers.bamboo.BambooLayerTest.[engine:junit-jupiter]/[class:com.takenoko.layers.bamboo.BambooLayerTest]/[nested-class:TestIsGrowableAt]/[method:whenTheTileIsNotAPondAndIsAGrowableTileShouldReturnTrue()]
negated conditional → KILLED

128

1.1
Location : getGrowablePositions
Killed by : none
replaced return value with Collections.emptyList for com/takenoko/layers/bamboo/BambooLayer::getGrowablePositions → TIMED_OUT

129

1.1
Location : lambda$getGrowablePositions$2
Killed by : none
replaced boolean return with false for com/takenoko/layers/bamboo/BambooLayer::lambda$getGrowablePositions$2 → TIMED_OUT

2.2
Location : lambda$getGrowablePositions$2
Killed by : none
replaced boolean return with true for com/takenoko/layers/bamboo/BambooLayer::lambda$getGrowablePositions$2 → TIMED_OUT

Active mutators

Tests examined


Report generated by PIT 1.8.0