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
|