diff --git a/backend.native/tests/codegen/intrinsics/interop_convert.kt b/backend.native/tests/codegen/intrinsics/interop_convert.kt index df1259b761c..722428b53b6 100644 --- a/backend.native/tests/codegen/intrinsics/interop_convert.kt +++ b/backend.native/tests/codegen/intrinsics/interop_convert.kt @@ -17,4 +17,157 @@ fun testNI() { assertNull(signExtendShortToIntOrNull(4, false)) assertEquals(5, signExtendShortToIntOrNull(5, true)) -} \ No newline at end of file +} + +@Test +fun testConvertSimple() { + assertEquals(1, 257.convert()) + assertEquals(255u, (-1).convert()) + assertEquals(0, Long.MIN_VALUE.narrow()) + assertEquals(-1, Long.MAX_VALUE.narrow()) + assertEquals(-1L, (-1).signExtend()) +} + +@Test +fun convertAll() { + val values = mutableListOf() + for (value in listOf( + 0L, + Byte.MIN_VALUE.toLong(), Byte.MAX_VALUE.toLong(), UByte.MAX_VALUE.toLong(), + Short.MIN_VALUE.toLong(), Short.MAX_VALUE.toLong(), UShort.MAX_VALUE.toLong(), + Int.MIN_VALUE.toLong(), Int.MAX_VALUE.toLong(), UInt.MAX_VALUE.toLong(), + Long.MIN_VALUE.toLong(), Long.MAX_VALUE.toLong(), ULong.MAX_VALUE.toLong() + )) { + values.add(value - 1) + values.add(value) + values.add(value + 1) + } + + for (value in values) { + testConvertAll(value.toByte()) + testConvertAll(value.toUByte()) + testConvertAll(value.toShort()) + testConvertAll(value.toUShort()) + testConvertAll(value.toInt()) + testConvertAll(value.toUInt()) + testConvertAll(value.toLong()) + testConvertAll(value.toULong()) + } +} + +fun testConvertAll(value: Byte) { + assertEquals(value.toByte(), value.convert()) + assertEquals(value.toUByte(), value.convert()) + assertEquals(value.toShort(), value.convert()) + assertEquals(value.toUShort(), value.convert()) + assertEquals(value.toInt(), value.convert()) + assertEquals(value.toUInt(), value.convert()) + assertEquals(value.toLong(), value.convert()) + assertEquals(value.toULong(), value.convert()) + + assertEquals(value.toByte(), value.narrow()) + + assertEquals(value.toByte(), value.signExtend()) + assertEquals(value.toShort(), value.signExtend()) + assertEquals(value.toInt(), value.signExtend()) + assertEquals(value.toLong(), value.signExtend()) +} + +fun testConvertAll(value: Short) { + assertEquals(value.toByte(), value.convert()) + assertEquals(value.toUByte(), value.convert()) + assertEquals(value.toShort(), value.convert()) + assertEquals(value.toUShort(), value.convert()) + assertEquals(value.toInt(), value.convert()) + assertEquals(value.toUInt(), value.convert()) + assertEquals(value.toLong(), value.convert()) + assertEquals(value.toULong(), value.convert()) + + assertEquals(value.toByte(), value.narrow()) + assertEquals(value.toShort(), value.narrow()) + + assertEquals(value.toShort(), value.signExtend()) + assertEquals(value.toInt(), value.signExtend()) + assertEquals(value.toLong(), value.signExtend()) +} + +fun testConvertAll(value: Int) { + assertEquals(value.toByte(), value.convert()) + assertEquals(value.toUByte(), value.convert()) + assertEquals(value.toShort(), value.convert()) + assertEquals(value.toUShort(), value.convert()) + assertEquals(value.toInt(), value.convert()) + assertEquals(value.toUInt(), value.convert()) + assertEquals(value.toLong(), value.convert()) + assertEquals(value.toULong(), value.convert()) + + assertEquals(value.toByte(), value.narrow()) + assertEquals(value.toShort(), value.narrow()) + assertEquals(value.toInt(), value.narrow()) + + assertEquals(value.toInt(), value.signExtend()) + assertEquals(value.toLong(), value.signExtend()) +} + +fun testConvertAll(value: Long) { + assertEquals(value.toByte(), value.convert()) + assertEquals(value.toUByte(), value.convert()) + assertEquals(value.toShort(), value.convert()) + assertEquals(value.toUShort(), value.convert()) + assertEquals(value.toInt(), value.convert()) + assertEquals(value.toUInt(), value.convert()) + assertEquals(value.toLong(), value.convert()) + assertEquals(value.toULong(), value.convert()) + + assertEquals(value.toByte(), value.narrow()) + assertEquals(value.toShort(), value.narrow()) + assertEquals(value.toInt(), value.narrow()) + assertEquals(value.toLong(), value.narrow()) + + assertEquals(value.toLong(), value.signExtend()) +} + + +fun testConvertAll(value: UByte) { + assertEquals(value.toByte(), value.convert()) + assertEquals(value.toUByte(), value.convert()) + assertEquals(value.toShort(), value.convert()) + assertEquals(value.toUShort(), value.convert()) + assertEquals(value.toInt(), value.convert()) + assertEquals(value.toUInt(), value.convert()) + assertEquals(value.toLong(), value.convert()) + assertEquals(value.toULong(), value.convert()) +} + +fun testConvertAll(value: UShort) { + assertEquals(value.toByte(), value.convert()) + assertEquals(value.toUByte(), value.convert()) + assertEquals(value.toShort(), value.convert()) + assertEquals(value.toUShort(), value.convert()) + assertEquals(value.toInt(), value.convert()) + assertEquals(value.toUInt(), value.convert()) + assertEquals(value.toLong(), value.convert()) + assertEquals(value.toULong(), value.convert()) +} + +fun testConvertAll(value: UInt) { + assertEquals(value.toByte(), value.convert()) + assertEquals(value.toUByte(), value.convert()) + assertEquals(value.toShort(), value.convert()) + assertEquals(value.toUShort(), value.convert()) + assertEquals(value.toInt(), value.convert()) + assertEquals(value.toUInt(), value.convert()) + assertEquals(value.toLong(), value.convert()) + assertEquals(value.toULong(), value.convert()) +} + +fun testConvertAll(value: ULong) { + assertEquals(value.toByte(), value.convert()) + assertEquals(value.toUByte(), value.convert()) + assertEquals(value.toShort(), value.convert()) + assertEquals(value.toUShort(), value.convert()) + assertEquals(value.toInt(), value.convert()) + assertEquals(value.toUInt(), value.convert()) + assertEquals(value.toLong(), value.convert()) + assertEquals(value.toULong(), value.convert()) +}