@file:OptIn(ExperimentalForeignApi::class) import kotlin.test.* import kotlinx.cinterop.* fun box(): String { 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()) } return "OK" } 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()) }