[Test] Move test on modern jdk to separate test runners

This is needed to avoid problems with installation of proper jdk
  on developer machines. Those tests will be moved back to main box
  suites after migrating our tests on LTS versions of jdk (11 and 17
  instead of 9 and 15)
This commit is contained in:
Dmitriy Novozhilov
2021-07-15 16:10:41 +03:00
committed by teamcityserver
parent 89bd52c7d2
commit 1fa74ef939
31 changed files with 394 additions and 497 deletions
@@ -1 +0,0 @@
<modernJava>
@@ -1,30 +0,0 @@
// !API_VERSION: 1.5
// !LANGUAGE: +JvmRecordSupport
// ENABLE_JVM_PREVIEW
// FILE: JavaClass.java
public class JavaClass {
public static String box() {
MyRec m = new MyRec<String>("O", "K");
return m.x() + m.y();
}
}
// FILE: main.kt
@JvmRecord
data class MyRec<R>(val x: String, val y: R)
fun box(): String {
val recordComponents = MyRec::class.java.recordComponents
val x = recordComponents[0]
val y = recordComponents[1]
if (x.name != "x") return "fail 1: ${x.name}"
if (x.type != String::class.java) return "fail 2: ${x.type}"
if (x.genericSignature != null) return "fail 3: ${x.genericSignature}"
if (y.name != "y") return "fail 4: ${y.name}"
if (y.type != Any::class.java) return "fail 5: ${y.type}"
if (y.genericSignature != "TR;") return "fail 6: ${y.genericSignature}"
return JavaClass.box()
}
@@ -1,34 +0,0 @@
// !API_VERSION: 1.5
// !LANGUAGE: +JvmRecordSupport
// ENABLE_JVM_PREVIEW
@JvmRecord
data class MyRec(override val size: Int) : Collection<String> {
override fun contains(element: String): Boolean {
TODO("Not yet implemented")
}
override fun containsAll(elements: Collection<String>): Boolean {
TODO("Not yet implemented")
}
override fun isEmpty(): Boolean {
TODO("Not yet implemented")
}
override fun iterator(): Iterator<String> {
TODO("Not yet implemented")
}
}
fun box(m: MyRec, c: Collection<*>): String {
val c: Collection<*> = m
if (m.size != 56) return "fail 1"
if (c.size != 56) return "fail 2"
return "OK"
}
fun box(): String {
val m = MyRec(56)
return box(m, m)
}
@@ -1,17 +0,0 @@
// !API_VERSION: 1.5
// !LANGUAGE: +JvmRecordSupport
// ENABLE_JVM_PREVIEW
@JvmRecord
data class MyRec<R>(val x: String, val y: R)
fun box(): String {
val m1 = MyRec("O", "K")
val m2 = MyRec("O", "K")
if (m1 != m2) return "fail 1"
if (m1.hashCode() != m2.hashCode()) return "fail 2"
if (m1.toString() != "MyRec(x=O, y=K)") return "fail 3: $m1"
return "OK"
}
@@ -1,16 +0,0 @@
// !API_VERSION: 1.5
// !LANGUAGE: +JvmRecordSupport
// ENABLE_JVM_PREVIEW
// MODULE: lib
// FILE: A.kt
@JvmRecord
data class MyRecord(val foo: String, val bar: String)
// MODULE: main(lib)
// FILE: B.kt
fun box(): String {
val myRecord = MyRecord("O", "K")
return myRecord.foo + myRecord.bar
}
@@ -1,27 +0,0 @@
// !API_VERSION: 1.5
// !LANGUAGE: +JvmRecordSupport
// ENABLE_JVM_PREVIEW
// FILE: JavaClass.java
public class JavaClass {
public static String box() {
MyRec m = new MyRec<String>("O", "K");
KI<String> ki = m;
return m.x() + m.y() + ki.getX() + ki.getY();
}
}
// FILE: main.kt
interface KI<T> {
val x: String get() = ""
val y: T
}
@JvmRecord
data class MyRec<R>(override val x: String, override val y: R) : KI<R>
fun box(): String {
val res = JavaClass.box()
if (res != "OKOK") return "fail 1: $res"
return "OK"
}
@@ -1,28 +0,0 @@
// !API_VERSION: 1.5
// !LANGUAGE: +JvmRecordSupport
// ENABLE_JVM_PREVIEW
// !JVM_DEFAULT_MODE: all-compatibility
// FILE: JavaClass.java
public class JavaClass {
public static String box() {
MyRec m = new MyRec<String>("O", "K");
KI<String> ki = m;
return m.x() + m.y() + ki.getX() + ki.getY();
}
}
// FILE: main.kt
interface KI<T> {
val x: String get() = ""
val y: T
}
@JvmRecord
data class MyRec<R>(override val x: String, override val y: R) : KI<R>
fun box(): String {
val res = JavaClass.box()
if (res != "OKOK") return "fail 1: $res"
return "OK"
}
@@ -1,28 +0,0 @@
// !API_VERSION: 1.5
// !LANGUAGE: +JvmRecordSupport
// ENABLE_JVM_PREVIEW
// !JVM_DEFAULT_MODE: enable
// FILE: JavaClass.java
public class JavaClass {
public static String box() {
MyRec m = new MyRec<String>("O", "K");
KI<String> ki = m;
return m.x() + m.y() + ki.getX() + ki.getY();
}
}
// FILE: main.kt
interface KI<T> {
val x: String get() = ""
val y: T
}
@JvmRecord
data class MyRec<R>(override val x: String, override val y: R) : KI<R>
fun box(): String {
val res = JavaClass.box()
if (res != "OKOK") return "fail 1: $res"
return "OK"
}
@@ -1,21 +0,0 @@
// ENABLE_JVM_PREVIEW
// FILE: MyRec.java
public record MyRec(String name) implements KI {
public String getName() {
return "OK";
}
}
// FILE: main.kt
interface KI {
val name: String
}
fun box(): String {
val r = MyRec("fail")
if (r.name() != "fail") return "fail 1"
if ((r as KI).name != "OK") return "fail 2"
return r.name
}
@@ -1,16 +0,0 @@
// ENABLE_JVM_PREVIEW
// FILE: MyRec.java
public record MyRec(String name) {
public String getName() {
return "OK";
}
}
// FILE: main.kt
fun box(): String {
val r = MyRec("fail")
if (r.name() != "fail") return "fail 1"
if (r.getName() != "OK") return "fail 2"
return r.name
}
@@ -1,12 +0,0 @@
// !LANGUAGE: +JvmRecordSupport
// ENABLE_JVM_PREVIEW
// FILE: MyRec.java
public record MyRec(String name) {}
// FILE: recordPropertyAccess.kt
fun box(): String {
val r = MyRec("OK")
if (r.name() != "OK") return "fail 1"
return r.name
}
@@ -1 +0,0 @@
<modernJava>
@@ -1,9 +0,0 @@
// STRING_CONCAT: indy-with-constants
fun box(): String {
val p = 3147483648u
val a = "_"
val b = "_"
val s = a + "1" + "2" + 3 + 4L + b + 5.0 + 6F + '7' + true + false + 3147483647u + p
return if (s != "_1234_5.06.07truefalse31474836473147483648") "fail $s" else "OK"
}
@@ -1,17 +0,0 @@
// STRING_CONCAT: indy-with-constants
fun box(): String {
val z = "0"
val result = z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z //200
return if (result.length != 200)
"fail: ${result.length}" else "OK"
}
@@ -1,26 +0,0 @@
// STRING_CONCAT: indy-with-constants
fun test(z: Long): String {
val result = "" + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z //200 z
return result
}
fun box(): String {
val result = test(0L)
if (result.length != 200)
return "fail 1: ${result.length}"
return if (result != "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
"fail 2: ${result}"
else "OK"
}
@@ -1,18 +0,0 @@
// STRING_CONCAT: indy-with-constants
fun box(): String {
val z = "0"
val result = z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + //200
z //201
return if (result.length != 201)
"fail: ${result.length}" else "OK"
}
@@ -1,17 +0,0 @@
// STRING_CONCAT: indy
fun box(): String {
val z = "0"
val result = z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z //200
return if (result.length != 200)
"fail: ${result.length}" else "OK"
}
@@ -1,26 +0,0 @@
// STRING_CONCAT: indy
fun test(z: Long): String {
val result = "" + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z //200 z
return result
}
fun box(): String {
val result = test(0L)
if (result.length != 200)
return "fail 1: ${result.length}"
return if (result != "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
"fail 2: ${result}"
else "OK"
}
@@ -1,18 +0,0 @@
// STRING_CONCAT: indy
fun box(): String {
val z = "0"
val result = z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z +
z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + z + //200
z //201
return if (result.length != 201)
"fail: ${result.length}" else "OK"
}
@@ -1,26 +0,0 @@
// STRING_CONCAT: indy-with-constants
inline class Str(val s: String)
inline class NStr(val s: String?)
fun testStr(s: Str?) = "1$s$s"
fun testNStr(ns: NStr?) = "2$ns$ns"
fun box(): String {
val test1 = testStr(Str("0"))
if (test1 != "1Str(s=0)Str(s=0)") return "fail 1: $test1"
val test2 = testStr(null)
if (test2 != "1nullnull") return "fail 2: $test2"
val test3 = testNStr(NStr(null))
if (test3 != "2NStr(s=null)NStr(s=null)") return "fail 3: $test3"
val test4 = testNStr(NStr("0"))
if (test4 != "2NStr(s=0)NStr(s=0)") return "fail 4: $test4"
val test5 = testNStr(null)
if (test5 != "2nullnull") return "fail 5: $test5"
return "OK"
}
@@ -1,9 +0,0 @@
fun test(a: String, b: String?): String {
return a + "\u0001" + 2.toChar() + 3.toChar() + 4L + b + 5.0 + 6F + '7' + b + "\u0002" + 1.toChar()
}
fun box(): String {
val test = test("O", "K")
return if (test != "O\u0001\u0002\u00034K5.06.07K\u0002\u0001") "fail ${test}" else "OK"
}
@@ -1,20 +0,0 @@
// STRING_CONCAT: indy-with-constants
inline fun test(crossinline s: (String) -> String): String {
var result = "1" + s("2") + "3" + 4 + {
"5" + s("6") + "7"
}()
result += object {
fun run() = "8" + s("9") + "10"
}.run()
return result
}
fun box(): String {
val result = test { it }
if (result != "12345678910") return "fail 1: $result"
val result2 = test { it + "_" }
return if (result2 != "12_3456_789_10") "fail 2: $result2" else "OK"
}
-18
View File
@@ -1,18 +0,0 @@
// TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM_IR
// ^ JVM_IR back-end generates SAM conversion with invokedynamic
// WITH_RUNTIME
fun box(): String {
val f = {}
val sam = Runnable(f)
val samJavaClass = sam::class.java
if (samJavaClass.simpleName != "")
throw Exception("samJavaClass.simpleName='${samJavaClass.simpleName}'")
if (!samJavaClass.isAnonymousClass())
throw Exception("!samJavaClass.isAnonymousClass(): '${samJavaClass.name}'")
return "OK"
}
@@ -1,32 +0,0 @@
// !LANGUAGE: +PolymorphicSignature
// TARGET_BACKEND: JVM
// SKIP_JDK6
// WITH_RUNTIME
import java.lang.invoke.MethodHandles
import kotlin.concurrent.thread
fun box(): String {
val handle = MethodHandles.arrayElementVarHandle(ByteArray::class.java)
val array = ByteArray(10)
val index = 0
// Check that we don't consider non-Object return type of a signature-polymorphic method to be polymorphic.
handle.weakCompareAndSetPlain(array, index, 0.toByte(), 21.toByte()) as Comparable<*>
val oldValue = 42.toByte()
val newValue = (-74).toByte()
thread {
Thread.sleep(400L)
handle.setVolatile(array, index, oldValue)
}
while (!handle.compareAndSet(array, index, oldValue, newValue)) {
Thread.sleep(10L)
}
return if (handle.getVolatile(array, index) == newValue) "OK" else "Fail"
}