ImprovementDeck.java

1
package com.takenoko.asset;
2
3
import com.takenoko.layers.tile.ImprovementType;
4
import java.util.HashMap;
5
import java.util.Objects;
6
import java.util.stream.Collectors;
7
8
/** The deck containing all the improvement chips you can place on the tiles. */
9
public class ImprovementDeck extends HashMap<ImprovementType, Integer> {
10
    private static final int DEFAULT_IMPROVEMENT_COUNT = 3;
11
    private ImprovementType lastDrawnImprovement;
12
13
    public ImprovementDeck() {
14
        for (ImprovementType improvementType : ImprovementType.values()) {
15
            this.put(improvementType, DEFAULT_IMPROVEMENT_COUNT);
16
        }
17
    }
18
19
    /**
20
     * @param improvementType what improvement type you choose to draw
21
     * @return the improvement type you choose to draw
22
     */
23
    public ImprovementType draw(ImprovementType improvementType) {
24 2 1. draw : changed conditional boundary → KILLED
2. draw : negated conditional → KILLED
        if (this.get(improvementType) > 0) {
25 1 1. draw : Replaced integer subtraction with addition → KILLED
            this.put(improvementType, this.get(improvementType) - 1);
26
            lastDrawnImprovement = improvementType;
27 1 1. draw : replaced return value with null for com/takenoko/asset/ImprovementDeck::draw → KILLED
            return improvementType;
28
        }
29
30
        throw new IllegalArgumentException("No more improvement of type " + improvementType);
31
    }
32
33
    /**
34
     * @param improvementType the improvement type you want to know if available
35
     * @return true if the improvement type is available, false otherwise
36
     */
37
    public boolean hasImprovement(ImprovementType improvementType) {
38 4 1. hasImprovement : changed conditional boundary → KILLED
2. hasImprovement : negated conditional → KILLED
3. hasImprovement : negated conditional → KILLED
4. hasImprovement : replaced boolean return with true for com/takenoko/asset/ImprovementDeck::hasImprovement → KILLED
        return this.containsKey(improvementType) && this.get(improvementType) > 0;
39
    }
40
41
    @Override
42
    public boolean equals(Object o) {
43 2 1. equals : negated conditional → KILLED
2. equals : replaced boolean return with false for com/takenoko/asset/ImprovementDeck::equals → KILLED
        if (this == o) return true;
44 3 1. equals : negated conditional → KILLED
2. equals : negated conditional → KILLED
3. equals : replaced boolean return with true for com/takenoko/asset/ImprovementDeck::equals → KILLED
        if (o == null || getClass() != o.getClass()) return false;
45 2 1. equals : negated conditional → KILLED
2. equals : replaced boolean return with true for com/takenoko/asset/ImprovementDeck::equals → KILLED
        if (!super.equals(o)) return false;
46
        ImprovementDeck that = (ImprovementDeck) o;
47 2 1. equals : replaced boolean return with true for com/takenoko/asset/ImprovementDeck::equals → SURVIVED
2. equals : negated conditional → KILLED
        return lastDrawnImprovement == that.lastDrawnImprovement;
48
    }
49
50
    @Override
51
    public int hashCode() {
52 1 1. hashCode : replaced int return with 0 for com/takenoko/asset/ImprovementDeck::hashCode → KILLED
        return Objects.hash(super.hashCode(), lastDrawnImprovement);
53
    }
54
55
    public ImprovementType peek() {
56 1 1. peek : replaced return value with null for com/takenoko/asset/ImprovementDeck::peek → TIMED_OUT
        return lastDrawnImprovement;
57
    }
58
59
    @Override
60
    public String toString() {
61 1 1. toString : replaced return value with "" for com/takenoko/asset/ImprovementDeck::toString → NO_COVERAGE
        return "ImprovementDeck{"
62
                + this.entrySet().stream()
63 1 1. lambda$toString$0 : replaced return value with "" for com/takenoko/asset/ImprovementDeck::lambda$toString$0 → NO_COVERAGE
                        .map(o -> o.getKey() + "(" + o.getValue() + ")")
64
                        .collect(Collectors.joining(", "))
65
                + "}";
66
    }
67
}

Mutations

24

1.1
Location : draw
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestDraw]/[method:draw_WhenImprovementIsExhausted_ThenAnExceptionIsThrown()]
changed conditional boundary → KILLED

2.2
Location : draw
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestHasImprovement]/[method:hasImprovement_WhenImprovementIsDrawn_ThenItIsRemovedFromTheDeck()]
negated conditional → KILLED

25

1.1
Location : draw
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestDraw]/[method:draw_WhenImprovementIsDrawn_ThenItIsRemovedFromTheDeck()]
Replaced integer subtraction with addition → KILLED

27

1.1
Location : draw
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestDraw]/[method:draw_WhenImprovementIsDrawn_ThenItIsRemovedFromTheDeck()]
replaced return value with null for com/takenoko/asset/ImprovementDeck::draw → KILLED

38

1.1
Location : hasImprovement
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestHasImprovement]/[method:hasImprovement_WhenDeckRunsOutOfImprovement_ThenReturnsFalse()]
changed conditional boundary → KILLED

2.2
Location : hasImprovement
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestHasImprovement]/[method:hasImprovement_WhenImprovementIsDrawn_ThenItIsRemovedFromTheDeck()]
negated conditional → KILLED

3.3
Location : hasImprovement
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestHasImprovement]/[method:hasImprovement_WhenImprovementIsDrawn_ThenItIsRemovedFromTheDeck()]
negated conditional → KILLED

4.4
Location : hasImprovement
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestHasImprovement]/[method:hasImprovement_WhenDeckRunsOutOfImprovement_ThenReturnsFalse()]
replaced boolean return with true for com/takenoko/asset/ImprovementDeck::hasImprovement → KILLED

43

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

2.2
Location : equals
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestEquals]/[method:equals_WhenCalledOnSelf_ThenReturnsTrue()]
replaced boolean return with false for com/takenoko/asset/ImprovementDeck::equals → KILLED

44

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

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

3.3
Location : equals
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestEquals]/[method:equals_WhenCalledOnDifferentObject_ThenReturnsFalse()]
replaced boolean return with true for com/takenoko/asset/ImprovementDeck::equals → KILLED

45

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

2.2
Location : equals
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestEquals]/[method:equals_WhenTwoDecksAreDifferent_ThenTheyAreNotEquals()]
replaced boolean return with true for com/takenoko/asset/ImprovementDeck::equals → KILLED

47

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

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

52

1.1
Location : hashCode
Killed by : com.takenoko.asset.ImprovementDeckTest.[engine:junit-jupiter]/[class:com.takenoko.asset.ImprovementDeckTest]/[nested-class:TestHashCode]/[method:hashCode_WhenTwoDecksAreDifferent_ThenTheyHaveDifferentHashcode()]
replaced int return with 0 for com/takenoko/asset/ImprovementDeck::hashCode → KILLED

56

1.1
Location : peek
Killed by : none
replaced return value with null for com/takenoko/asset/ImprovementDeck::peek → TIMED_OUT

61

1.1
Location : toString
Killed by : none
replaced return value with "" for com/takenoko/asset/ImprovementDeck::toString → NO_COVERAGE

63

1.1
Location : lambda$toString$0
Killed by : none
replaced return value with "" for com/takenoko/asset/ImprovementDeck::lambda$toString$0 → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.8.0