@@ -2,6 +2,7 @@ package com.kylecorry.sol.math.interpolation
22
33import com.kylecorry.sol.math.Vector2
44import org.junit.jupiter.api.Assertions.assertEquals
5+ import org.junit.jupiter.api.Assertions.assertTrue
56import org.junit.jupiter.api.Test
67
78class 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