Run backend tests with the new MM (#4677)

This commit is contained in:
Alexander Shabalin
2021-02-08 12:12:28 +03:00
committed by Vasily Levchenko
parent 860279b255
commit e2f573c26c
+137 -60
View File
@@ -153,6 +153,8 @@ tasks.withType(RunExternalTestGroup.class).configureEach {
enableTwoStageCompilation = twoStageEnabled enableTwoStageCompilation = twoStageEnabled
} }
ext.isExperimentalMM = project.globalTestArgs.contains("-memory-model") && project.globalTestArgs.contains("experimental")
allprojects { allprojects {
// Root directories for test output (logs, compiled files, statistics etc). Only single path must be in each set. // Root directories for test output (logs, compiled files, statistics etc). Only single path must be in each set.
// backend.native/tests // backend.native/tests
@@ -812,7 +814,8 @@ task runtime_basic_simd(type: KonanLocalTest) {
} }
task runtime_worker_random(type: KonanLocalTest) { task runtime_worker_random(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Uses workers. enabled = (project.testTarget != 'wasm32') && // Uses workers.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/basic/worker_random.kt" source = "runtime/basic/worker_random.kt"
} }
@@ -926,146 +929,170 @@ task empty_substring(type: KonanLocalTest) {
} }
standaloneTest("cleaner_basic") { standaloneTest("cleaner_basic") {
enabled = (project.testTarget != 'wasm32') // Cleaners need workers enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/basic/cleaner_basic.kt" source = "runtime/basic/cleaner_basic.kt"
flags = ['-tr', '-Xopt-in=kotlin.native.internal.InternalForKotlinNative'] flags = ['-tr', '-Xopt-in=kotlin.native.internal.InternalForKotlinNative']
} }
standaloneTest("cleaner_workers") { standaloneTest("cleaner_workers") {
enabled = (project.testTarget != 'wasm32') // Cleaners need workers enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/basic/cleaner_workers.kt" source = "runtime/basic/cleaner_workers.kt"
flags = ['-tr', '-Xopt-in=kotlin.native.internal.InternalForKotlinNative'] flags = ['-tr', '-Xopt-in=kotlin.native.internal.InternalForKotlinNative']
} }
standaloneTest("cleaner_in_main_with_checker") { standaloneTest("cleaner_in_main_with_checker") {
enabled = (project.testTarget != 'wasm32') // Cleaners need workers enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/basic/cleaner_in_main_with_checker.kt" source = "runtime/basic/cleaner_in_main_with_checker.kt"
goldValue = "42\n" goldValue = "42\n"
} }
standaloneTest("cleaner_in_main_without_checker") { standaloneTest("cleaner_in_main_without_checker") {
enabled = (project.testTarget != 'wasm32') // Cleaners need workers enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/basic/cleaner_in_main_without_checker.kt" source = "runtime/basic/cleaner_in_main_without_checker.kt"
goldValue = "" goldValue = ""
} }
standaloneTest("cleaner_leak_without_checker") { standaloneTest("cleaner_leak_without_checker") {
enabled = (project.testTarget != 'wasm32') // Cleaners need workers enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/basic/cleaner_leak_without_checker.kt" source = "runtime/basic/cleaner_leak_without_checker.kt"
goldValue = "" goldValue = ""
} }
standaloneTest("cleaner_leak_with_checker") { standaloneTest("cleaner_leak_with_checker") {
enabled = (project.testTarget != 'wasm32') // Cleaners need workers enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/basic/cleaner_leak_with_checker.kt" source = "runtime/basic/cleaner_leak_with_checker.kt"
expectedExitStatusChecker = { it != 0 } expectedExitStatusChecker = { it != 0 }
outputChecker = { s -> (s =~ /Cleaner (0x)?[0-9a-fA-F]+ was disposed during program exit/).find() } outputChecker = { s -> (s =~ /Cleaner (0x)?[0-9a-fA-F]+ was disposed during program exit/).find() }
} }
standaloneTest("cleaner_in_tls_main_without_checker") { standaloneTest("cleaner_in_tls_main_without_checker") {
enabled = (project.testTarget != 'wasm32') // Cleaners need workers enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/basic/cleaner_in_tls_main_without_checker.kt" source = "runtime/basic/cleaner_in_tls_main_without_checker.kt"
} }
standaloneTest("cleaner_in_tls_main_with_checker") { standaloneTest("cleaner_in_tls_main_with_checker") {
enabled = (project.testTarget != 'wasm32') // Cleaners need workers enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/basic/cleaner_in_tls_main_with_checker.kt" source = "runtime/basic/cleaner_in_tls_main_with_checker.kt"
expectedExitStatusChecker = { it != 0 } expectedExitStatusChecker = { it != 0 }
outputChecker = { s -> (s =~ /Cleaner (0x)?[0-9a-fA-F]+ was disposed during program exit/).find() } outputChecker = { s -> (s =~ /Cleaner (0x)?[0-9a-fA-F]+ was disposed during program exit/).find() }
} }
standaloneTest("cleaner_in_tls_worker") { standaloneTest("cleaner_in_tls_worker") {
enabled = (project.testTarget != 'wasm32') // Cleaners need workers enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/basic/cleaner_in_tls_worker.kt" source = "runtime/basic/cleaner_in_tls_worker.kt"
flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative'] flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative']
} }
standaloneTest("worker_bound_reference0") { standaloneTest("worker_bound_reference0") {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/concurrent/worker_bound_reference0.kt" source = "runtime/concurrent/worker_bound_reference0.kt"
flags = ['-tr'] flags = ['-tr']
} }
task worker0(type: KonanLocalTest) { task worker0(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "Got Input processed\nOK\n" goldValue = "Got Input processed\nOK\n"
source = "runtime/workers/worker0.kt" source = "runtime/workers/worker0.kt"
} }
task worker1(type: KonanLocalTest) { task worker1(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "OK\n" goldValue = "OK\n"
source = "runtime/workers/worker1.kt" source = "runtime/workers/worker1.kt"
} }
task worker2(type: KonanLocalTest) { task worker2(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "OK\n" goldValue = "OK\n"
source = "runtime/workers/worker2.kt" source = "runtime/workers/worker2.kt"
} }
task worker3(type: KonanLocalTest) { task worker3(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "OK\n" goldValue = "OK\n"
source = "runtime/workers/worker3.kt" source = "runtime/workers/worker3.kt"
} }
task worker4(type: KonanLocalTest) { task worker4(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "Got 42\nOK\n" goldValue = "Got 42\nOK\n"
source = "runtime/workers/worker4.kt" source = "runtime/workers/worker4.kt"
} }
// This tests changes main thread worker queue state, so better be executed alone. // This tests changes main thread worker queue state, so better be executed alone.
standaloneTest("worker5") { standaloneTest("worker5") {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "Got 3\nOK\n" goldValue = "Got 3\nOK\n"
source = "runtime/workers/worker5.kt" source = "runtime/workers/worker5.kt"
} }
task worker6(type: KonanLocalTest) { task worker6(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "Got 42\nOK\n" goldValue = "Got 42\nOK\n"
source = "runtime/workers/worker6.kt" source = "runtime/workers/worker6.kt"
} }
task worker7(type: KonanLocalTest) { task worker7(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "Input\nGot kotlin.Unit\nOK\n" goldValue = "Input\nGot kotlin.Unit\nOK\n"
source = "runtime/workers/worker7.kt" source = "runtime/workers/worker7.kt"
} }
task worker8(type: KonanLocalTest) { task worker8(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "SharedData(string=Hello, int=10, member=SharedDataMember(double=0.1))\nGot kotlin.Unit\nOK\n" goldValue = "SharedData(string=Hello, int=10, member=SharedDataMember(double=0.1))\nGot kotlin.Unit\nOK\n"
source = "runtime/workers/worker8.kt" source = "runtime/workers/worker8.kt"
} }
task worker9(type: KonanLocalTest) { task worker9(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "zzz\n42\nOK\nfirst 2\nsecond 3\nfrozen OK\n" goldValue = "zzz\n42\nOK\nfirst 2\nsecond 3\nfrozen OK\n"
source = "runtime/workers/worker9.kt" source = "runtime/workers/worker9.kt"
} }
task worker10(type: KonanLocalTest) { task worker10(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "OK\ntrue\ntrue\n" goldValue = "OK\ntrue\ntrue\n"
source = "runtime/workers/worker10.kt" source = "runtime/workers/worker10.kt"
} }
task worker11(type: KonanLocalTest) { task worker11(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "OK\n" goldValue = "OK\n"
source = "runtime/workers/worker11.kt" source = "runtime/workers/worker11.kt"
} }
standaloneTest("worker_threadlocal_no_leak") { standaloneTest("worker_threadlocal_no_leak") {
disabled = (project.testTarget == 'wasm32') // Needs pthreads. disabled = (project.testTarget == 'wasm32') || // Needs pthreads.
isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/workers/worker_threadlocal_no_leak.kt" source = "runtime/workers/worker_threadlocal_no_leak.kt"
} }
task freeze0(type: KonanLocalTest) { task freeze0(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // No workers on WASM. enabled = (project.testTarget != 'wasm32') && // No workers on WASM.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "frozen bit is true\n" + goldValue = "frozen bit is true\n" +
"Worker: SharedData(string=Hello, int=10, member=SharedDataMember(double=0.1))\n" + "Worker: SharedData(string=Hello, int=10, member=SharedDataMember(double=0.1))\n" +
"Main: SharedData(string=Hello, int=10, member=SharedDataMember(double=0.1))\n" + "Main: SharedData(string=Hello, int=10, member=SharedDataMember(double=0.1))\n" +
@@ -1074,19 +1101,22 @@ task freeze0(type: KonanLocalTest) {
} }
task freeze1(type: KonanLocalTest) { task freeze1(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM. enabled = (project.testTarget != 'wasm32') && // No exceptions on WASM.
!isExperimentalMM // Experimental MM does not support freezing yet.
goldValue = "OK, cannot mutate frozen\n" goldValue = "OK, cannot mutate frozen\n"
source = "runtime/workers/freeze1.kt" source = "runtime/workers/freeze1.kt"
} }
task freeze_stress(type: KonanLocalTest) { task freeze_stress(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM. enabled = (project.testTarget != 'wasm32') && // No exceptions on WASM.
!isExperimentalMM // Experimental MM does not support freezing yet.
goldValue = "OK\n" goldValue = "OK\n"
source = "runtime/workers/freeze_stress.kt" source = "runtime/workers/freeze_stress.kt"
} }
task freeze2(type: KonanLocalTest) { task freeze2(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM. enabled = (project.testTarget != 'wasm32') && // No exceptions on WASM.
!isExperimentalMM // Experimental MM does not support freezing yet.
goldValue = goldValue =
"Worker 1: Hello world\n" + "Worker2: 42\n" + "Worker 1: Hello world\n" + "Worker2: 42\n" +
"Worker3: 239.0\n" + "Worker4: a\n" + "OK\n" "Worker3: 239.0\n" + "Worker4: a\n" + "OK\n"
@@ -1094,30 +1124,35 @@ task freeze2(type: KonanLocalTest) {
} }
task freeze3(type: KonanLocalTest) { task freeze3(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM. enabled = (project.testTarget != 'wasm32') && // No exceptions on WASM.
!isExperimentalMM // Experimental MM does not support freezing yet.
goldValue = "OK\n" goldValue = "OK\n"
source = "runtime/workers/freeze3.kt" source = "runtime/workers/freeze3.kt"
} }
task freeze4(type: KonanLocalTest) { task freeze4(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM. enabled = (project.testTarget != 'wasm32') && // No exceptions on WASM.
!isExperimentalMM // Experimental MM does not support freezing yet.
goldValue = "OK\n" goldValue = "OK\n"
source = "runtime/workers/freeze4.kt" source = "runtime/workers/freeze4.kt"
} }
task freeze5(type: KonanLocalTest) { task freeze5(type: KonanLocalTest) {
enabled = !isExperimentalMM // Experimental MM does not support freezing yet.
goldValue = "OK\n" goldValue = "OK\n"
source = "runtime/workers/freeze5.kt" source = "runtime/workers/freeze5.kt"
} }
task freeze6(type: KonanLocalTest) { task freeze6(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM. enabled = (project.testTarget != 'wasm32') && // No exceptions on WASM.
!isExperimentalMM // Experimental MM does not support freezing yet.
goldValue = "OK\nOK\n" goldValue = "OK\nOK\n"
source = "runtime/workers/freeze6.kt" source = "runtime/workers/freeze6.kt"
} }
task atomic0(type: KonanLocalTest) { task atomic0(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "35\n" + "20\n" + "OK\n" goldValue = "35\n" + "20\n" + "OK\n"
source = "runtime/workers/atomic0.kt" source = "runtime/workers/atomic0.kt"
} }
@@ -1129,46 +1164,54 @@ standaloneTest("atomic1") {
} }
task lazy0(type: KonanLocalTest) { task lazy0(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "OK\n" goldValue = "OK\n"
source = "runtime/workers/lazy0.kt" source = "runtime/workers/lazy0.kt"
} }
task lazy1(type: KonanLocalTest) { task lazy1(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Need exceptions. enabled = (project.testTarget != 'wasm32') && // Need exceptions.
!isExperimentalMM // Experimental MM does not support freezing yet.
goldValue = "OK\n" goldValue = "OK\n"
source = "runtime/workers/lazy1.kt" source = "runtime/workers/lazy1.kt"
} }
standaloneTest("lazy2") { standaloneTest("lazy2") {
enabled = !isExperimentalMM // Experimental MM does not have a GC yet.
goldValue = "123\nOK\n" goldValue = "123\nOK\n"
source = "runtime/workers/lazy2.kt" source = "runtime/workers/lazy2.kt"
} }
standaloneTest("lazy3") { standaloneTest("lazy3") {
enabled = !isExperimentalMM // Experimental MM does not have a GC yet.
source = "runtime/workers/lazy3.kt" source = "runtime/workers/lazy3.kt"
} }
task mutableData1(type: KonanLocalTest) { task mutableData1(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. Need exceptions enabled = (project.testTarget != 'wasm32') && // Workers need pthreads. Need exceptions
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/workers/mutableData1.kt" source = "runtime/workers/mutableData1.kt"
} }
task enumIdentity(type: KonanLocalTest) { task enumIdentity(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
!isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
goldValue = "true\n" goldValue = "true\n"
source = "runtime/workers/enum_identity.kt" source = "runtime/workers/enum_identity.kt"
} }
standaloneTest("leakWorker") { standaloneTest("leakWorker") {
disabled = (project.testTarget == 'wasm32') // Needs pthreads. disabled = (project.testTarget == 'wasm32') || // Needs pthreads.
isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/workers/leak_worker.kt" source = "runtime/workers/leak_worker.kt"
expectedExitStatusChecker = { it != 0 } expectedExitStatusChecker = { it != 0 }
outputChecker = { s -> s.contains("Unfinished workers detected, 1 workers leaked!") } outputChecker = { s -> s.contains("Unfinished workers detected, 1 workers leaked!") }
} }
standaloneTest("leakMemoryWithWorkerTermination") { standaloneTest("leakMemoryWithWorkerTermination") {
disabled = (project.testTarget == 'wasm32') // Needs pthreads. disabled = (project.testTarget == 'wasm32') || // Needs pthreads.
isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/workers/leak_memory_with_worker_termination.kt" source = "runtime/workers/leak_memory_with_worker_termination.kt"
expectedExitStatusChecker = { it != 0 } expectedExitStatusChecker = { it != 0 }
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") } outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") }
@@ -1251,6 +1294,7 @@ task enum_nested(type: KonanLocalTest) {
} }
task enum_isFrozen(type: KonanLocalTest) { task enum_isFrozen(type: KonanLocalTest) {
enabled = !isExperimentalMM // Experimental MM does not support freezing yet.
goldValue = "true\n" goldValue = "true\n"
source = "codegen/enum/isFrozen.kt" source = "codegen/enum/isFrozen.kt"
} }
@@ -2001,7 +2045,8 @@ task typed_array0(type: KonanLocalTest) {
} }
task typed_array1(type: KonanLocalTest) { task typed_array1(type: KonanLocalTest) {
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM. enabled = (project.testTarget != 'wasm32') && // No exceptions on WASM.
!isExperimentalMM // Experimental MM does not support freezing yet.
goldValue = "OK\n" goldValue = "OK\n"
source = "runtime/collections/typed_array1.kt" source = "runtime/collections/typed_array1.kt"
} }
@@ -2647,21 +2692,24 @@ standaloneTest("args0") {
} }
standaloneTest("devirtualization_lateinitInterface") { standaloneTest("devirtualization_lateinitInterface") {
disabled = (cacheTesting != null) // Cache is not compatible with -opt. disabled = (cacheTesting != null) || // Cache is not compatible with -opt.
isExperimentalMM // Experimental MM does not support -opt yet.
goldValue = "42\n" goldValue = "42\n"
flags = ["-opt"] flags = ["-opt"]
source = "codegen/devirtualization/lateinitInterface.kt" source = "codegen/devirtualization/lateinitInterface.kt"
} }
standaloneTest("devirtualization_getter_looking_as_box_function") { standaloneTest("devirtualization_getter_looking_as_box_function") {
disabled = (cacheTesting != null) // Cache is not compatible with -opt. disabled = (cacheTesting != null) || // Cache is not compatible with -opt.
isExperimentalMM // Experimental MM does not support -opt yet.
goldValue = "box\n" goldValue = "box\n"
flags = ["-opt"] flags = ["-opt"]
source = "codegen/devirtualization/getter_looking_as_box_function.kt" source = "codegen/devirtualization/getter_looking_as_box_function.kt"
} }
standaloneTest("devirtualization_anonymousObject") { standaloneTest("devirtualization_anonymousObject") {
disabled = (cacheTesting != null) // Cache is not compatible with -opt. disabled = (cacheTesting != null) || // Cache is not compatible with -opt.
isExperimentalMM // Experimental MM does not support -opt yet.
goldValue = "zzz\n" goldValue = "zzz\n"
flags = ["-opt"] flags = ["-opt"]
source = "codegen/devirtualization/anonymousObject.kt" source = "codegen/devirtualization/anonymousObject.kt"
@@ -2857,7 +2905,8 @@ task initializers5(type: KonanLocalTest) {
} }
task initializers6(type: KonanLocalTest) { task initializers6(type: KonanLocalTest) {
disabled = project.testTarget == 'wasm32' // Needs workers. disabled = (project.testTarget == 'wasm32') || // Needs workers.
isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/basic/initializers6.kt" source = "runtime/basic/initializers6.kt"
} }
@@ -2915,11 +2964,13 @@ task memory_escape1(type: KonanLocalTest) {
} }
task memory_cycles0(type: KonanLocalTest) { task memory_cycles0(type: KonanLocalTest) {
enabled = !isExperimentalMM // Experimental MM does not have a GC yet.
goldValue = "42\n" goldValue = "42\n"
source = "runtime/memory/cycles0.kt" source = "runtime/memory/cycles0.kt"
} }
task memory_cycles1(type: KonanLocalTest) { task memory_cycles1(type: KonanLocalTest) {
enabled = !isExperimentalMM // Experimental MM does not have a GC yet.
source = "runtime/memory/cycles1.kt" source = "runtime/memory/cycles1.kt"
} }
@@ -2933,6 +2984,7 @@ task memory_escape2(type: KonanLocalTest) {
} }
task memory_weak0(type: KonanLocalTest) { task memory_weak0(type: KonanLocalTest) {
enabled = !isExperimentalMM // Experimental MM does not have a GC yet.
goldValue = "Data(s=Hello)\nnull\nOK\n" goldValue = "Data(s=Hello)\nnull\nOK\n"
source = "runtime/memory/weak0.kt" source = "runtime/memory/weak0.kt"
} }
@@ -2943,17 +2995,20 @@ task memory_weak1(type: KonanLocalTest) {
} }
standaloneTest("memory_only_gc") { standaloneTest("memory_only_gc") {
enabled = !isExperimentalMM // Experimental MM does not have a GC yet.
source = "runtime/memory/only_gc.kt" source = "runtime/memory/only_gc.kt"
} }
task memory_stable_ref_cross_thread_check(type: KonanLocalTest) { task memory_stable_ref_cross_thread_check(type: KonanLocalTest) {
disabled = project.testTarget == 'wasm32' // Needs workers. disabled = (project.testTarget == 'wasm32') || // Needs workers.
isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "runtime/memory/stable_ref_cross_thread_check.kt" source = "runtime/memory/stable_ref_cross_thread_check.kt"
} }
standaloneTest("cycle_detector") { standaloneTest("cycle_detector") {
disabled = project.globalTestArgs.contains('-opt') || // Needs debug build. disabled = project.globalTestArgs.contains('-opt') || // Needs debug build.
(project.testTarget == 'wasm32') // CycleDetector is disabled on WASM. (project.testTarget == 'wasm32') || // CycleDetector is disabled on WASM.
isExperimentalMM // Experimental MM will not support CycleDetector.
flags = ['-tr', '-g'] flags = ['-tr', '-g']
source = "runtime/memory/cycle_detector.kt" source = "runtime/memory/cycle_detector.kt"
} }
@@ -2970,15 +3025,19 @@ standaloneTest("cycle_collector_deadlock1") {
standaloneTest("leakMemory") { standaloneTest("leakMemory") {
source = "runtime/memory/leak_memory.kt" source = "runtime/memory/leak_memory.kt"
expectedExitStatusChecker = { it != 0 } if (!isExperimentalMM) { // Experimental MM will not report memory leaks.
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") } expectedExitStatusChecker = { it != 0 }
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") }
}
} }
standaloneTest("leakMemoryWithTestRunner") { standaloneTest("leakMemoryWithTestRunner") {
source = "runtime/memory/leak_memory_test_runner.kt" source = "runtime/memory/leak_memory_test_runner.kt"
flags = ['-tr'] flags = ['-tr']
expectedExitStatusChecker = { it != 0 } if (!isExperimentalMM) { // Experimental MM will not report memory leaks.
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") } expectedExitStatusChecker = { it != 0 }
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") }
}
} }
standaloneTest("mpp1") { standaloneTest("mpp1") {
@@ -3614,7 +3673,8 @@ tasks.register("driver0", KonanDriverTest) {
} }
tasks.register("driver_opt", KonanDriverTest) { tasks.register("driver_opt", KonanDriverTest) {
disabled = (cacheTesting != null) // Cache is not compatible with -opt. disabled = (cacheTesting != null) || // Cache is not compatible with -opt.
isExperimentalMM // Experimental MM does not support -opt yet.
goldValue = "Hello, world!\n" goldValue = "Hello, world!\n"
source = "runtime/basic/driver0.kt" source = "runtime/basic/driver0.kt"
flags = ["-opt"] flags = ["-opt"]
@@ -4170,13 +4230,15 @@ dynamicTest("interop_kt43502") {
} }
interopTest("interop_leakMemoryWithRunningThreadUnchecked") { interopTest("interop_leakMemoryWithRunningThreadUnchecked") {
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet. disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
interop = 'leakMemoryWithRunningThread' interop = 'leakMemoryWithRunningThread'
source = "interop/leakMemoryWithRunningThread/unchecked.kt" source = "interop/leakMemoryWithRunningThread/unchecked.kt"
} }
interopTest("interop_leakMemoryWithRunningThreadChecked") { interopTest("interop_leakMemoryWithRunningThreadChecked") {
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet. disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
interop = 'leakMemoryWithRunningThread' interop = 'leakMemoryWithRunningThread'
source = "interop/leakMemoryWithRunningThread/checked.kt" source = "interop/leakMemoryWithRunningThread/checked.kt"
expectedExitStatusChecker = { it != 0 } expectedExitStatusChecker = { it != 0 }
@@ -4219,6 +4281,7 @@ standaloneTest("interop_opengl_teapot") {
if (PlatformInfo.isAppleTarget(project)) { if (PlatformInfo.isAppleTarget(project)) {
interopTest("interop_objc_smoke") { interopTest("interop_objc_smoke") {
enabled = !isExperimentalMM // Experimental MM does not have a GC yet.
goldValue = "84\nFoo\nDeallocated\n" + goldValue = "84\nFoo\nDeallocated\n" +
"Hello, World!\nKotlin says: Hello, everybody!\nHello from Kotlin\n2, 1\n" + "Hello, World!\nKotlin says: Hello, everybody!\nHello from Kotlin\n2, 1\n" +
"true\ntrue\n" + "true\ntrue\n" +
@@ -4253,6 +4316,7 @@ if (PlatformInfo.isAppleTarget(project)) {
} }
interopTestMultifile("interop_objc_tests") { interopTestMultifile("interop_objc_tests") {
enabled = !isExperimentalMM // Experimental MM does not have a GC yet.
source = "interop/objc/tests/" source = "interop/objc/tests/"
interop = 'objcTests' interop = 'objcTests'
flags = ['-tr', '-e', 'main'] flags = ['-tr', '-e', 'main']
@@ -4370,6 +4434,7 @@ if (PlatformInfo.isAppleTarget(project)) {
} }
interopTest("interop_objc_illegal_sharing_with_weak") { interopTest("interop_objc_illegal_sharing_with_weak") {
enabled = !isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "interop/objc/illegal_sharing_with_weak/main.kt" source = "interop/objc/illegal_sharing_with_weak/main.kt"
interop = 'objc_illegal_sharing_with_weak' interop = 'objc_illegal_sharing_with_weak'
@@ -4382,6 +4447,7 @@ if (PlatformInfo.isAppleTarget(project)) {
} }
interopTest("interop_objc_kt42172") { interopTest("interop_objc_kt42172") {
enabled = !isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "interop/objc/kt42172/main.kt" source = "interop/objc/kt42172/main.kt"
interop = "objc_kt42172" interop = "objc_kt42172"
flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative'] flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative']
@@ -4432,7 +4498,8 @@ standaloneTest("interop_zlib") {
standaloneTest("interop_objc_illegal_sharing") { standaloneTest("interop_objc_illegal_sharing") {
dependsOnPlatformLibs(it) dependsOnPlatformLibs(it)
disabled = !isAppleTarget(project) disabled = !isAppleTarget(project) ||
isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "interop/objc/illegal_sharing.kt" source = "interop/objc/illegal_sharing.kt"
expectedExitStatusChecker = { it != 0 } expectedExitStatusChecker = { it != 0 }
outputChecker = { outputChecker = {
@@ -4498,7 +4565,8 @@ dynamicTest("interop_kt42397") {
} }
dynamicTest("interop_cleaners_main_thread") { dynamicTest("interop_cleaners_main_thread") {
disabled = (project.target.name != project.hostName) disabled = (project.target.name != project.hostName) ||
isExperimentalMM // Experimental MM does not have a GC yet.
source = "interop/cleaners/cleaners.kt" source = "interop/cleaners/cleaners.kt"
cSource = "$projectDir/interop/cleaners/main_thread.cpp" cSource = "$projectDir/interop/cleaners/main_thread.cpp"
clangTool = "clang++" clangTool = "clang++"
@@ -4507,7 +4575,8 @@ dynamicTest("interop_cleaners_main_thread") {
} }
dynamicTest("interop_cleaners_second_thread") { dynamicTest("interop_cleaners_second_thread") {
disabled = (project.target.name != project.hostName) disabled = (project.target.name != project.hostName) ||
isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "interop/cleaners/cleaners.kt" source = "interop/cleaners/cleaners.kt"
cSource = "$projectDir/interop/cleaners/second_thread.cpp" cSource = "$projectDir/interop/cleaners/second_thread.cpp"
clangTool = "clang++" clangTool = "clang++"
@@ -4525,7 +4594,8 @@ dynamicTest("interop_cleaners_leak") {
} }
dynamicTest("interop_migrating_main_thread_legacy") { dynamicTest("interop_migrating_main_thread_legacy") {
disabled = (project.target.name != project.hostName) disabled = (project.target.name != project.hostName) ||
isExperimentalMM // Experimental MM will not support legacy destroy runtime mode.
source = "interop/migrating_main_thread/lib.kt" source = "interop/migrating_main_thread/lib.kt"
flags = ['-Xdestroy-runtime-mode=legacy'] flags = ['-Xdestroy-runtime-mode=legacy']
clangFlags = ['-DIS_LEGACY'] clangFlags = ['-DIS_LEGACY']
@@ -4534,7 +4604,8 @@ dynamicTest("interop_migrating_main_thread_legacy") {
} }
dynamicTest("interop_migrating_main_thread") { dynamicTest("interop_migrating_main_thread") {
disabled = (project.target.name != project.hostName) disabled = (project.target.name != project.hostName) ||
isExperimentalMM // Experimental MM doesn't support multiple mutators yet.
source = "interop/migrating_main_thread/lib.kt" source = "interop/migrating_main_thread/lib.kt"
flags = ['-Xdestroy-runtime-mode=on-shutdown'] flags = ['-Xdestroy-runtime-mode=on-shutdown']
cSource = "$projectDir/interop/migrating_main_thread/main.cpp" cSource = "$projectDir/interop/migrating_main_thread/main.cpp"
@@ -4542,7 +4613,8 @@ dynamicTest("interop_migrating_main_thread") {
} }
dynamicTest("interop_memory_leaks") { dynamicTest("interop_memory_leaks") {
disabled = (project.target.name != project.hostName) disabled = (project.target.name != project.hostName) ||
isExperimentalMM // Experimental MM will not support legacy destroy runtime mode.
source = "interop/memory_leaks/lib.kt" source = "interop/memory_leaks/lib.kt"
cSource = "$projectDir/interop/memory_leaks/main.cpp" cSource = "$projectDir/interop/memory_leaks/main.cpp"
clangTool = "clang++" clangTool = "clang++"
@@ -4682,6 +4754,7 @@ Task frameworkTest(String name, Closure<FrameworkTest> configurator) {
if (isAppleTarget(project)) { if (isAppleTarget(project)) {
frameworkTest('testObjCExport') { frameworkTest('testObjCExport') {
enabled = !isExperimentalMM // Experimental MM doesn't support ObjC blocks yet.
final String frameworkName = 'Kt' final String frameworkName = 'Kt'
final String dir = "$testOutputFramework/testObjCExport" final String dir = "$testOutputFramework/testObjCExport"
final File lazyHeader = file("$dir/$target-lazy.h") final File lazyHeader = file("$dir/$target-lazy.h")
@@ -4731,6 +4804,7 @@ if (isAppleTarget(project)) {
} }
frameworkTest('testObjCExportStatic') { frameworkTest('testObjCExportStatic') {
enabled = !isExperimentalMM // Experimental MM doesn't support ObjC blocks yet.
final String frameworkName = 'KtStatic' final String frameworkName = 'KtStatic'
final String frameworkArtifactName = 'Kt' final String frameworkArtifactName = 'Kt'
final String libraryName = frameworkName + "Library" final String libraryName = frameworkName + "Library"
@@ -4768,6 +4842,7 @@ if (isAppleTarget(project)) {
} }
frameworkTest("testStdlibFramework") { frameworkTest("testStdlibFramework") {
enabled = !isExperimentalMM // Experimental MM does not have GC yet.
framework('Stdlib') { framework('Stdlib') {
sources = ['framework/stdlib'] sources = ['framework/stdlib']
bitcode = true bitcode = true
@@ -4988,7 +5063,8 @@ tasks.register("metadata_compare_unable_to_import", MetadataComparisonTest) {
} }
standaloneTest("local_ea_arraysfieldwrite") { standaloneTest("local_ea_arraysfieldwrite") {
disabled = (cacheTesting != null) // Cache is not compatible with -opt. disabled = (cacheTesting != null) || // Cache is not compatible with -opt.
isExperimentalMM // Experimental MM does not support -opt yet.
goldValue = "Array (constructor init):\nSize: 2\nContents: [1, 2]\n" + goldValue = "Array (constructor init):\nSize: 2\nContents: [1, 2]\n" +
"Array (constructor init):\nSize: 2\nContents: [3, 4]\n" + "Array (constructor init):\nSize: 2\nContents: [3, 4]\n" +
"Array (default value init):\nSize: 2\nContents: [1, 2]\n" + "Array (default value init):\nSize: 2\nContents: [1, 2]\n" +
@@ -5061,7 +5137,8 @@ private void configureStdlibTest(KonanGTest task, boolean inWorker) {
task.useFilter = false task.useFilter = false
task.testLogger = KonanTest.Logger.GTEST task.testLogger = KonanTest.Logger.GTEST
task.finalizedBy("resultsTask") task.finalizedBy("resultsTask")
task.enabled = (project.testTarget != 'wasm32') // Uses exceptions task.enabled = (project.testTarget != 'wasm32') && // Uses exceptions
(!inWorker || !ext.isExperimentalMM) // Experimental MM doesn't support multiple mutators yet.
} }
/** /**