K2/Native: simplify forward declarations test to make it work with K2

This commit is contained in:
Svyatoslav Scherbina
2023-01-24 17:21:52 +01:00
committed by Space Team
parent f3ed006ed9
commit 445d44b79a
@@ -2,12 +2,13 @@
import cForwardDeclarationsTwoLibs1.*
import cForwardDeclarationsTwoLibs2.*
// Note: there are no practical cases for this type, but it works in K1 so better to have a test for this.
import cnames.structs.StructUndeclaredUndeclared
import cnames.structs.StructUndeclaredDeclared
import cnames.structs.StructDeclaredUndeclared
import cnames.structs.StructDeclaredDeclared
import kotlin.test.assertEquals
import kotlinx.cinterop.COpaque
import kotlinx.cinterop.CPointed
import kotlinx.cinterop.CStructVar
import kotlinx.cinterop.ptr
// The test should also check that these references can't be resolved, but the test infra doesn't support this yet:
@@ -17,15 +18,11 @@ import kotlinx.cinterop.ptr
// import cForwardDeclarationsTwoLibs2.StructUndeclaredUndeclared
// import cForwardDeclarationsTwoLibs2.StructDeclaredUndeclared
// import cForwardDeclarationsTwoLibs2.StructDefinedUndeclared
// import cnames.structs.StructUndeclaredUndeclared // Supported in K1 though.
fun <T1 : T2, T2> checkSubtype2() {}
fun <T1 : T2, T2 : T3, T3> checkSubtype3() {}
fun <T1 : T2, T2 : T3, T3 : T4, T4> checkSubtype4() {}
fun <T1 : T2, T2 : T3, T3 : T4, T4 : T5, T5> checkSubtype5() {}
fun <T1 : T2, T2 : T3, T3 : T4, T4 : T5, T5 : T6, T6> checkSubtype6() {}
// Here we rely on frontend reporting conflicting overloads if some of these types turn out to be the same.
fun checkDifferentTypes(s: StructUndeclaredUndeclared?) = 0
fun checkDifferentTypes(s: StructUndeclaredDeclared?) = 1
fun checkDifferentTypes(s: StructUndeclaredDefined?) = 2
fun checkDifferentTypes(s: StructDeclaredUndeclared?) = 3
@@ -37,85 +34,37 @@ fun checkDifferentTypes(s: cForwardDeclarationsTwoLibs1.StructDefinedDefined?) =
fun checkDifferentTypes(s: cForwardDeclarationsTwoLibs2.StructDefinedDefined?) = 9
fun main() {
// Checking it is the same type:
checkSubtype3<StructUndeclaredUndeclared, cnames.structs.StructUndeclaredUndeclared, StructUndeclaredUndeclared>()
checkSubtype2<StructUndeclaredUndeclared, COpaque>()
checkSubtype4<
StructUndeclaredDeclared,
cnames.structs.StructUndeclaredDeclared,
cForwardDeclarationsTwoLibs2.StructUndeclaredDeclared,
StructUndeclaredDeclared,
>()
checkSubtype2<StructUndeclaredDeclared, COpaque>()
checkSubtype4<
StructUndeclaredDefined,
cnames.structs.StructUndeclaredDefined,
cForwardDeclarationsTwoLibs2.StructUndeclaredDefined,
StructUndeclaredDefined
>()
checkSubtype2<StructUndeclaredDefined, CStructVar>()
checkSubtype4<
StructDeclaredUndeclared,
cnames.structs.StructDeclaredUndeclared,
cForwardDeclarationsTwoLibs1.StructDeclaredUndeclared,
StructDeclaredUndeclared
>()
checkSubtype2<StructDeclaredUndeclared, COpaque>()
checkSubtype5<
StructDeclaredDeclared,
cnames.structs.StructDeclaredDeclared,
cForwardDeclarationsTwoLibs1.StructDeclaredDeclared,
cForwardDeclarationsTwoLibs2.StructDeclaredDeclared,
StructDeclaredDeclared
>()
checkSubtype2<StructDeclaredDeclared, COpaque>()
checkSubtype5<
StructDeclaredDefined,
cnames.structs.StructDeclaredDefined,
cForwardDeclarationsTwoLibs1.StructDeclaredDefined,
cForwardDeclarationsTwoLibs2.StructDeclaredDefined,
StructDeclaredDefined
>()
checkSubtype2<cnames.structs.StructDeclaredDefined, CPointed>()
checkSubtype2<StructDeclaredDefined, CStructVar>()
checkSubtype4<
StructDefinedUndeclared,
cnames.structs.StructDefinedUndeclared,
cForwardDeclarationsTwoLibs1.StructDefinedUndeclared,
StructDefinedUndeclared
>()
checkSubtype2<StructDefinedUndeclared, CStructVar>()
checkSubtype5<
StructDefinedDeclared,
cnames.structs.StructDefinedDeclared,
cForwardDeclarationsTwoLibs1.StructDefinedDeclared,
cForwardDeclarationsTwoLibs2.StructDefinedDeclared,
StructDefinedDeclared
>()
checkSubtype2<cnames.structs.StructDefinedDeclared, CPointed>()
checkSubtype2<StructDefinedDeclared, CStructVar>()
checkSubtype2<cnames.structs.StructDefinedDefined, CStructVar>()
checkSubtype2<cForwardDeclarationsTwoLibs1.StructDefinedDefined, CStructVar>()
checkSubtype2<cForwardDeclarationsTwoLibs2.StructDefinedDefined, CStructVar>()
val undeclaredUndeclared: StructUndeclaredUndeclared? = null
val undeclaredDeclared: StructUndeclaredDeclared? = null
val undeclaredDefined: StructUndeclaredDefined? = null
val declaredUndeclared: StructDeclaredUndeclared? = null
val declaredDeclared: StructDeclaredDeclared? = null
val cnamesDeclaredDefined: cnames.structs.StructDeclaredDefined? = null
val declaredDefined: StructDeclaredDefined? = null
val definedUndeclared: StructDefinedUndeclared? = null
val cnamesDefinedDeclared: cnames.structs.StructDefinedDeclared? = null
val definedDeclared: StructDefinedDeclared? = null
val definedDefined1: cForwardDeclarationsTwoLibs1.StructDefinedDefined? = null
val definedDefined2: cForwardDeclarationsTwoLibs2.StructDefinedDefined? = null
assertEquals(0, checkDifferentTypes(undeclaredUndeclared))
assertEquals(1, checkDifferentTypes(undeclaredDeclared))
assertEquals(2, checkDifferentTypes(undeclaredDefined))
assertEquals(3, checkDifferentTypes(declaredUndeclared))
@@ -131,11 +80,11 @@ fun main() {
assertEquals(-3, use1StructDeclaredUndeclared(declaredUndeclared?.ptr))
assertEquals(-4, use1StructDeclaredDeclared(declaredDeclared?.ptr))
assertEquals(4, use2StructDeclaredDeclared(declaredDeclared?.ptr))
assertEquals(-5, use1StructDeclaredDefined(declaredDefined?.ptr))
assertEquals(-5, use1StructDeclaredDefined(cnamesDeclaredDefined?.ptr))
assertEquals(5, use2StructDeclaredDefined(declaredDefined?.ptr))
assertEquals(-6, use1StructDefinedUndeclared(definedUndeclared?.ptr))
assertEquals(-7, use1StructDefinedDeclared(definedDeclared?.ptr))
assertEquals(7, use2StructDefinedDeclared(definedDeclared?.ptr))
assertEquals(7, use2StructDefinedDeclared(cnamesDefinedDeclared?.ptr))
assertEquals(-8, use1StructDefinedDefined(definedDefined1?.ptr))
assertEquals(8, use2StructDefinedDefined(definedDefined2?.ptr))
}