|
1
|
|
package edu.ucsb.cs156.happiercows.services; |
|
2
|
|
|
|
3
|
|
import java.util.ArrayList; |
|
4
|
|
import java.util.Comparator; |
|
5
|
|
import java.util.List; |
|
6
|
|
import java.util.Optional; |
|
7
|
|
import java.util.stream.Collectors; |
|
8
|
|
|
|
9
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
10
|
|
import org.springframework.stereotype.Service; |
|
11
|
|
|
|
12
|
|
import edu.ucsb.cs156.happiercows.entities.Commons; |
|
13
|
|
import edu.ucsb.cs156.happiercows.entities.CommonsPlus; |
|
14
|
|
import edu.ucsb.cs156.happiercows.repositories.CommonsRepository; |
|
15
|
|
import edu.ucsb.cs156.happiercows.repositories.UserCommonsRepository; |
|
16
|
|
|
|
17
|
|
@Service("CommonsPlusBuilderService") |
|
18
|
|
public class CommonsPlusBuilderService { |
|
19
|
|
|
|
20
|
|
@Autowired |
|
21
|
|
CommonsRepository commonsRepository; |
|
22
|
|
|
|
23
|
|
@Autowired |
|
24
|
|
UserCommonsRepository userCommonsRepository; |
|
25
|
|
|
|
26
|
|
public CommonsPlus toCommonsPlus(Commons c) { |
|
27
|
|
Optional<Integer> numCows = commonsRepository.getNumCows(c.getId()); |
|
28
|
|
Optional<Integer> numUsers = commonsRepository.getNumUsers(c.getId()); |
|
29
|
|
List<Integer> cowsPerFarmer = new ArrayList<>(); |
|
30
|
|
userCommonsRepository.findByCommonsId(c.getId()) |
|
31
|
1
1. toCommonsPlus : removed call to java/lang/Iterable::forEach → KILLED
|
.forEach((uc) -> cowsPerFarmer.add(uc.getNumOfCows())); |
|
32
|
|
|
|
33
|
1
1. toCommonsPlus : removed call to java/util/List::sort → KILLED
|
cowsPerFarmer.sort(Comparator.naturalOrder()); |
|
34
|
|
Double averageCowsPerFarmer = null; |
|
35
|
|
Double medianCowsPerFarmer = null; |
|
36
|
|
Integer minimumCowsPerFarmer = null; |
|
37
|
|
Integer maximumCowsPerFarmer = null; |
|
38
|
|
Double standardDeviationCowsPerFarmer = null; |
|
39
|
|
|
|
40
|
1
1. toCommonsPlus : negated conditional → KILLED
|
if (!cowsPerFarmer.isEmpty()) { |
|
41
|
|
int count = cowsPerFarmer.size(); |
|
42
|
|
double sum = cowsPerFarmer.stream().mapToDouble(Integer::doubleValue).sum(); |
|
43
|
1
1. toCommonsPlus : Replaced double division with multiplication → KILLED
|
averageCowsPerFarmer = sum / count; |
|
44
|
|
minimumCowsPerFarmer = cowsPerFarmer.get(0); |
|
45
|
1
1. toCommonsPlus : Replaced integer subtraction with addition → KILLED
|
maximumCowsPerFarmer = cowsPerFarmer.get(count - 1); |
|
46
|
|
|
|
47
|
2
1. toCommonsPlus : Replaced integer modulus with multiplication → KILLED
2. toCommonsPlus : negated conditional → KILLED
|
if (count % 2 == 1) { |
|
48
|
1
1. toCommonsPlus : Replaced integer division with multiplication → KILLED
|
medianCowsPerFarmer = cowsPerFarmer.get(count / 2).doubleValue(); |
|
49
|
|
} else { |
|
50
|
5
1. toCommonsPlus : Replaced integer addition with subtraction → KILLED
2. toCommonsPlus : Replaced double division with multiplication → KILLED
3. toCommonsPlus : Replaced integer division with multiplication → KILLED
4. toCommonsPlus : Replaced integer subtraction with addition → KILLED
5. toCommonsPlus : Replaced integer division with multiplication → KILLED
|
medianCowsPerFarmer = (cowsPerFarmer.get((count / 2) - 1) + cowsPerFarmer.get(count / 2)) / 2.0; |
|
51
|
|
} |
|
52
|
|
|
|
53
|
|
final double averageForVariance = averageCowsPerFarmer; |
|
54
|
|
double variance = cowsPerFarmer.stream() |
|
55
|
2
1. lambda$toCommonsPlus$1 : Replaced double subtraction with addition → KILLED
2. lambda$toCommonsPlus$1 : replaced double return with 0.0d for edu/ucsb/cs156/happiercows/services/CommonsPlusBuilderService::lambda$toCommonsPlus$1 → KILLED
|
.mapToDouble((value) -> Math.pow(value - averageForVariance, 2)) |
|
56
|
1
1. toCommonsPlus : Replaced double division with multiplication → KILLED
|
.sum() / count; |
|
57
|
|
standardDeviationCowsPerFarmer = Math.sqrt(variance); |
|
58
|
|
} |
|
59
|
|
|
|
60
|
1
1. toCommonsPlus : replaced return value with null for edu/ucsb/cs156/happiercows/services/CommonsPlusBuilderService::toCommonsPlus → KILLED
|
return CommonsPlus.builder() |
|
61
|
|
.commons(c) |
|
62
|
|
.totalCows(numCows.orElse(0)) |
|
63
|
|
.totalUsers(numUsers.orElse(0)) |
|
64
|
|
.averageCowsPerFarmer(averageCowsPerFarmer) |
|
65
|
|
.medianCowsPerFarmer(medianCowsPerFarmer) |
|
66
|
|
.minimumCowsPerFarmer(minimumCowsPerFarmer) |
|
67
|
|
.maximumCowsPerFarmer(maximumCowsPerFarmer) |
|
68
|
|
.standardDeviationCowsPerFarmer(standardDeviationCowsPerFarmer) |
|
69
|
|
.build(); |
|
70
|
|
} |
|
71
|
|
|
|
72
|
|
|
|
73
|
|
public Iterable<CommonsPlus> convertToCommonsPlus(Iterable<Commons> iteOfCommons) { |
|
74
|
|
List<Commons> commonsList = new ArrayList<Commons>(); |
|
75
|
1
1. convertToCommonsPlus : removed call to java/lang/Iterable::forEach → KILLED
|
iteOfCommons.forEach(commonsList::add); |
|
76
|
|
|
|
77
|
1
1. lambda$convertToCommonsPlus$2 : replaced return value with null for edu/ucsb/cs156/happiercows/services/CommonsPlusBuilderService::lambda$convertToCommonsPlus$2 → KILLED
|
List<CommonsPlus> commonsPlusList = commonsList.stream().map((c) -> toCommonsPlus(c)).collect(Collectors.toList()); |
|
78
|
|
|
|
79
|
|
ArrayList<CommonsPlus> commonsPlusArrayList = new ArrayList<CommonsPlus>(commonsPlusList); |
|
80
|
|
|
|
81
|
1
1. convertToCommonsPlus : replaced return value with Collections.emptyList for edu/ucsb/cs156/happiercows/services/CommonsPlusBuilderService::convertToCommonsPlus → KILLED
|
return commonsPlusArrayList; |
|
82
|
|
} |
|
83
|
|
} |
| | Mutations |
| 31 |
|
1.1 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus_median_when_numUsers_is_even_and_users_are_unsorted()] removed call to java/lang/Iterable::forEach → KILLED
|
| 33 |
|
1.1 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus_median_when_numUsers_is_even_and_users_are_unsorted()] removed call to java/util/List::sort → KILLED
|
| 40 |
|
1.1 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus_withNoFarmers()] negated conditional → KILLED
|
| 43 |
|
1.1 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus()] Replaced double division with multiplication → KILLED
|
| 45 |
|
1.1 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus_median_when_numUsers_is_even_and_users_are_unsorted()] Replaced integer subtraction with addition → KILLED
|
| 47 |
|
1.1 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus()] Replaced integer modulus with multiplication → KILLED
2.2 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus_median_when_numUsers_is_even_and_users_are_unsorted()] negated conditional → KILLED
|
| 48 |
|
1.1 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus()] Replaced integer division with multiplication → KILLED
|
| 50 |
|
1.1 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus_median_when_numUsers_is_even_and_users_are_unsorted()] Replaced integer addition with subtraction → KILLED
2.2 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus_median_when_numUsers_is_even_and_users_are_unsorted()] Replaced double division with multiplication → KILLED
3.3 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus_median_when_numUsers_is_even_and_users_are_unsorted()] Replaced integer division with multiplication → KILLED
4.4 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus_median_when_numUsers_is_even_and_users_are_unsorted()] Replaced integer subtraction with addition → KILLED
5.5 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus_median_when_numUsers_is_even_and_users_are_unsorted()] Replaced integer division with multiplication → KILLED
|
| 55 |
|
1.1 Location : lambda$toCommonsPlus$1 Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus()] Replaced double subtraction with addition → KILLED
2.2 Location : lambda$toCommonsPlus$1 Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus()] replaced double return with 0.0d for edu/ucsb/cs156/happiercows/services/CommonsPlusBuilderService::lambda$toCommonsPlus$1 → KILLED
|
| 56 |
|
1.1 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus()] Replaced double division with multiplication → KILLED
|
| 60 |
|
1.1 Location : toCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_toCommonsPlus_withNoFarmers()] replaced return value with null for edu/ucsb/cs156/happiercows/services/CommonsPlusBuilderService::toCommonsPlus → KILLED
|
| 75 |
|
1.1 Location : convertToCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_convertToCommonsPlus()] removed call to java/lang/Iterable::forEach → KILLED
|
| 77 |
|
1.1 Location : lambda$convertToCommonsPlus$2 Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_convertToCommonsPlus()] replaced return value with null for edu/ucsb/cs156/happiercows/services/CommonsPlusBuilderService::lambda$convertToCommonsPlus$2 → KILLED
|
| 81 |
|
1.1 Location : convertToCommonsPlus Killed by : edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests.[engine:junit-jupiter]/[class:edu.ucsb.cs156.happiercows.services.CommonsPlusBuilderServiceTests]/[method:test_convertToCommonsPlus()] replaced return value with Collections.emptyList for edu/ucsb/cs156/happiercows/services/CommonsPlusBuilderService::convertToCommonsPlus → KILLED
|