Skip to content

Commit 42c9188

Browse files
committed
[test:] add jni test
1 parent 256536e commit 42c9188

File tree

2 files changed

+165
-0
lines changed

2 files changed

+165
-0
lines changed
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package org.jetbrains.kotlinx.multik.jni.linalg
2+
3+
import org.jetbrains.kotlinx.multik.api.mk
4+
import org.jetbrains.kotlinx.multik.api.ndarray
5+
import org.jetbrains.kotlinx.multik.jni.Loader
6+
import org.jetbrains.kotlinx.multik.jni.NativeLinAlg
7+
import kotlin.test.BeforeTest
8+
import kotlin.test.Test
9+
import kotlin.test.assertEquals
10+
11+
class NativeLinAlgTest {
12+
13+
@BeforeTest
14+
fun load() {
15+
Loader("multik_jni").manualLoad()
16+
}
17+
18+
@Test
19+
fun `matrix-matrix dot test D`() {
20+
val expected = mk.ndarray(
21+
mk[mk[1.0718999999999999, 0.6181, 0.46080000000000004, 0.48109999999999997],
22+
mk[0.8210999999999999, 0.7162, 0.79, 0.8199],
23+
mk[0.5287999999999999, 0.48339999999999994, 0.5342, 0.5082],
24+
mk[1.0353, 0.758, 0.7114, 0.6647]]
25+
)
26+
val matrix1 = mk.ndarray(
27+
mk[mk[0.22, 0.9, 0.27],
28+
mk[0.97, 0.18, 0.59],
29+
mk[0.29, 0.13, 0.59],
30+
mk[0.08, 0.63, 0.8]]
31+
)
32+
val matrix2 = mk.ndarray(
33+
mk[mk[0.36, 0.31, 0.36, 0.44],
34+
mk[0.95, 0.44, 0.22, 0.25],
35+
mk[0.51, 0.57, 0.68, 0.59]]
36+
)
37+
38+
val actual = NativeLinAlg.dot(matrix1, matrix2)
39+
assertEquals(expected, actual)
40+
}
41+
42+
@Test
43+
fun `matrix-matrix dot test F`() {
44+
val expected = mk.ndarray(
45+
mk[mk[1.0719f, 0.6181f, 0.4608f, 0.4811f],
46+
mk[0.8211f, 0.7162f, 0.79f, 0.8199f],
47+
mk[0.52879995f, 0.48339996f, 0.5342f, 0.5082f],
48+
mk[1.0353f, 0.758f, 0.71140003f, 0.6647f]]
49+
)
50+
val matrix1 = mk.ndarray(
51+
mk[mk[0.22f, 0.9f, 0.27f],
52+
mk[0.97f, 0.18f, 0.59f],
53+
mk[0.29f, 0.13f, 0.59f],
54+
mk[0.08f, 0.63f, 0.8f]]
55+
)
56+
val matrix2 = mk.ndarray(
57+
mk[mk[0.36f, 0.31f, 0.36f, 0.44f],
58+
mk[0.95f, 0.44f, 0.22f, 0.25f],
59+
mk[0.51f, 0.57f, 0.68f, 0.59f]]
60+
)
61+
62+
val actual = NativeLinAlg.dot(matrix1, matrix2)
63+
assertEquals(expected, actual)
64+
}
65+
66+
@Test
67+
fun `matrix-vector dot test D`() {
68+
val expected = mk.ndarray(mk[0.8006, 0.663, 0.5771])
69+
70+
val matrix = mk.ndarray(
71+
mk[mk[0.22, 0.9, 0.27],
72+
mk[0.97, 0.18, 0.59],
73+
mk[0.29, 0.13, 0.59]]
74+
)
75+
val vector = mk.ndarray(mk[0.08, 0.63, 0.8])
76+
77+
val actual = NativeLinAlg.dot(matrix, vector)
78+
assertEquals(expected, actual)
79+
}
80+
81+
@Test
82+
fun `matrix-vector dot test F`() {
83+
val expected = mk.ndarray(mk[0.8006f, 0.663f, 0.5771f])
84+
85+
val matrix = mk.ndarray(
86+
mk[mk[0.22f, 0.9f, 0.27f],
87+
mk[0.97f, 0.18f, 0.59f],
88+
mk[0.29f, 0.13f, 0.59f]]
89+
)
90+
val vector = mk.ndarray(mk[0.08f, 0.63f, 0.8f])
91+
92+
val actual = NativeLinAlg.dot(matrix, vector)
93+
assertEquals(expected, actual)
94+
}
95+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package org.jetbrains.kotlinx.multik.jni.math
2+
3+
import org.jetbrains.kotlinx.multik.api.mk
4+
import org.jetbrains.kotlinx.multik.api.ndarray
5+
import org.jetbrains.kotlinx.multik.jni.Loader
6+
import org.jetbrains.kotlinx.multik.jni.NativeMath
7+
import org.jetbrains.kotlinx.multik.ndarray.data.D2
8+
import org.jetbrains.kotlinx.multik.ndarray.data.NDArray
9+
import kotlin.test.BeforeTest
10+
import kotlin.test.Test
11+
import kotlin.test.assertEquals
12+
13+
class NativeMathTest {
14+
15+
val ndarray: NDArray<Float, D2> = mk.ndarray(mk[mk[5.7f, 1.08f], mk[9.12f, 3.55f]])
16+
17+
@BeforeTest
18+
fun load() {
19+
Loader("multik_jni").manualLoad()
20+
}
21+
22+
@Test
23+
fun argMaxTest() {
24+
assertEquals(2, NativeMath.argMax(ndarray))
25+
}
26+
27+
@Test
28+
fun argMinTest() {
29+
assertEquals(1, NativeMath.argMin(ndarray))
30+
}
31+
32+
@Test
33+
fun expTest() {
34+
val expected = mk.ndarray(mk[mk[298.8673439626328, 2.9446796774374633], mk[9136.200570869447, 34.813315827573724]])
35+
assertEquals(expected, NativeMath.exp(ndarray))
36+
}
37+
38+
@Test
39+
fun logTest() {
40+
val expected = mk.ndarray(mk[mk[1.7404661413782472, 0.07696108087255739], mk[2.2104697915378937, 1.2669475900552918]])
41+
assertEquals(expected, NativeMath.log(ndarray))
42+
}
43+
44+
@Test
45+
fun sinTest() {
46+
val expected = mk.ndarray(mk[mk[-0.5506857018064566, 0.8819578271121656], mk[0.300081485531831, -0.39714812352401446]])
47+
assertEquals(expected, NativeMath.sin(ndarray))
48+
}
49+
50+
@Test
51+
fun cosTest() {
52+
val expected = mk.ndarray(mk[mk[0.8347126798042128, 0.47132832632421673], mk[-0.9539135715781643, -0.9177545249037752]])
53+
assertEquals(expected, NativeMath.cos(ndarray))
54+
}
55+
56+
@Test
57+
fun maxTest() {
58+
assertEquals(9.12f, NativeMath.max(ndarray))
59+
}
60+
61+
@Test
62+
fun minTest() {
63+
assertEquals(1.08f, NativeMath.min(ndarray))
64+
}
65+
66+
@Test
67+
fun sumTest() {
68+
assertEquals(19.449999f, NativeMath.sum(ndarray))
69+
}
70+
}

0 commit comments

Comments
 (0)