| 1 |  | package edu.ucsb.cs156.happiercows.jobs; | 
| 2 |  | 
 | 
| 3 |  | import java.util.Optional; | 
| 4 |  | 
 | 
| 5 |  | 
 | 
| 6 |  | import java.util.Iterator; | 
| 7 |  | import edu.ucsb.cs156.happiercows.services.jobs.JobContext; | 
| 8 |  | import edu.ucsb.cs156.happiercows.services.jobs.JobContextConsumer; | 
| 9 |  | import edu.ucsb.cs156.happiercows.entities.Commons; | 
| 10 |  | import edu.ucsb.cs156.happiercows.entities.UserCommons; | 
| 11 |  | import edu.ucsb.cs156.happiercows.entities.CommonsPlus; | 
| 12 |  | import edu.ucsb.cs156.happiercows.entities.CowLot; | 
| 13 |  | import edu.ucsb.cs156.happiercows.entities.User; | 
| 14 |  | import edu.ucsb.cs156.happiercows.repositories.CommonsRepository; | 
| 15 |  | import edu.ucsb.cs156.happiercows.repositories.UserCommonsRepository; | 
| 16 |  | import edu.ucsb.cs156.happiercows.repositories.UserRepository; | 
| 17 |  | import edu.ucsb.cs156.happiercows.repositories.CowLotRepository; | 
| 18 |  | import lombok.Getter; | 
| 19 |  | import lombok.extern.slf4j.Slf4j; | 
| 20 |  | import lombok.AllArgsConstructor; | 
| 21 |  | 
 | 
| 22 |  | @AllArgsConstructor | 
| 23 |  | public class UpdateCowHealthJob implements JobContextConsumer { | 
| 24 |  | 
 | 
| 25 |  |     @Getter | 
| 26 |  |     private CommonsRepository commonsRepository; | 
| 27 |  |     @Getter | 
| 28 |  |     private UserCommonsRepository userCommonsRepository; | 
| 29 |  |     @Getter | 
| 30 |  |     private CowLotRepository cowLotRepository; | 
| 31 |  |     @Getter | 
| 32 |  |     private UserRepository userRepository; | 
| 33 |  | 
 | 
| 34 |  |     @Override | 
| 35 |  |     public void accept(JobContext ctx) throws Exception { | 
| 36 | 1
1. accept : removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED 
 |         ctx.log("Starting Update Cow Health job:"); | 
| 37 |  |         Iterable<Commons> allCommons = commonsRepository.findAll(); | 
| 38 |  |          | 
| 39 |  |         for (Commons commons : allCommons) { | 
| 40 |  |             String name = commons.getName(); | 
| 41 | 1
1. accept : negated conditional → KILLED 
 |             if(commons.gameInProgress()){ | 
| 42 | 1
1. accept : removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED 
 |                 ctx.log("Commons " + commons.getName() + ", degradationRate: " + commons.getDegradationRate() + ", carryingCapacity: " + commons.getCarryingCapacity()); | 
| 43 |  |                 int carryingCapacity = commons.getCarryingCapacity(); | 
| 44 |  |                 double degradationRate = commons.getDegradationRate(); | 
| 45 |  |                 Iterable<UserCommons> allUserCommons = userCommonsRepository.findByCommonsId(commons.getId()); | 
| 46 |  | 
 | 
| 47 | 1
1. lambda$accept$0 : replaced return value with null for edu/ucsb/cs156/happiercows/jobs/UpdateCowHealthJob::lambda$accept$0 → KILLED 
 |                 Integer totalCows = commonsRepository.getNumCows(commons.getId()).orElseThrow(()->new RuntimeException("Error calling getNumCows(" + commons.getId() + ")")); | 
| 48 |  | 
 | 
| 49 |  |                 for (UserCommons userCommons : allUserCommons) { | 
| 50 |  |                     double totalHealths = 0d; | 
| 51 | 1
1. lambda$accept$1 : replaced return value with null for edu/ucsb/cs156/happiercows/jobs/UpdateCowHealthJob::lambda$accept$1 → KILLED 
 |                     User user = userRepository.findById(userCommons.getUserId()).orElseThrow(()->new RuntimeException("Error calling userRepository.findById(" + userCommons.getUserId() + ")")); | 
| 52 | 1
1. accept : removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED 
 |                     ctx.log("User: " + user.getFullName() + ", numCows: " + userCommons.getNumOfCows() + ", cowHealth: " + userCommons.getCowHealth()); | 
| 53 |  |                     for(CowLot cowLot: cowLotRepository.findAllByUserCommonsId(userCommons.getId())){ | 
| 54 |  |                         double newCowHealth = calculateNewCowHealth(cowLot.getHealth(), userCommons.getNumOfCows(), totalCows, carryingCapacity, degradationRate); | 
| 55 | 1
1. accept : removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED 
 |                         ctx.log("old cow health: " + cowLot.getHealth() + ", new cow health: " + newCowHealth); | 
| 56 | 1
1. accept : removed call to edu/ucsb/cs156/happiercows/entities/CowLot::setHealth → KILLED 
 |                         cowLot.setHealth(newCowHealth); | 
| 57 | 2
1. accept : changed conditional boundary → KILLED 2. accept : negated conditional → KILLED
 
 |                         if(newCowHealth > 0){ | 
| 58 |  |                             cowLotRepository.save(cowLot); | 
| 59 |  |                         } else { | 
| 60 | 1
1. accept : removed call to edu/ucsb/cs156/happiercows/repositories/CowLotRepository::delete → KILLED 
 |                             cowLotRepository.delete(cowLot); | 
| 61 | 2
1. accept : Replaced integer subtraction with addition → KILLED 2. accept : removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setNumOfCows → KILLED
 
 |                             userCommons.setNumOfCows(userCommons.getNumOfCows()-cowLot.getNumCows()); | 
| 62 |  |                         } | 
| 63 | 2
1. accept : Replaced double multiplication with division → KILLED 2. accept : Replaced double addition with subtraction → KILLED
 
 |                         totalHealths += newCowHealth * cowLot.getNumCows(); | 
| 64 |  |                     } | 
| 65 | 2
1. accept : Replaced double division with multiplication → KILLED 2. accept : removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setCowHealth → KILLED
 
 |                     userCommons.setCowHealth(totalHealths / userCommons.getNumOfCows()); | 
| 66 |  |                     userCommonsRepository.save(userCommons); | 
| 67 |  |                 } | 
| 68 |  |             } else{ | 
| 69 | 1
1. accept : removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED 
 |                 ctx.log("Game " + name + " is not currently in progress, cow health will not be updated for this commons."); | 
| 70 |  |             } | 
| 71 |  |         } | 
| 72 | 1
1. accept : removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED 
 |         ctx.log("Update Cow Health job complete!"); | 
| 73 |  |     } | 
| 74 |  | 
 | 
| 75 |  |     public static double calculateNewCowHealth( | 
| 76 |  |         double oldCowHealth, | 
| 77 |  |         int numCows, | 
| 78 |  |         int totalCows, | 
| 79 |  |         int carryingCapacity, | 
| 80 |  |         double degradationRate) { | 
| 81 | 2
1. calculateNewCowHealth : changed conditional boundary → KILLED 2. calculateNewCowHealth : negated conditional → KILLED
 
 |         if (totalCows <= carryingCapacity) { | 
| 82 |  |             // increase cow health but do not exceed 100 | 
| 83 | 2
1. calculateNewCowHealth : Replaced double addition with subtraction → KILLED 2. calculateNewCowHealth : replaced double return with 0.0d for edu/ucsb/cs156/happiercows/jobs/UpdateCowHealthJob::calculateNewCowHealth → KILLED
 
 |             return Math.min(100, oldCowHealth + (degradationRate)); | 
| 84 |  |         } else { | 
| 85 |  |             // decrease cow health, don't go lower than 0 | 
| 86 | 4
1. calculateNewCowHealth : Replaced integer subtraction with addition → KILLED 2. calculateNewCowHealth : Replaced double multiplication with division → KILLED
 3. calculateNewCowHealth : Replaced double subtraction with addition → KILLED
 4. calculateNewCowHealth : replaced double return with 0.0d for edu/ucsb/cs156/happiercows/jobs/UpdateCowHealthJob::calculateNewCowHealth → KILLED
 
 |             return Math.max(0, oldCowHealth - Math.min((totalCows - carryingCapacity) * degradationRate, 100)); | 
| 87 |  |         } | 
| 88 |  |     } | 
| 89 |  | 
 | 
| 90 |  | } | 
|  |  | Mutations | 
| 36 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_log_output_success()] removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED
 | 
| 41 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_if_game_start_has_not_passed()] negated conditional → KILLED
 | 
| 42 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_health_greater_than_100()] removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED
 | 
| 47 |  | 1.1Location : lambda$accept$0
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_throws_exception_when_get_num_cows_fails()] replaced return value with null for edu/ucsb/cs156/happiercows/jobs/UpdateCowHealthJob::lambda$accept$0 → KILLED
 | 
| 51 |  | 1.1Location : lambda$accept$1
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_throws_exception_when_getting_user_fails()] replaced return value with null for edu/ucsb/cs156/happiercows/jobs/UpdateCowHealthJob::lambda$accept$1 → KILLED
 | 
| 52 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_health_greater_than_100()] removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED
 | 
| 55 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_health_greater_than_100()] removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED
 | 
| 56 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_for_multiple()] removed call to edu/ucsb/cs156/happiercows/entities/CowLot::setHealth → KILLED
 | 
| 57 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_health_lower_than_zero()] changed conditional boundary → KILLED
 2.2Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_health_greater_than_100()] negated conditional → KILLED
 | 
| 60 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_health_lower_than_zero()] removed call to edu/ucsb/cs156/happiercows/repositories/CowLotRepository::delete → KILLED
 | 
| 61 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_health_lower_than_zero()] Replaced integer subtraction with addition → KILLED
 2.2Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_health_lower_than_zero()] removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setNumOfCows → KILLED
 | 
| 63 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_if_greater_than_carrying_capacity()] Replaced double multiplication with division → KILLED
 2.2Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_health_greater_than_100()] Replaced double addition with subtraction → KILLED
 | 
| 65 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_if_greater_than_carrying_capacity()] Replaced double division with multiplication → KILLED
 2.2Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_if_less_than_carrying_capacity()] removed call to edu/ucsb/cs156/happiercows/entities/UserCommons::setCowHealth → KILLED
 | 
| 69 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_if_game_start_has_not_passed()] removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED
 | 
| 72 |  | 1.1Location : accept
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_log_output_success()] removed call to edu/ucsb/cs156/happiercows/services/jobs/JobContext::log → KILLED
 | 
| 81 |  | 1.1Location : calculateNewCowHealth
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_updating_to_new_values_if_equal_to_carrying_capacity()] changed conditional boundary → KILLED
 2.2Location : calculateNewCowHealth
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_calculateNewCowHealth__numCows_ten_over_carryingCapacity_old_health_at_80__goes_down_by_degradation_rate_times_10()] negated conditional → KILLED
 | 
| 83 |  | 1.1Location : calculateNewCowHealth
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_calculateNewCowHealth__numCows_lt_carryingCapacity_old_health_at_80__goes_up()] Replaced double addition with subtraction → KILLED
 2.2Location : calculateNewCowHealth
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_calculateNewCowHealth__numCows_lt_carryingCapacity_old_health_at_80__goes_up()] replaced double return with 0.0d for edu/ucsb/cs156/happiercows/jobs/UpdateCowHealthJob::calculateNewCowHealth → KILLED
 | 
| 86 |  | 1.1Location : calculateNewCowHealth
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_calculateNewCowHealth__numCows_ten_over_carryingCapacity_old_health_at_80__goes_down_by_degradation_rate_times_10()] Replaced integer subtraction with addition → KILLED
 2.2Location : calculateNewCowHealth
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_calculateNewCowHealth__numCows_ten_over_carryingCapacity_old_health_at_80__goes_down_by_degradation_rate_times_10()] Replaced double multiplication with division → KILLED
 3.3Location : calculateNewCowHealth
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_calculateNewCowHealth__numCows_ten_over_carryingCapacity_old_health_at_80__goes_down_by_degradation_rate_times_10()] Replaced double subtraction with addition → KILLED
 4.4Location : calculateNewCowHealth
 Killed by : edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobTests]/[method:test_calculateNewCowHealth__numCows_ten_over_carryingCapacity_old_health_at_80__goes_down_by_degradation_rate_times_10()] replaced double return with 0.0d for edu/ucsb/cs156/happiercows/jobs/UpdateCowHealthJob::calculateNewCowHealth → KILLED
 |