94 lines
3.1 KiB
Kotlin
94 lines
3.1 KiB
Kotlin
/*
|
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
*/
|
|
|
|
package test.kotlinx.cinterop
|
|
|
|
import kotlin.test.*
|
|
import kotlinx.cinterop.Vector128
|
|
import kotlinx.cinterop.vectorOf
|
|
|
|
class VectorTest {
|
|
@Test
|
|
fun box() {
|
|
class Box(val value: Vector128)
|
|
|
|
val v = vectorOf(1f, 3.162f, 10f, 31f)
|
|
val box = Box(v)
|
|
assertEquals(v, box.value)
|
|
}
|
|
|
|
@Test
|
|
fun boxWithExtraFields() {
|
|
class Box(v: Vector128) {
|
|
val extraField: Int = 1
|
|
var value: Vector128 = v
|
|
}
|
|
|
|
val box = Box(vectorOf(0, 1, 2, 3))
|
|
assertEquals(vectorOf(0, 1, 2, 3), box.value)
|
|
box.value = vectorOf(0.1f, 1.1f, 2.1f, 3.1f)
|
|
assertEquals(vectorOf(0.1f, 1.1f, 2.1f, 3.1f), box.value)
|
|
}
|
|
|
|
@Test
|
|
fun getIntAt() {
|
|
val a = arrayOf(0, 1, 2, 3)
|
|
val v = vectorOf(a[0], a[1], a[2], a[3])
|
|
(0 until 4).forEach { assertEquals(a[it], v.getIntAt(it)) }
|
|
assertFailsWith<IndexOutOfBoundsException> { v.getIntAt(-1) }
|
|
assertFailsWith<IndexOutOfBoundsException> { v.getIntAt(4) }
|
|
}
|
|
|
|
@Test
|
|
fun getFloatAt() {
|
|
val a = arrayOf(1f, 3.162f, 10f, 31f)
|
|
val v = vectorOf(a[0], a[1], a[2], a[3])
|
|
(0 until 4).forEach { assertEquals(a[it], v.getFloatAt(it)) }
|
|
assertFailsWith<IndexOutOfBoundsException> { v.getFloatAt(-1) }
|
|
assertFailsWith<IndexOutOfBoundsException> { v.getFloatAt(4) }
|
|
}
|
|
|
|
@Test
|
|
fun getByteAt() {
|
|
val a = arrayOf(0, 1, 2, 3)
|
|
val v = vectorOf(a[0], a[1], a[2], a[3])
|
|
(0 until 4).forEach {
|
|
assertEquals(if (Platform.isLittleEndian) a[it].toByte() else 0, v.getByteAt(it * 4))
|
|
assertEquals(0, v.getByteAt(it * 4 + 1))
|
|
assertEquals(0, v.getByteAt(it * 4 + 2))
|
|
assertEquals(if (!Platform.isLittleEndian) a[it].toByte() else 0, v.getByteAt(it * 4 + 3))
|
|
}
|
|
assertFailsWith<IndexOutOfBoundsException> { v.getByteAt(-1) }
|
|
assertFailsWith<IndexOutOfBoundsException> { v.getByteAt(16) }
|
|
}
|
|
|
|
@Test
|
|
fun updateVector() {
|
|
var v = vectorOf(0, 1, 2, 3)
|
|
val a = arrayOf(1f, 3.162f, 10f, 31f)
|
|
// Used to be vector of ints, now a vector of floats.
|
|
v = vectorOf(a[0], a[1], a[2], a[3])
|
|
(0 until 4).forEach { assertEquals(a[it], v.getFloatAt(it)) }
|
|
}
|
|
|
|
@Test
|
|
fun testToString() {
|
|
val v = vectorOf(100, 1024, Int.MAX_VALUE, Int.MIN_VALUE)
|
|
assertEquals("(0x64, 0x400, 0x7fffffff, 0x80000000)", v.toString())
|
|
}
|
|
|
|
@Test
|
|
fun testEquals() {
|
|
assertNotEquals(vectorOf(-1f, 0f, 0f, -7f), vectorOf(1f, 4f, 3f, 7f))
|
|
assertNotEquals(vectorOf(-1f, 0f, 0f, -7f), Any())
|
|
assertEquals(vectorOf(-1f, 0f, 0f, -7f), vectorOf(-1f, 0f, 0f, -7f))
|
|
}
|
|
|
|
@Test
|
|
fun testHashCode() {
|
|
assertNotEquals(vectorOf(1f, 4f, 3f, 7f).hashCode(), vectorOf(3f, 7f, 1f, 4f).hashCode())
|
|
assertEquals(vectorOf(1f, 4f, 3f, 7f).hashCode(), vectorOf(1f, 4f, 3f, 7f).hashCode())
|
|
}
|
|
} |