Skip to content

Commit 30bc300

Browse files
committed
Update interpolation tests
1 parent 3f545b5 commit 30bc300

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed

src/test/kotlin/com/kylecorry/sol/math/interpolation/InterpolationTest.kt

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.kylecorry.sol.math.interpolation
22

33
import com.kylecorry.sol.math.Vector2
44
import org.junit.jupiter.api.Assertions.assertEquals
5+
import org.junit.jupiter.api.Assertions.assertTrue
56
import org.junit.jupiter.api.Test
67

78
class InterpolationTest {
@@ -31,4 +32,121 @@ class InterpolationTest {
3132
}
3233
}
3334

35+
@Test
36+
fun linearVector() {
37+
val point1 = Vector2(0f, 0f)
38+
val point2 = Vector2(2f, 4f)
39+
40+
assertEquals(0f, Interpolation.linear(0f, point1, point2), 0.0001f)
41+
assertEquals(2f, Interpolation.linear(1f, point1, point2), 0.0001f)
42+
assertEquals(4f, Interpolation.linear(2f, point1, point2), 0.0001f)
43+
assertEquals(1f, Interpolation.linear(0.5f, point1, point2), 0.0001f)
44+
val point3 = Vector2(-2f, -4f)
45+
val point4 = Vector2(2f, 4f)
46+
assertEquals(0f, Interpolation.linear(0f, point3, point4), 0.0001f)
47+
assertEquals(-2f, Interpolation.linear(-1f, point3, point4), 0.0001f)
48+
}
49+
50+
@Test
51+
fun linear() {
52+
assertEquals(0f, Interpolation.linear(0f, 0f, 0f, 2f, 4f), 0.0001f)
53+
assertEquals(2f, Interpolation.linear(1f, 0f, 0f, 2f, 4f), 0.0001f)
54+
assertEquals(4f, Interpolation.linear(2f, 0f, 0f, 2f, 4f), 0.0001f)
55+
assertEquals(1f, Interpolation.linear(0.5f, 0f, 0f, 2f, 4f), 0.0001f)
56+
assertEquals(6f, Interpolation.linear(3f, 0f, 0f, 2f, 4f), 0.0001f)
57+
assertEquals(-2f, Interpolation.linear(-1f, 0f, 0f, 2f, 4f), 0.0001f)
58+
assertEquals(5f, Interpolation.linear(1f, 0f, 5f, 2f, 5f), 0.0001f)
59+
assertEquals(50f, Interpolation.linear(1f, 0f, 0f, 2f, 100f), 0.0001f)
60+
}
61+
62+
@Test
63+
fun cubicVector() {
64+
val point0 = Vector2(0f, 0f)
65+
val point1 = Vector2(1f, 1f)
66+
val point2 = Vector2(2f, 4f)
67+
val point3 = Vector2(3f, 9f)
68+
69+
assertEquals(1f, Interpolation.cubic(1f, point0, point1, point2, point3), 0.0001f)
70+
assertEquals(4f, Interpolation.cubic(2f, point0, point1, point2, point3), 0.0001f)
71+
assertEquals(2.25f, Interpolation.cubic(1.5f, point0, point1, point2, point3), 0.0001f)
72+
}
73+
74+
@Test
75+
fun cubic() {
76+
assertEquals(1f, Interpolation.cubic(1f, 0f, 0f, 1f, 1f, 2f, 4f, 3f, 9f), 0.0001f)
77+
assertEquals(4f, Interpolation.cubic(2f, 0f, 0f, 1f, 1f, 2f, 4f, 3f, 9f), 0.0001f)
78+
assertEquals(2.25f, Interpolation.cubic(1.5f, 0f, 0f, 1f, 1f, 2f, 4f, 3f, 9f), 0.0001f)
79+
}
80+
81+
@Test
82+
fun interpolate() {
83+
// 3 points (quadratic interpolation)
84+
val xs = listOf(0f, 1f, 2f)
85+
val ys = listOf(0f, 1f, 4f)
86+
87+
assertEquals(0f, Interpolation.interpolate(0f, xs, ys), 0.0001f)
88+
assertEquals(1f, Interpolation.interpolate(1f, xs, ys), 0.0001f)
89+
assertEquals(4f, Interpolation.interpolate(2f, xs, ys), 0.0001f)
90+
assertEquals(0.25f, Interpolation.interpolate(0.5f, xs, ys), 0.0001f)
91+
92+
// 4 points (cubic interpolation)
93+
val xs2 = listOf(0f, 1f, 2f, 3f)
94+
val ys2 = listOf(0f, 1f, 8f, 27f)
95+
96+
assertEquals(0f, Interpolation.interpolate(0f, xs2, ys2), 0.0001f)
97+
assertEquals(1f, Interpolation.interpolate(1f, xs2, ys2), 0.0001f)
98+
assertEquals(8f, Interpolation.interpolate(2f, xs2, ys2), 0.0001f)
99+
assertEquals(27f, Interpolation.interpolate(3f, xs2, ys2), 0.0001f)
100+
assertEquals(0.125f, Interpolation.interpolate(0.5f, xs2, ys2), 0.001f)
101+
}
102+
103+
@Test
104+
fun getMultiplesBetweenFloat() {
105+
val result1 = Interpolation.getMultiplesBetween(0f, 10f, 2f)
106+
assertEquals(listOf(0f, 2f, 4f, 6f, 8f, 10f), result1)
107+
108+
val result2 = Interpolation.getMultiplesBetween(1f, 9f, 2f)
109+
assertEquals(listOf(2f, 4f, 6f, 8f), result2)
110+
111+
val result3 = Interpolation.getMultiplesBetween(0f, 2f, 0.5f)
112+
assertEquals(listOf(0f, 0.5f, 1f, 1.5f, 2f), result3)
113+
114+
val result4 = Interpolation.getMultiplesBetween(-5f, 5f, 2.5f)
115+
assertEquals(listOf(-5f, -2.5f, 0f, 2.5f, 5f), result4)
116+
117+
val result5 = Interpolation.getMultiplesBetween(0.1f, 0.4f, 1f)
118+
assertTrue(result5.isEmpty())
119+
120+
val result6 = Interpolation.getMultiplesBetween(2f, 2f, 1f)
121+
assertEquals(listOf(2f), result6)
122+
}
123+
124+
@Test
125+
fun getMultiplesBetweenDouble() {
126+
val result1 = Interpolation.getMultiplesBetween(0.0, 10.0, 2.0)
127+
assertEquals(listOf(0.0, 2.0, 4.0, 6.0, 8.0, 10.0), result1)
128+
129+
val result2 = Interpolation.getMultiplesBetween(1.0, 9.0, 2.0)
130+
assertEquals(listOf(2.0, 4.0, 6.0, 8.0), result2)
131+
132+
val result3 = Interpolation.getMultiplesBetween(0.0, 2.0, 0.5)
133+
assertEquals(listOf(0.0, 0.5, 1.0, 1.5, 2.0), result3)
134+
135+
val result4 = Interpolation.getMultiplesBetween(-5.0, 5.0, 2.5)
136+
assertEquals(listOf(-5.0, -2.5, 0.0, 2.5, 5.0), result4)
137+
138+
val result5 = Interpolation.getMultiplesBetween(0.1, 0.4, 1.0)
139+
assertTrue(result5.isEmpty())
140+
141+
val result6 = Interpolation.getMultiplesBetween(2.0, 2.0, 1.0)
142+
assertEquals(listOf(2.0), result6)
143+
144+
val result7 = Interpolation.getMultiplesBetween(0.0, 0.31, 0.1)
145+
assertEquals(4, result7.size)
146+
assertEquals(0.0, result7[0], 0.0001)
147+
assertEquals(0.1, result7[1], 0.0001)
148+
assertEquals(0.2, result7[2], 0.0001)
149+
assertEquals(0.3, result7[3], 0.0001)
150+
}
151+
34152
}

0 commit comments

Comments
 (0)