From 0f4173cdfa62217e0ca2f580bd3a4832f4fc3813 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Thu, 10 Dec 2020 12:09:35 +0300 Subject: [PATCH] Fix running stdlib tests in worker on Native Add `@SharedImmutable` or `@ThreadLocal` where required. --- libraries/stdlib/test/OrderingTest.kt | 2 ++ .../delegation/PropertyReferenceTest.kt | 23 +++++++++++++++++++ libraries/stdlib/test/random/RandomTest.kt | 2 ++ libraries/stdlib/test/text/StringTest.kt | 2 ++ libraries/stdlib/test/time/DurationTest.kt | 3 +++ 5 files changed, 32 insertions(+) diff --git a/libraries/stdlib/test/OrderingTest.kt b/libraries/stdlib/test/OrderingTest.kt index c32fa1e3576..727a16d2d11 100644 --- a/libraries/stdlib/test/OrderingTest.kt +++ b/libraries/stdlib/test/OrderingTest.kt @@ -5,6 +5,7 @@ package test.comparisons +import kotlin.native.concurrent.SharedImmutable import kotlin.test.* data class Item(val name: String, val rating: Int) : Comparable { @@ -13,6 +14,7 @@ data class Item(val name: String, val rating: Int) : Comparable { } } +@SharedImmutable val STRING_CASE_INSENSITIVE_ORDER: Comparator = compareBy { it: String -> it.toUpperCase() }.thenBy { it.toLowerCase() }.thenBy { it } diff --git a/libraries/stdlib/test/properties/delegation/PropertyReferenceTest.kt b/libraries/stdlib/test/properties/delegation/PropertyReferenceTest.kt index d3d2e69c85e..cb4db8ce7e3 100644 --- a/libraries/stdlib/test/properties/delegation/PropertyReferenceTest.kt +++ b/libraries/stdlib/test/properties/delegation/PropertyReferenceTest.kt @@ -8,6 +8,7 @@ package test.properties.delegation.references import kotlin.reflect.* import kotlin.test.* import kotlin.internal.* +import kotlin.native.concurrent.ThreadLocal import kotlin.random.* open class Data(val stringVal: String, var intVar: Int, var builderVar: StringBuilder = StringBuilder("default")) @@ -16,25 +17,33 @@ var Data.displacedVar: Int get() = intVar + 2 set(value) { intVar = value - 2 } +@ThreadLocal val data = Data("bound string", 42) val topVal: Double get() = 3.14 +@ThreadLocal var topVar: ULong = 0xFFFFUL // top-level properties // val to bound val +@ThreadLocal val tlValBoundVal by data::stringVal // val to bound var +@ThreadLocal val tlValBoundVar by data::intVar // var to bound var +@ThreadLocal var tlVarBoundVar by data::intVar // val to top-level val +@ThreadLocal val tlValTopLevelVal by ::topVal // val to top-level var +@ThreadLocal val tlValTopLevelVar by ::topVar // var to top-level var +@ThreadLocal var tlVarTopLevelVar by ::topVar // member properties @@ -73,36 +82,50 @@ class DataExt : Data("member string", -1) { // extension properties // val to bound val +@ThreadLocal val Data.extValBoundVal by data::stringVal // val to bound var +@ThreadLocal val Data.extValBoundVar by data::intVar // var to bound var +@ThreadLocal var Data.extVarBoundVar by data::intVar // val to top-level val +@ThreadLocal val Data.extValTopLevelVal by ::topVal // val to top-level var +@ThreadLocal val Data.extValTopLevelVar by ::topVar // var to top-level var +@ThreadLocal var Data.extVarTopLevelVar by ::topVar // val to member val +@ThreadLocal val Data.extValMemberVal by Data::stringVal // val to member var +@ThreadLocal val Data.extValMemberVar by Data::intVar // var to member var +@ThreadLocal var Data.extVarMemberVar by Data::intVar // val to extension val +@ThreadLocal val Data.extValExtVal by Data::formattedVal // val to extension var +@ThreadLocal val Data.extValExtVar by Data::displacedVar // var to extension var +@ThreadLocal var Data.extVarExtVar by Data::displacedVar // covariance +@ThreadLocal val covariantVal: Number by ::topVal +@ThreadLocal val Data.extCovariantVal: CharSequence by Data::builderVar diff --git a/libraries/stdlib/test/random/RandomTest.kt b/libraries/stdlib/test/random/RandomTest.kt index 1729c3f5b19..1960e4dca6a 100644 --- a/libraries/stdlib/test/random/RandomTest.kt +++ b/libraries/stdlib/test/random/RandomTest.kt @@ -6,6 +6,7 @@ package test.random import kotlin.math.* +import kotlin.native.concurrent.ThreadLocal import kotlin.random.* import kotlin.test.* @@ -566,6 +567,7 @@ class DefaultRandomSmokeTest : RandomSmokeTest() { override val subject: Random get() = Random } +@ThreadLocal private val seededRandomSmokeTestSubject = Random(Random.nextInt().also { println("Seed: $it") }) class SeededRandomSmokeTest : RandomSmokeTest() { diff --git a/libraries/stdlib/test/text/StringTest.kt b/libraries/stdlib/test/text/StringTest.kt index 9046fb492b5..5d0665a237c 100644 --- a/libraries/stdlib/test/text/StringTest.kt +++ b/libraries/stdlib/test/text/StringTest.kt @@ -11,6 +11,7 @@ import test.collections.behaviors.iteratorBehavior import test.collections.behaviors.setBehavior import test.collections.compare import kotlin.math.sign +import kotlin.native.concurrent.SharedImmutable import kotlin.random.Random @@ -18,6 +19,7 @@ fun createString(content: String): CharSequence = content fun createStringBuilder(content: String): CharSequence = StringBuilder((content as Any).toString()) // required for Rhino JS +@SharedImmutable val charSequenceBuilders = listOf(::createString, ::createStringBuilder) fun withOneCharSequenceArg(f: ((String) -> CharSequence) -> Unit) { diff --git a/libraries/stdlib/test/time/DurationTest.kt b/libraries/stdlib/test/time/DurationTest.kt index 4c423a31c07..7edbc449226 100644 --- a/libraries/stdlib/test/time/DurationTest.kt +++ b/libraries/stdlib/test/time/DurationTest.kt @@ -8,11 +8,14 @@ package test.time import test.numbers.assertAlmostEquals import test.* +import kotlin.native.concurrent.SharedImmutable import kotlin.test.* import kotlin.time.* import kotlin.random.* +@SharedImmutable private val expectStorageUnit = DurationUnit.NANOSECONDS +@SharedImmutable private val units = DurationUnit.values() class DurationTest {