IC tests: add infrastructure for K1/K2 lookups comparison

Adapt lookup tests to allow running K1 and K2 on the same testdata
and compare the lookups recorded.
This commit is contained in:
Ilya Chernikov
2024-02-26 11:04:59 +01:00
committed by Space Team
parent 684d0b8690
commit 1989e8f094
40 changed files with 838 additions and 73 deletions
@@ -15,7 +15,7 @@ Exit code: OK
Compiling files:
src/usages.kt
Exit code: COMPILATION_ERROR
Unresolved reference 'vala'.
Unresolved reference 'vara'.
Unresolved reference 'foo'.
Unresolved reference 'bar'.
Unresolved reference: vala
Unresolved reference: vara
Unresolved reference: foo
Unresolved reference: bar
@@ -0,0 +1,7 @@
package foo
import bar.*
/*p:foo*/fun <T : /*p:foo*/A?, B : /*p:foo p:kotlin.collections*/Iterable</*p:foo p:kotlin*/Number>, C, D> test()
where C : /*p:foo p:kotlin*/Number, C : /*p:foo p:kotlin*/Comparable</*p:foo p:kotlin*/Number>, D : B
{}
@@ -0,0 +1,21 @@
==== INITIAL BUILD ====
Compiling files:
src/bar.kt
src/constraints.kt
src/foo.kt
src/usages.kt
Exit code: OK
==== STEP 1 ====
Compiling files:
src/usages.kt
Exit code: OK
==== STEP 2 ====
Compiling files:
src/usages.kt
Exit code: COMPILATION_ERROR
Unresolved reference 'vala'.
Unresolved reference 'vara'.
Unresolved reference 'foo'.
Unresolved reference 'bar'.
@@ -0,0 +1,69 @@
package foo
/*p:foo*/class A {
val a = 1
var b = ""
val c: /*p:foo p:foo.A p:foo.A.Companion*/String
get() = /*p:foo.A*/b
var d: /*p:foo p:foo.A p:foo.A.Companion*/String = "ddd"
get() = field
set(v) { field = v }
fun foo() {
/*p:foo.A*/a
/*p:foo.A*/foo()
/*p:foo(A)*/this./*p:foo.A*/a
/*p:foo(A)*/this./*p:foo.A*/foo()
/*p:foo p:foo.A p:foo.A(getBAZ) p:foo.A(getBaz) p:foo.A.Companion p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/baz()
/*p:foo p:foo.A p:foo.A.Companion p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/Companion./*p:foo.A.Companion*/a
/*p:foo p:foo.A p:foo.A.Companion p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/O./*p:foo.A.O*/v = "OK"
}
class B {
val a = 1
companion object CO {
fun bar(a: /*p:foo p:foo.A p:foo.A.B p:foo.A.B.CO p:foo.A.Companion*/Int) {}
}
}
inner class C
companion object {
val a = 1
fun baz() {}
}
object O {
var v = "vvv"
}
}
/*p:foo*/interface I {
var a: /*p:foo p:foo.I*/Int
fun foo()
class NI
}
/*p:foo*/object Obj : /*p:foo*/I {
override var a = 1
override fun foo() {}
val b = 1
fun bar(): /*p:foo p:foo.Obj*/I = /*p:foo(I) p:kotlin(Nothing)*/null as /*p:foo p:foo.Obj*/I
}
/*p:foo*/enum class E {
X,
Y;
val a = 1
fun foo() {
/*p:foo.E*/a
/*p:foo p:foo.E p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/Y./*p:foo.E*/a
/*p:foo.E*/foo()
/*p:foo p:foo.E p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/X./*p:foo.E*/foo()
}
}
@@ -0,0 +1,50 @@
package foo
import bar.*
/*p:foo*/fun usages(i: /*p:foo*/I) /*p:foo(E)*/{
/*p:foo p:foo(invoke) p:foo.A.Companion(invoke)*/A()./*p:foo.A*/a
/*p:foo p:foo(invoke) p:foo.A.Companion(invoke)*/A()./*p:foo.A*/b
/*p:foo p:foo(invoke) p:foo.A.Companion(invoke)*/A()./*p:foo.A*/c
/*p:foo p:foo(invoke) p:foo.A.Companion(invoke)*/A()./*p:foo.A*/d = "new value"
/*p:foo p:foo(invoke) p:foo.A.Companion(invoke)*/A()./*p:foo.A*/foo()
/*p:foo*/A./*p:foo.A p:foo.A.B.CO(invoke) p:foo.A.Companion*/B()./*p:foo.A.B*/a
/*p:foo*/A./*p:foo.A*/B./*p:foo.A.B p:foo.A.B.CO*/bar(1)
/*p:foo*/A./*p:foo.A*/B./*p:foo.A.B*/CO./*p:foo.A.B.CO*/bar(1)
/*p:foo p:foo.A(Companion)*/A
/*p:foo*/A./*p:foo.A p:foo.A.Companion*/a
/*p:foo*/A./*p:foo.A p:foo.A.Companion*/baz()
/*p:foo p:foo.A(Companion)*/A./*p:foo.A p:foo.A.Companion*/Companion
/*p:foo*/A./*p:foo.A*/Companion./*p:foo.A.Companion*/baz()
/*p:foo p:foo.A(O)*/A./*p:foo.A p:foo.A.Companion*/O
/*p:foo*/A./*p:foo.A*/O./*p:foo.A.O*/v = "OK"
/*p:foo(I)*/i./*p:foo.I*/a = 2
/*p:foo*/Obj./*p:foo.Obj*/a
/*p:foo*/Obj./*p:foo.Obj*/foo()
var ii: /*p:foo*/I = /*p:foo*/Obj
/*p:foo(I)*/ii./*p:foo.I*/a
/*p:foo(I)*/ii./*p:foo.I*/foo()
/*p:foo*/Obj./*p:foo.Obj*/b
val iii = /*p:foo p:foo(I)*/Obj./*p:foo.Obj*/bar()
/*p:foo(I)*/iii./*p:foo.I*/foo()
/*p:bar p:foo p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/X
/*p:bar p:foo p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/X./*p:foo.E*/a
/*p:bar p:foo p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/Y./*p:foo.E*/foo()
/*p:bar p:foo p:java.lang p:kotlin p:kotlin(Array) p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/values()
/*p:bar p:foo p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/valueOf("")
}
/*p:foo*/fun classifiers(
a: /*p:foo*/A,
ab: /*p:foo*/A./*p:foo.A*/B,
ac: /*p:foo*/A./*p:foo.A*/C,
abCo: /*p:foo*/A./*p:foo.A*/B./*p:foo.A.B*/CO,
aCompanion: /*p:foo*/A./*p:foo.A*/Companion,
aO: /*p:foo*/A./*p:foo.A*/O,
i: /*p:foo*/I,
ni: /*p:foo*/I./*p:foo.I*/NI,
obj: /*p:foo*/Obj,
e: /*p:foo*/E
) {}
@@ -0,0 +1,54 @@
package foo
import bar.*
/*p:foo*/fun usages(i: /*p:foo*/I) {
/*p:foo p:foo(invoke) p:foo.A.Companion(invoke)*/A()./*p:foo.A*/a
/*p:foo p:foo(invoke) p:foo.A.Companion(invoke)*/A()./*p:foo.A*/b
/*p:foo p:foo(invoke) p:foo.A.Companion(invoke)*/A()./*p:foo.A*/c
/*p:foo p:foo(invoke) p:foo.A.Companion(invoke)*/A()./*p:foo.A*/d = "new value"
/*p:foo p:foo(invoke) p:foo.A.Companion(invoke)*/A()./*p:foo.A*/foo()
/*p:foo*/A./*p:foo.A p:foo.A.B.CO(invoke) p:foo.A.Companion*/B()./*p:foo.A.B*/a
/*p:foo*/A./*p:foo.A*/B./*p:foo.A.B p:foo.A.B.CO*/bar(1)
/*p:foo*/A./*p:foo.A*/B./*p:foo.A.B*/CO./*p:foo.A.B.CO*/bar(1)
/*p:foo p:foo.A(Companion)*/A
/*p:foo*/A./*p:foo.A p:foo.A.Companion*/a
/*p:foo*/A./*p:foo.A p:foo.A.Companion*/baz()
/*p:foo p:foo.A(Companion)*/A./*p:foo.A p:foo.A.Companion*/Companion
/*p:foo*/A./*p:foo.A*/Companion./*p:foo.A.Companion*/baz()
/*p:foo p:foo.A(O)*/A./*p:foo.A p:foo.A.Companion*/O
/*p:foo*/A./*p:foo.A*/O./*p:foo.A.O*/v = "OK"
/*p:foo*/A./*p:bar p:foo p:foo.A p:foo.A.Companion p:foo.A.Companion(getVALA) p:foo.A.Companion(getVala) p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/vala
/*p:foo*/A./*p:bar p:foo p:foo.A p:foo.A.Companion p:foo.A.Companion(getVARA) p:foo.A.Companion(getVara) p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/vara()
/*p:foo(I)*/i./*p:foo.I*/a = 2
/*p:foo*/Obj./*p:foo.Obj*/a
/*p:foo*/Obj./*p:foo.Obj*/foo()
var ii: /*p:foo*/I = /*p:foo*/Obj
/*p:foo(I)*/ii./*p:foo.I*/a
/*p:foo(I)*/ii./*p:foo.I*/foo()
/*p:foo*/Obj./*p:foo.Obj*/b
val iii = /*p:foo p:foo(I)*/Obj./*p:foo.Obj*/bar()
/*p:foo(I)*/iii./*p:foo.I*/foo()
/*p:bar p:foo p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/X
/*p:bar p:foo p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/X./*p:foo.E*/a
/*p:bar p:foo p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/Y./*p:foo.E*/foo()
/*p:bar p:foo p:java.lang p:kotlin p:kotlin(Array) p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/values()
/*p:bar p:foo p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/valueOf("")
/*p:bar p:foo p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/foo
/*p:bar p:foo p:java.lang p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.comparisons p:kotlin.io p:kotlin.jvm p:kotlin.ranges p:kotlin.sequences p:kotlin.text*/E./*p:foo.E*/bar()
}
/*p:foo*/fun classifiers(
a: /*p:foo*/A,
ab: /*p:foo*/A./*p:foo.A*/B,
ac: /*p:foo*/A./*p:foo.A*/C,
abCo: /*p:foo*/A./*p:foo.A*/B./*p:foo.A.B*/CO,
aCompanion: /*p:foo*/A./*p:foo.A*/Companion,
aO: /*p:foo*/A./*p:foo.A*/O,
i: /*p:foo*/I,
ni: /*p:foo*/I./*p:foo.I*/NI,
obj: /*p:foo*/Obj,
e: /*p:foo*/E
) {}