|
1
|
|
package edu.ucsb.cs156.happiercows.strategies; |
|
2
|
|
|
|
3
|
|
import edu.ucsb.cs156.happiercows.entities.CommonsPlus; |
|
4
|
|
import edu.ucsb.cs156.happiercows.entities.UserCommons; |
|
5
|
|
import lombok.AllArgsConstructor; |
|
6
|
|
import lombok.Getter; |
|
7
|
|
import lombok.extern.slf4j.Slf4j; |
|
8
|
|
|
|
9
|
|
/** |
|
10
|
|
* The CowHealthUpdateStrategies enum provides a variety of strategies for |
|
11
|
|
* updating cow health. |
|
12
|
|
* |
|
13
|
|
* For information on Java enum's, see the Oracle Java Tutorial on |
|
14
|
|
* <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html">Enum |
|
15
|
|
* Types</a>, |
|
16
|
|
* which are far more powerful in Java than enums in most other languages. |
|
17
|
|
*/ |
|
18
|
|
|
|
19
|
|
@Getter |
|
20
|
|
@AllArgsConstructor |
|
21
|
|
@Slf4j |
|
22
|
|
public enum CowHealthUpdateStrategies implements CowHealthUpdateStrategy { |
|
23
|
|
|
|
24
|
|
Linear("Linear", |
|
25
|
|
"Cow health increases/decreases proportionally to the number of cows over/under the carrying capacity.") { |
|
26
|
|
@Override |
|
27
|
|
public double calculateNewCowHealth(CommonsPlus commonsPlus, UserCommons uC, int totalCows) { |
|
28
|
1
1. calculateNewCowHealth : replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$1::calculateNewCowHealth → KILLED
|
return uC.getCowHealth() |
|
29
|
3
1. calculateNewCowHealth : Replaced integer subtraction with addition → KILLED
2. calculateNewCowHealth : Replaced double subtraction with addition → KILLED
3. calculateNewCowHealth : Replaced double multiplication with division → KILLED
|
- (totalCows - commonsPlus.getEffectiveCapacity()) * commonsPlus.getCommons().getDegradationRate(); |
|
30
|
|
} |
|
31
|
|
}, |
|
32
|
|
Constant("Constant", |
|
33
|
|
"Cow health changes increases/decreases by the degradation rate, depending on if the number of cows exceeds the carrying capacity.") { |
|
34
|
|
@Override |
|
35
|
|
public double calculateNewCowHealth(CommonsPlus commonsPlus, UserCommons uC, int totalCows) { |
|
36
|
2
1. calculateNewCowHealth : negated conditional → KILLED
2. calculateNewCowHealth : changed conditional boundary → KILLED
|
if (totalCows <= commonsPlus.getEffectiveCapacity()) { |
|
37
|
2
1. calculateNewCowHealth : replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$2::calculateNewCowHealth → KILLED
2. calculateNewCowHealth : Replaced double addition with subtraction → KILLED
|
return uC.getCowHealth() + commonsPlus.getCommons().getDegradationRate(); |
|
38
|
|
} else { |
|
39
|
2
1. calculateNewCowHealth : Replaced double subtraction with addition → KILLED
2. calculateNewCowHealth : replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$2::calculateNewCowHealth → KILLED
|
return uC.getCowHealth() - commonsPlus.getCommons().getDegradationRate(); |
|
40
|
|
} |
|
41
|
|
} |
|
42
|
|
}, |
|
43
|
|
Noop("Do nothing", "Cow health does not change.") { |
|
44
|
|
@Override |
|
45
|
|
public double calculateNewCowHealth(CommonsPlus commonsPlus, UserCommons uC, int totalCows) { |
|
46
|
1
1. calculateNewCowHealth : replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$3::calculateNewCowHealth → KILLED
|
return uC.getCowHealth(); |
|
47
|
|
} |
|
48
|
|
}, |
|
49
|
|
Milan("Milan", |
|
50
|
|
"Cow health increases/decreases proportionally to the square of ratio of cows/total capacity according to a formula from Milan de Vries.") { |
|
51
|
|
@Override |
|
52
|
|
public double calculateNewCowHealth(CommonsPlus commonsPlus, UserCommons uC, int totalCows) { |
|
53
|
1
1. calculateNewCowHealth : Replaced integer subtraction with addition → KILLED
|
double excess = totalCows - commonsPlus.getEffectiveCapacity(); |
|
54
|
|
double adjustmentFactor = 1.0; |
|
55
|
1
1. calculateNewCowHealth : Replaced double division with multiplication → KILLED
|
double x = (excess / commonsPlus.getEffectiveCapacity()); |
|
56
|
1
1. calculateNewCowHealth : negated conditional → KILLED
|
if(excess != 0){ |
|
57
|
2
1. calculateNewCowHealth : Replaced double multiplication with division → KILLED
2. calculateNewCowHealth : Replaced double division with multiplication → KILLED
|
double sign = -1 * excess / Math.abs(excess); |
|
58
|
3
1. calculateNewCowHealth : Replaced double multiplication with division → KILLED
2. calculateNewCowHealth : Replaced double multiplication with division → KILLED
3. calculateNewCowHealth : Replaced double addition with subtraction → KILLED
|
adjustmentFactor = 1.0 + sign * x * x; |
|
59
|
|
} |
|
60
|
|
adjustmentFactor = Math.max(0.0, adjustmentFactor); |
|
61
|
2
1. calculateNewCowHealth : Replaced double multiplication with division → KILLED
2. calculateNewCowHealth : replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$4::calculateNewCowHealth → KILLED
|
return uC.getCowHealth() * adjustmentFactor; |
|
62
|
|
} |
|
63
|
|
}, |
|
64
|
|
Mattanjah("Mattanjah", |
|
65
|
|
"Cow health increases/decreases proportionally to the square of ratio of excess/total capacity * degradation rate according to a formula from Mattanjah de Vries.") { |
|
66
|
|
@Override |
|
67
|
|
public double calculateNewCowHealth(CommonsPlus commonsPlus, UserCommons uC, int totalCows) { |
|
68
|
|
|
|
69
|
1
1. calculateNewCowHealth : Replaced integer subtraction with addition → KILLED
|
double excess = totalCows - commonsPlus.getEffectiveCapacity(); |
|
70
|
|
double adjustmentFactor = 1.0; |
|
71
|
2
1. calculateNewCowHealth : Replaced double multiplication with division → KILLED
2. calculateNewCowHealth : Replaced double division with multiplication → KILLED
|
double x = (excess / commonsPlus.getEffectiveCapacity()) * commonsPlus.getCommons().getDegradationRate(); |
|
72
|
1
1. calculateNewCowHealth : negated conditional → KILLED
|
if(excess != 0){ |
|
73
|
2
1. calculateNewCowHealth : Replaced double multiplication with division → KILLED
2. calculateNewCowHealth : Replaced double division with multiplication → KILLED
|
double sign = -1 * excess / Math.abs(excess); |
|
74
|
3
1. calculateNewCowHealth : Replaced double multiplication with division → KILLED
2. calculateNewCowHealth : Replaced double multiplication with division → KILLED
3. calculateNewCowHealth : Replaced double addition with subtraction → KILLED
|
adjustmentFactor = 1.0 + sign * x * x; |
|
75
|
|
} |
|
76
|
|
adjustmentFactor = Math.max(0.0, adjustmentFactor); |
|
77
|
2
1. calculateNewCowHealth : replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$5::calculateNewCowHealth → KILLED
2. calculateNewCowHealth : Replaced double multiplication with division → KILLED
|
return uC.getCowHealth() * adjustmentFactor; |
|
78
|
|
} |
|
79
|
|
}; |
|
80
|
|
|
|
81
|
|
private final String displayName; |
|
82
|
|
private final String description; |
|
83
|
|
|
|
84
|
|
public final static CowHealthUpdateStrategies DEFAULT_ABOVE_CAPACITY = Linear; |
|
85
|
|
public final static CowHealthUpdateStrategies DEFAULT_BELOW_CAPACITY = Constant; |
|
86
|
|
} |
| | Mutations |
| 28 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:linear_updates_health_proportional_to_num_cows_over_capacity()] replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$1::calculateNewCowHealth → KILLED
|
| 29 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:linear_updates_health_proportional_to_num_cows_over_capacity()] Replaced integer subtraction with addition → KILLED
2.2 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:linear_updates_health_proportional_to_num_cows_over_capacity()] Replaced double subtraction with addition → KILLED
3.3 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:linear_updates_health_proportional_to_num_cows_over_capacity()] Replaced double multiplication with division → KILLED
|
| 36 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:constant_changes_by_constant_amount()] negated conditional → KILLED
2.2 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:constant_changes_by_constant_amount()] changed conditional boundary → KILLED
|
| 37 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:constant_changes_by_constant_amount()] replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$2::calculateNewCowHealth → KILLED
2.2 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:constant_changes_by_constant_amount()] Replaced double addition with subtraction → KILLED
|
| 39 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:constant_changes_by_constant_amount()] Replaced double subtraction with addition → KILLED
2.2 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:constant_changes_by_constant_amount()] replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$2::calculateNewCowHealth → KILLED
|
| 46 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:noop_does_nothing()] replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$3::calculateNewCowHealth → KILLED
|
| 53 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:milan_calculates_correctly()] Replaced integer subtraction with addition → KILLED
|
| 55 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:milan_calculates_correctly()] Replaced double division with multiplication → KILLED
|
| 56 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:milan_calculates_correctly()] negated conditional → KILLED
|
| 57 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:milan_calculates_correctly()] Replaced double multiplication with division → KILLED
2.2 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:milan_calculates_correctly()] Replaced double division with multiplication → KILLED
|
| 58 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:milan_calculates_correctly()] Replaced double multiplication with division → KILLED
2.2 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:milan_calculates_correctly()] Replaced double multiplication with division → KILLED
3.3 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:milan_calculates_correctly()] Replaced double addition with subtraction → KILLED
|
| 61 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:milan_calculates_correctly()] Replaced double multiplication with division → KILLED
2.2 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:milan_calculates_correctly()] replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$4::calculateNewCowHealth → KILLED
|
| 69 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:mattanjah_calculates_correctly()] Replaced integer subtraction with addition → KILLED
|
| 71 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:mattanjah_calculates_correctly()] Replaced double multiplication with division → KILLED
2.2 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:mattanjah_calculates_correctly()] Replaced double division with multiplication → KILLED
|
| 72 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:mattanjah_calculates_correctly()] negated conditional → KILLED
|
| 73 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:mattanjah_calculates_correctly()] Replaced double multiplication with division → KILLED
2.2 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:mattanjah_calculates_correctly()] Replaced double division with multiplication → KILLED
|
| 74 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:mattanjah_calculates_correctly()] Replaced double multiplication with division → KILLED
2.2 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:mattanjah_calculates_correctly()] Replaced double multiplication with division → KILLED
3.3 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:mattanjah_calculates_correctly()] Replaced double addition with subtraction → KILLED
|
| 77 |
|
1.1 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:mattanjah_calculates_correctly()] replaced double return with 0.0d for edu/ucsb/cs156/happiercows/strategies/CowHealthUpdateStrategies$5::calculateNewCowHealth → KILLED
2.2 Location : calculateNewCowHealth Killed by : edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.strategies.CowHealthUpdateStrategyTests]/[method:mattanjah_calculates_correctly()] Replaced double multiplication with division → KILLED
|