Skip to content

Instantly share code, notes, and snippets.

@yshrsmz
Last active February 21, 2019 06:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yshrsmz/cf9c53bac9b07b3ca02c1286ea796ad1 to your computer and use it in GitHub Desktop.
Save yshrsmz/cf9c53bac9b07b3ca02c1286ea796ad1 to your computer and use it in GitHub Desktop.
package com.codingfeline.sample
import co.touchlab.stately.concurrency.ThreadLocalRef
import co.touchlab.stately.concurrency.value
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Runnable
import platform.darwin.dispatch_async
import platform.darwin.dispatch_get_main_queue
import platform.darwin.dispatch_queue_t
import kotlin.coroutines.CoroutineContext
import kotlin.native.concurrent.freeze
import kotlin.native.concurrent.isFrozen
import kotlin.test.Test
class FreezedFunTest {
data class JobWrapper<B>(val backJob: () -> B, val mainJobLocal: ThreadLocalRef<(B) -> Unit>)
data class JobWrapper2<B>(val backJob: () -> B, val mainJob: (B) -> Unit)
class Obj(var value: String)
@Test
fun test() {
val ref = ThreadLocalRef<(Obj) -> Unit>()
ref.set { obj -> println("obj: $obj") }
val jw = JobWrapper({ Obj("param") }, ref).freeze()
println("JobWrapper: ${jw.isFrozen}")
println("JobWrapper.backJob: ${jw.backJob.isFrozen}")
println("JobWrapper.mainJobLocal: ${jw.mainJobLocal.isFrozen}")
println("JobWrapper.mainJobLocal.value: ${jw.mainJobLocal.value.isFrozen}")
val jw2 = JobWrapper2({ Obj("param") }, { obj -> println("obj: $obj") }).freeze()
println("JobWrapper2: ${jw2.isFrozen}")
println("JobWrapper2.backJob: ${jw2.backJob.isFrozen}")
println("JobWrapper2.mainJobLocal: ${jw2.mainJob.isFrozen}")
println("JobWrapper2.mainJobLocal.value: ${jw2.mainJob.isFrozen}")
}
}
JobWrapper: true
JobWrapper.backJob: true
JobWrapper.mainJobLocal: true
JobWrapper.mainJobLocal.value: false
JobWrapper2: true
JobWrapper2.backJob: true
JobWrapper2.mainJobLocal: true
JobWrapper2.mainJobLocal.value: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment