abb5f55087
^KT-65777 fixed
254 lines
4.9 KiB
Kotlin
Vendored
254 lines
4.9 KiB
Kotlin
Vendored
// TARGET_BACKEND: WASM
|
|
// MODULE: main
|
|
// FILE: externals.kt
|
|
|
|
class C(val x: Int)
|
|
|
|
@JsExport
|
|
fun makeC(x: Int): JsReference<C> = C(x).toJsReference()
|
|
|
|
@JsExport
|
|
fun getX(c: JsReference<C>): Int = c.get().x
|
|
|
|
@JsExport
|
|
fun getString(s: String): String = "Test string $s";
|
|
|
|
@JsExport
|
|
fun isEven(x: Int): Boolean = x % 2 == 0
|
|
|
|
external interface EI
|
|
|
|
@JsExport
|
|
fun eiAsAny(ei: EI): JsReference<Any> = ei.toJsReference()
|
|
|
|
@JsExport
|
|
fun anyAsEI(any: JsReference<Any>): EI = any.get() as EI
|
|
|
|
@JsExport
|
|
fun provideUByte(): UByte = UByte.MAX_VALUE
|
|
|
|
@JsExport
|
|
fun provideNullableUByte(nullable: Boolean): UByte? = if (nullable) null else UByte.MAX_VALUE
|
|
|
|
@JsExport
|
|
fun consumeUByte(x: UByte) = x.toString()
|
|
|
|
@JsExport
|
|
fun consumeNullableUByte(x: UByte?) = x?.toString()
|
|
|
|
@JsExport
|
|
fun provideUShort(): UShort = UShort.MAX_VALUE
|
|
|
|
@JsExport
|
|
fun provideNullableUShort(nullable: Boolean): UShort? = if (nullable) null else UShort.MAX_VALUE
|
|
|
|
@JsExport
|
|
fun consumeUShort(x: UShort) = x.toString()
|
|
|
|
@JsExport
|
|
fun consumeNullableUShort(x: UShort?) = x?.toString()
|
|
|
|
@JsExport
|
|
fun provideUInt(): UInt = UInt.MAX_VALUE
|
|
|
|
@JsExport
|
|
fun provideNullableUInt(nullable: Boolean): UInt? = if (nullable) null else UInt.MAX_VALUE
|
|
|
|
@JsExport
|
|
fun consumeUInt(x: UInt) = x.toString()
|
|
|
|
@JsExport
|
|
fun consumeNullableUInt(x: UInt?) = x?.toString()
|
|
|
|
@JsExport
|
|
fun provideULong(): ULong = ULong.MAX_VALUE
|
|
|
|
@JsExport
|
|
fun provideNullableULong(nullable: Boolean): ULong? = if (nullable) null else ULong.MAX_VALUE
|
|
|
|
@JsExport
|
|
fun consumeULong(x: ULong) = x.toString()
|
|
|
|
@JsExport
|
|
fun consumeNullableULong(x: ULong?) = x?.toString()
|
|
|
|
fun box(): String = "OK"
|
|
|
|
// FILE: entry.mjs
|
|
|
|
import {
|
|
makeC,
|
|
getX,
|
|
getString,
|
|
isEven,
|
|
anyAsEI,
|
|
eiAsAny,
|
|
provideUByte,
|
|
provideUShort,
|
|
provideUInt,
|
|
provideULong,
|
|
provideNullableUByte,
|
|
provideNullableUShort,
|
|
provideNullableUInt,
|
|
provideNullableULong,
|
|
consumeUByte,
|
|
consumeNullableUByte,
|
|
consumeUShort,
|
|
consumeNullableUShort,
|
|
consumeUInt,
|
|
consumeNullableUInt,
|
|
consumeULong,
|
|
consumeNullableULong,
|
|
} from "./index.mjs"
|
|
|
|
const c = makeC(300);
|
|
if (getX(c) !== 300) {
|
|
throw "Fail 1";
|
|
}
|
|
|
|
if (getString("2") !== "Test string 2") {
|
|
throw "Fail 2";
|
|
}
|
|
|
|
if (isEven(31) !== false || isEven(10) !== true) {
|
|
throw "Fail 3";
|
|
}
|
|
|
|
if (anyAsEI(eiAsAny({x:10})).x !== 10) {
|
|
throw "Fail 4";
|
|
}
|
|
|
|
if (provideUByte() != 255) {
|
|
throw "Fail 5";
|
|
}
|
|
if (provideUShort() != 65535) {
|
|
throw "Fail 6";
|
|
}
|
|
if (provideUInt() != 4294967295) {
|
|
throw "Fail 7";
|
|
}
|
|
if (provideULong() != 18446744073709551615n) {
|
|
throw "Fail 8";
|
|
}
|
|
|
|
if (provideNullableUByte(false) != 255) {
|
|
throw "Fail 9";
|
|
}
|
|
if (provideNullableUByte(true) != null) {
|
|
throw "Fail 10";
|
|
}
|
|
if (provideNullableUShort(false) != 65535) {
|
|
throw "Fail 11";
|
|
}
|
|
if (provideNullableUShort(true) != null) {
|
|
throw "Fail 12";
|
|
}
|
|
if (provideNullableUInt(false) != 4294967295) {
|
|
throw "Fail 13";
|
|
}
|
|
if (provideNullableUInt(true) != null) {
|
|
throw "Fail 14";
|
|
}
|
|
if (provideNullableULong(false) != 18446744073709551615n) {
|
|
throw "Fail 15";
|
|
}
|
|
if (provideNullableULong(true) != null) {
|
|
throw "Fail 16";
|
|
}
|
|
|
|
if (consumeUByte(-1) != "255") {
|
|
throw "Fail 17";
|
|
}
|
|
if (consumeNullableUByte(-1) != "255") {
|
|
throw "Fail 18";
|
|
}
|
|
if (consumeNullableUByte(null) != null) {
|
|
throw "Fail 19";
|
|
}
|
|
|
|
if (consumeUShort(-1) != "65535") {
|
|
throw "Fail 20";
|
|
}
|
|
if (consumeNullableUShort(-1) != "65535") {
|
|
throw "Fail 21";
|
|
}
|
|
if (consumeNullableUShort(null) != null) {
|
|
throw "Fail 22";
|
|
}
|
|
|
|
if (consumeUInt(-1) != "4294967295") {
|
|
throw "Fail 23";
|
|
}
|
|
if (consumeNullableUInt(-1) != "4294967295") {
|
|
throw "Fail 24";
|
|
}
|
|
if (consumeNullableUInt(null) != null) {
|
|
throw "Fail 25";
|
|
}
|
|
|
|
if (consumeULong(-1n) != "18446744073709551615") {
|
|
throw "Fail 26";
|
|
}
|
|
if (consumeNullableULong(-1n) != "18446744073709551615") {
|
|
throw "Fail 27";
|
|
}
|
|
if (consumeNullableULong(null) != null) {
|
|
throw "Fail 28";
|
|
}
|
|
|
|
if (consumeUByte(255) != "255") {
|
|
throw "Fail 29";
|
|
}
|
|
if (consumeNullableUByte(255) != "255") {
|
|
throw "Fail 30";
|
|
}
|
|
|
|
if (consumeUShort(65535) != "65535") {
|
|
throw "Fail 31";
|
|
}
|
|
if (consumeNullableUShort(65535) != "65535") {
|
|
throw "Fail 32";
|
|
}
|
|
|
|
if (consumeUInt(4294967295) != "4294967295") {
|
|
throw "Fail 33";
|
|
}
|
|
if (consumeNullableUInt(4294967295) != "4294967295") {
|
|
throw "Fail 34";
|
|
}
|
|
|
|
if (consumeULong(18446744073709551615n) != "18446744073709551615") {
|
|
throw "Fail 35";
|
|
}
|
|
if (consumeNullableULong(18446744073709551615n) != "18446744073709551615") {
|
|
throw "Fail 36";
|
|
}
|
|
|
|
if (consumeUByte(256) != "0") {
|
|
throw "Fail 37";
|
|
}
|
|
if (consumeNullableUByte(256) != "0") {
|
|
throw "Fail 38";
|
|
}
|
|
|
|
if (consumeUShort(65536) != "0") {
|
|
throw "Fail 39";
|
|
}
|
|
if (consumeNullableUShort(65536) != "0") {
|
|
throw "Fail 40";
|
|
}
|
|
|
|
if (consumeUInt(4294967296) != "0") {
|
|
throw "Fail 41";
|
|
}
|
|
if (consumeNullableUInt(4294967296) != "0") {
|
|
throw "Fail 42";
|
|
}
|
|
|
|
if (consumeULong(18446744073709551616n) != "0") {
|
|
throw "Fail 43";
|
|
}
|
|
if (consumeNullableULong(18446744073709551616n) != "0") {
|
|
throw "Fail 44";
|
|
}
|