1
|
|
package com.github.sanity.pav |
2
|
|
/** |
3
|
|
* Performs spline interpolation given a set of control points. |
4
|
|
* |
5
|
|
* This implementation converted from java from https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/util/MonotoneSpline.java |
6
|
|
* |
7
|
|
* Includes a fix for the following bug: https://code.google.com/p/android/issues/detail?id=222470 |
8
|
|
*/ |
9
|
|
class MonotoneSpline(private val xPoints: DoubleArray, private val yPoints: DoubleArray) { |
10
|
|
|
11
|
|
private val pointsWithTangents: DoubleArray |
12
|
|
|
13
|
|
init { |
14
|
3
1. : changed conditional boundary → SURVIVED
2. : negated conditional → KILLED
3. : negated conditional → KILLED
|
if (xPoints.size != yPoints.size || xPoints.size < 2) { |
15
|
|
throw IllegalArgumentException("There must be at least two control points and the arrays must be of equal length.") |
16
|
|
} |
17
|
|
val pointsCount = xPoints.size |
18
|
1
1. : Replaced integer subtraction with addition → SURVIVED
|
val d = DoubleArray(pointsCount - 1) // could optimize this out |
19
|
|
pointsWithTangents = DoubleArray(pointsCount) |
20
|
|
// Compute slopes of secant lines between successive points. |
21
|
6
1. : changed conditional boundary → SURVIVED
2. : negated conditional → SURVIVED
3. : negated conditional → SURVIVED
4. : Changed increment from 1 to -1 → KILLED
5. : Replaced integer subtraction with addition → KILLED
6. : Replaced integer subtraction with addition → KILLED
|
for (i in 0..pointsCount - 1 - 1) { |
22
|
2
1. : Replaced double subtraction with addition → SURVIVED
2. : Replaced integer addition with subtraction → KILLED
|
val h = xPoints[i + 1] - xPoints[i] |
23
|
2
1. : changed conditional boundary → SURVIVED
2. : negated conditional → KILLED
|
if (h <= 0f) { |
24
|
|
throw IllegalArgumentException("The control points must all have strictly increasing X values.") |
25
|
|
} |
26
|
3
1. : Replaced double subtraction with addition → SURVIVED
2. : Replaced double division with multiplication → SURVIVED
3. : Replaced integer addition with subtraction → KILLED
|
d[i] = (yPoints[i + 1] - yPoints[i]) / h |
27
|
|
} |
28
|
|
// Initialize the pointsWithTangents as the average of the secants. |
29
|
|
pointsWithTangents[0] = d[0] |
30
|
6
1. : changed conditional boundary → SURVIVED
2. : negated conditional → SURVIVED
3. : negated conditional → SURVIVED
4. : Changed increment from 1 to -1 → KILLED
5. : Replaced integer subtraction with addition → KILLED
6. : Replaced integer subtraction with addition → KILLED
|
for (i in 1..pointsCount - 1 - 1) { |
31
|
3
1. : Replaced double multiplication with division → SURVIVED
2. : Replaced integer subtraction with addition → KILLED
3. : Replaced double addition with subtraction → KILLED
|
pointsWithTangents[i] = (d[i - 1] + d[i]) * 0.5f |
32
|
|
} |
33
|
2
1. : Replaced integer subtraction with addition → KILLED
2. : Replaced integer subtraction with addition → KILLED
|
pointsWithTangents[pointsCount - 1] = d[pointsCount - 2] |
34
|
|
// Update the pointsWithTangents to preserve monotonicity. |
35
|
6
1. : changed conditional boundary → SURVIVED
2. : negated conditional → SURVIVED
3. : negated conditional → SURVIVED
4. : Changed increment from 1 to -1 → KILLED
5. : Replaced integer subtraction with addition → KILLED
6. : Replaced integer subtraction with addition → KILLED
|
for (i in 0..pointsCount - 1 - 1) { |
36
|
1
1. : negated conditional → SURVIVED
|
if (d[i] == 0.0) { |
37
|
|
// successive Y values are equal |
38
|
|
pointsWithTangents[i] = 0.0 |
39
|
1
1. : Replaced integer addition with subtraction → NO_COVERAGE
|
pointsWithTangents[i + 1] = 0.0 |
40
|
|
} else { |
41
|
1
1. : Replaced double division with multiplication → SURVIVED
|
val a = pointsWithTangents[i] / d[i] |
42
|
2
1. : Replaced double division with multiplication → SURVIVED
2. : Replaced integer addition with subtraction → KILLED
|
val b = pointsWithTangents[i + 1] / d[i] |
43
|
4
1. : changed conditional boundary → SURVIVED
2. : changed conditional boundary → SURVIVED
3. : negated conditional → KILLED
4. : negated conditional → KILLED
|
if (a < 0.0 || b < 0.0) { |
44
|
|
throw IllegalArgumentException("The control points must have monotonic Y values.") |
45
|
|
} |
46
|
|
val h = Math.hypot(a.toDouble(), b.toDouble()).toFloat() |
47
|
2
1. : changed conditional boundary → SURVIVED
2. : negated conditional → SURVIVED
|
if (h > 3.0) { |
48
|
1
1. : Replaced double division with multiplication → NO_COVERAGE
|
val t = 3.0 / h |
49
|
2
1. : Replaced double multiplication with division → NO_COVERAGE
2. : Replaced double multiplication with division → NO_COVERAGE
|
pointsWithTangents[i] = t * a * d[i] |
50
|
3
1. : Replaced integer addition with subtraction → NO_COVERAGE
2. : Replaced double multiplication with division → NO_COVERAGE
3. : Replaced double multiplication with division → NO_COVERAGE
|
pointsWithTangents[i + 1] = t * b * d[i] |
51
|
|
} |
52
|
|
} |
53
|
|
} |
54
|
|
} |
55
|
|
|
56
|
|
/** |
57
|
|
* Interpolates the value of Y = f(X) for given X. |
58
|
|
* Clamps X to the domain of the spline. |
59
|
|
|
60
|
|
* @param x The X value. |
61
|
|
* * |
62
|
|
* @return The interpolated Y = f(X) value. |
63
|
|
*/ |
64
|
|
fun interpolate(x: Double): Double { |
65
|
|
// Handle the boundary cases. |
66
|
|
val n = xPoints.size |
67
|
1
1. interpolate : negated conditional → KILLED
|
if (x.isNaN()) { |
68
|
1
1. interpolate : replaced return of double value with -(x + 1) for com/github/sanity/pav/MonotoneSpline::interpolate → NO_COVERAGE
|
return x |
69
|
|
} |
70
|
2
1. interpolate : changed conditional boundary → SURVIVED
2. interpolate : negated conditional → KILLED
|
if (x <= xPoints[0]) { |
71
|
1
1. interpolate : replaced return of double value with -(x + 1) for com/github/sanity/pav/MonotoneSpline::interpolate → KILLED
|
return yPoints[0] |
72
|
|
} |
73
|
3
1. interpolate : changed conditional boundary → KILLED
2. interpolate : Replaced integer subtraction with addition → KILLED
3. interpolate : negated conditional → KILLED
|
if (x >= xPoints[n - 1]) { |
74
|
2
1. interpolate : Replaced integer subtraction with addition → KILLED
2. interpolate : replaced return of double value with -(x + 1) for com/github/sanity/pav/MonotoneSpline::interpolate → KILLED
|
return yPoints[n - 1] |
75
|
|
} |
76
|
|
// Find the index 'i' of the last point with smaller X. |
77
|
|
// We know this will be within the spline due to the boundary tests. |
78
|
|
var i = 0 |
79
|
3
1. interpolate : changed conditional boundary → KILLED
2. interpolate : Replaced integer addition with subtraction → KILLED
3. interpolate : negated conditional → KILLED
|
while (x >= xPoints[i + 1]) { |
80
|
1
1. interpolate : Replaced integer addition with subtraction → KILLED
|
i += 1 |
81
|
1
1. interpolate : negated conditional → KILLED
|
if (x == yPoints[i]) { |
82
|
1
1. interpolate : replaced return of double value with -(x + 1) for com/github/sanity/pav/MonotoneSpline::interpolate → NO_COVERAGE
|
return yPoints[i] |
83
|
|
} |
84
|
|
} |
85
|
|
// Perform cubic Hermite spline interpolation. |
86
|
2
1. interpolate : Replaced double subtraction with addition → SURVIVED
2. interpolate : Replaced integer addition with subtraction → KILLED
|
val h = xPoints[i + 1] - xPoints[i] |
87
|
2
1. interpolate : Replaced double division with multiplication → SURVIVED
2. interpolate : Replaced double subtraction with addition → KILLED
|
val t = (x - xPoints[i]) / h |
88
|
23
1. interpolate : Replaced double addition with subtraction → SURVIVED
2. interpolate : Replaced double multiplication with division → SURVIVED
3. interpolate : Replaced double multiplication with division → SURVIVED
4. interpolate : Replaced double addition with subtraction → SURVIVED
5. interpolate : Replaced double subtraction with addition → SURVIVED
6. interpolate : Replaced double multiplication with division → SURVIVED
7. interpolate : Replaced double subtraction with addition → SURVIVED
8. interpolate : Replaced double multiplication with division → SURVIVED
9. interpolate : Replaced double subtraction with addition → SURVIVED
10. interpolate : Replaced double multiplication with division → SURVIVED
11. interpolate : Replaced double multiplication with division → SURVIVED
12. interpolate : Replaced double subtraction with addition → SURVIVED
13. interpolate : Replaced double multiplication with division → SURVIVED
14. interpolate : Replaced double addition with subtraction → SURVIVED
15. interpolate : Replaced double addition with subtraction → SURVIVED
16. interpolate : Replaced double multiplication with division → KILLED
17. interpolate : Replaced double multiplication with division → KILLED
18. interpolate : Replaced integer addition with subtraction → KILLED
19. interpolate : Replaced double multiplication with division → KILLED
20. interpolate : Replaced integer addition with subtraction → KILLED
21. interpolate : Replaced double multiplication with division → KILLED
22. interpolate : Replaced double multiplication with division → KILLED
23. interpolate : replaced return of double value with -(x + 1) for com/github/sanity/pav/MonotoneSpline::interpolate → KILLED
|
return (yPoints[i] * (1 + 2 * t) + h * pointsWithTangents[i] * t) * (1 - t) * (1 - t) + (pointsWithTangents[i + 1] * (3 - 2 * t) + h * pointsWithTangents[i + 1] * (t - 1)) * t * t |
89
|
|
} |
90
|
|
|
91
|
|
// For debugging. |
92
|
|
override fun toString(): String { |
93
|
|
val str = StringBuilder() |
94
|
|
val n = xPoints.size |
95
|
|
str.append("[") |
96
|
5
1. toString : changed conditional boundary → NO_COVERAGE
2. toString : Changed increment from 1 to -1 → NO_COVERAGE
3. toString : Replaced integer subtraction with addition → NO_COVERAGE
4. toString : negated conditional → NO_COVERAGE
5. toString : negated conditional → NO_COVERAGE
|
for (i in 0..n - 1) { |
97
|
1
1. toString : negated conditional → NO_COVERAGE
|
if (i != 0) { |
98
|
|
str.append(", ") |
99
|
|
} |
100
|
|
str.append("(").append(xPoints[i]) |
101
|
|
str.append(", ").append(yPoints[i]) |
102
|
|
str.append(": ").append(pointsWithTangents[i]).append(")") |
103
|
|
} |
104
|
|
str.append("]") |
105
|
2
1. toString : mutated return of Object value for com/github/sanity/pav/MonotoneSpline::toString to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE
2. toString : removed call to kotlin/jvm/internal/Intrinsics::checkExpressionValueIsNotNull → NO_COVERAGE
|
return str.toString() |
106
|
|
} |
107
|
|
|
108
|
|
companion object { |
109
|
|
/** |
110
|
|
* Creates a monotone cubic spline from a given set of control points. |
111
|
|
|
112
|
|
* The spline is guaranteed to pass through each control point exactly. |
113
|
|
* Moreover, assuming the control points are monotonic (Y is non-decreasing or |
114
|
|
* non-increasing) then the interpolated values will also be monotonic. |
115
|
|
|
116
|
|
* This function uses the Fritsch-Carlson method for computing the spline parameters. |
117
|
|
* http://en.wikipedia.org/wiki/Monotone_cubic_interpolation |
118
|
|
|
119
|
|
* @param x The X component of the control points, strictly increasing. |
120
|
|
* * |
121
|
|
* @param y The Y component of the control points, monotonic. |
122
|
|
* * |
123
|
|
* @return |
124
|
|
* * |
125
|
|
* * |
126
|
|
* @throws IllegalArgumentException if the X or Y arrays are null, have |
127
|
|
* * different lengths or have fewer than 2 values. |
128
|
|
* * |
129
|
|
* @throws IllegalArgumentException if the control points are not monotonic. |
130
|
|
*/ |
131
|
|
|
132
|
|
} |
133
|
|
} |
| | Mutations |
14 |
|
1.1 Location : Killed by : none changed conditional boundary → SURVIVED 2.2 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec negated conditional → KILLED 3.3 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec negated conditional → KILLED
|
18 |
|
1.1 Location : Killed by : none Replaced integer subtraction with addition → SURVIVED
|
21 |
|
1.1 Location : Killed by : none changed conditional boundary → SURVIVED 2.2 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Changed increment from 1 to -1 → KILLED 3.3 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer subtraction with addition → KILLED 4.4 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer subtraction with addition → KILLED 5.5 Location : Killed by : none negated conditional → SURVIVED 6.6 Location : Killed by : none negated conditional → SURVIVED
|
22 |
|
1.1 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer addition with subtraction → KILLED 2.2 Location : Killed by : none Replaced double subtraction with addition → SURVIVED
|
23 |
|
1.1 Location : Killed by : none changed conditional boundary → SURVIVED 2.2 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec negated conditional → KILLED
|
26 |
|
1.1 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer addition with subtraction → KILLED 2.2 Location : Killed by : none Replaced double subtraction with addition → SURVIVED 3.3 Location : Killed by : none Replaced double division with multiplication → SURVIVED
|
30 |
|
1.1 Location : Killed by : none changed conditional boundary → SURVIVED 2.2 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Changed increment from 1 to -1 → KILLED 3.3 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer subtraction with addition → KILLED 4.4 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer subtraction with addition → KILLED 5.5 Location : Killed by : none negated conditional → SURVIVED 6.6 Location : Killed by : none negated conditional → SURVIVED
|
31 |
|
1.1 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer subtraction with addition → KILLED 2.2 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced double addition with subtraction → KILLED 3.3 Location : Killed by : none Replaced double multiplication with division → SURVIVED
|
33 |
|
1.1 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer subtraction with addition → KILLED 2.2 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer subtraction with addition → KILLED
|
35 |
|
1.1 Location : Killed by : none changed conditional boundary → SURVIVED 2.2 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Changed increment from 1 to -1 → KILLED 3.3 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer subtraction with addition → KILLED 4.4 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer subtraction with addition → KILLED 5.5 Location : Killed by : none negated conditional → SURVIVED 6.6 Location : Killed by : none negated conditional → SURVIVED
|
36 |
|
1.1 Location : Killed by : none negated conditional → SURVIVED
|
39 |
|
1.1 Location : Killed by : none Replaced integer addition with subtraction → NO_COVERAGE
|
41 |
|
1.1 Location : Killed by : none Replaced double division with multiplication → SURVIVED
|
42 |
|
1.1 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer addition with subtraction → KILLED 2.2 Location : Killed by : none Replaced double division with multiplication → SURVIVED
|
43 |
|
1.1 Location : Killed by : none changed conditional boundary → SURVIVED 2.2 Location : Killed by : none changed conditional boundary → SURVIVED 3.3 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec negated conditional → KILLED 4.4 Location : Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec negated conditional → KILLED
|
47 |
|
1.1 Location : Killed by : none changed conditional boundary → SURVIVED 2.2 Location : Killed by : none negated conditional → SURVIVED
|
48 |
|
1.1 Location : Killed by : none Replaced double division with multiplication → NO_COVERAGE
|
49 |
|
1.1 Location : Killed by : none Replaced double multiplication with division → NO_COVERAGE 2.2 Location : Killed by : none Replaced double multiplication with division → NO_COVERAGE
|
50 |
|
1.1 Location : Killed by : none Replaced integer addition with subtraction → NO_COVERAGE 2.2 Location : Killed by : none Replaced double multiplication with division → NO_COVERAGE 3.3 Location : Killed by : none Replaced double multiplication with division → NO_COVERAGE
|
67 |
|
1.1 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec negated conditional → KILLED
|
68 |
|
1.1 Location : interpolate Killed by : none replaced return of double value with -(x + 1) for com/github/sanity/pav/MonotoneSpline::interpolate → NO_COVERAGE
|
70 |
|
1.1 Location : interpolate Killed by : none changed conditional boundary → SURVIVED 2.2 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec negated conditional → KILLED
|
71 |
|
1.1 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec replaced return of double value with -(x + 1) for com/github/sanity/pav/MonotoneSpline::interpolate → KILLED
|
73 |
|
1.1 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec changed conditional boundary → KILLED 2.2 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer subtraction with addition → KILLED 3.3 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec negated conditional → KILLED
|
74 |
|
1.1 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer subtraction with addition → KILLED 2.2 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec replaced return of double value with -(x + 1) for com/github/sanity/pav/MonotoneSpline::interpolate → KILLED
|
79 |
|
1.1 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec changed conditional boundary → KILLED 2.2 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer addition with subtraction → KILLED 3.3 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec negated conditional → KILLED
|
80 |
|
1.1 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer addition with subtraction → KILLED
|
81 |
|
1.1 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec negated conditional → KILLED
|
82 |
|
1.1 Location : interpolate Killed by : none replaced return of double value with -(x + 1) for com/github/sanity/pav/MonotoneSpline::interpolate → NO_COVERAGE
|
86 |
|
1.1 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer addition with subtraction → KILLED 2.2 Location : interpolate Killed by : none Replaced double subtraction with addition → SURVIVED
|
87 |
|
1.1 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced double subtraction with addition → KILLED 2.2 Location : interpolate Killed by : none Replaced double division with multiplication → SURVIVED
|
88 |
|
1.1 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced double multiplication with division → KILLED 2.2 Location : interpolate Killed by : none Replaced double addition with subtraction → SURVIVED 3.3 Location : interpolate Killed by : none Replaced double multiplication with division → SURVIVED 4.4 Location : interpolate Killed by : none Replaced double multiplication with division → SURVIVED 5.5 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced double multiplication with division → KILLED 6.6 Location : interpolate Killed by : none Replaced double addition with subtraction → SURVIVED 7.7 Location : interpolate Killed by : none Replaced double subtraction with addition → SURVIVED 8.8 Location : interpolate Killed by : none Replaced double multiplication with division → SURVIVED 9.9 Location : interpolate Killed by : none Replaced double subtraction with addition → SURVIVED 10.10 Location : interpolate Killed by : none Replaced double multiplication with division → SURVIVED 11.11 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer addition with subtraction → KILLED 12.12 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced double multiplication with division → KILLED 13.13 Location : interpolate Killed by : none Replaced double subtraction with addition → SURVIVED 14.14 Location : interpolate Killed by : none Replaced double multiplication with division → SURVIVED 15.15 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced integer addition with subtraction → KILLED 16.16 Location : interpolate Killed by : none Replaced double multiplication with division → SURVIVED 17.17 Location : interpolate Killed by : none Replaced double subtraction with addition → SURVIVED 18.18 Location : interpolate Killed by : none Replaced double multiplication with division → SURVIVED 19.19 Location : interpolate Killed by : none Replaced double addition with subtraction → SURVIVED 20.20 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced double multiplication with division → KILLED 21.21 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec Replaced double multiplication with division → KILLED 22.22 Location : interpolate Killed by : none Replaced double addition with subtraction → SURVIVED 23.23 Location : interpolate Killed by : com.github.sanity.pav.PairAdjacentViolatorsSpec.com.github.sanity.pav.PairAdjacentViolatorsSpec replaced return of double value with -(x + 1) for com/github/sanity/pav/MonotoneSpline::interpolate → KILLED
|
96 |
|
1.1 Location : toString Killed by : none changed conditional boundary → NO_COVERAGE 2.2 Location : toString Killed by : none Changed increment from 1 to -1 → NO_COVERAGE 3.3 Location : toString Killed by : none Replaced integer subtraction with addition → NO_COVERAGE 4.4 Location : toString Killed by : none negated conditional → NO_COVERAGE 5.5 Location : toString Killed by : none negated conditional → NO_COVERAGE
|
97 |
|
1.1 Location : toString Killed by : none negated conditional → NO_COVERAGE
|
105 |
|
1.1 Location : toString Killed by : none mutated return of Object value for com/github/sanity/pav/MonotoneSpline::toString to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE 2.2 Location : toString Killed by : none removed call to kotlin/jvm/internal/Intrinsics::checkExpressionValueIsNotNull → NO_COVERAGE
|