Add WorkerBoundReference.worker (#4135)
This commit is contained in:
committed by
GitHub
parent
88fc861dd1
commit
0dc855619f
@@ -140,6 +140,23 @@ fun testGlobalModification() {
|
||||
worker.requestTermination().result
|
||||
}
|
||||
|
||||
val global7: WorkerBoundReference<A> = WorkerBoundReference(A(3))
|
||||
|
||||
@Test
|
||||
fun testGlobalGetWorker() {
|
||||
val ownerId = Worker.current.id
|
||||
assertEquals(ownerId, global7.worker.id)
|
||||
|
||||
val worker = Worker.start()
|
||||
val future = worker.execute(TransferMode.SAFE, { ownerId }) { ownerId ->
|
||||
assertEquals(ownerId, global7.worker.id)
|
||||
Unit
|
||||
}
|
||||
|
||||
future.result
|
||||
worker.requestTermination().result
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testLocal() {
|
||||
val local = WorkerBoundReference(A(3))
|
||||
@@ -276,6 +293,39 @@ fun testLocalModification() {
|
||||
worker.requestTermination().result
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testLocalGetWorker() {
|
||||
val local = WorkerBoundReference(A(3))
|
||||
|
||||
val ownerId = Worker.current.id
|
||||
assertEquals(ownerId, local.worker.id)
|
||||
|
||||
val worker = Worker.start()
|
||||
val future = worker.execute(TransferMode.SAFE, { Pair(local, ownerId) }) { (local, ownerId) ->
|
||||
assertEquals(ownerId, local.worker.id)
|
||||
Unit
|
||||
}
|
||||
|
||||
future.result
|
||||
worker.requestTermination().result
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testLocalForeignGetWorker() {
|
||||
val worker = Worker.start()
|
||||
val ownerId = worker.id
|
||||
val future = worker.execute(TransferMode.SAFE, { ownerId }) { ownerId ->
|
||||
val local = WorkerBoundReference(A(3))
|
||||
assertEquals(ownerId, local.worker.id)
|
||||
local
|
||||
}
|
||||
|
||||
val value = future.result
|
||||
assertEquals(ownerId, value.worker.id)
|
||||
|
||||
worker.requestTermination().result
|
||||
}
|
||||
|
||||
fun getOwnerAndWeaks(initial: Int): Triple<AtomicReference<WorkerBoundReference<A>?>, WeakReference<WorkerBoundReference<A>>, WeakReference<A>> {
|
||||
val ref = WorkerBoundReference(A(initial))
|
||||
val refOwner: AtomicReference<WorkerBoundReference<A>?> = AtomicReference(ref)
|
||||
|
||||
@@ -49,4 +49,9 @@ public class WorkerBoundReference<out T : Any>(value: T) {
|
||||
*/
|
||||
val valueOrNull: T?
|
||||
get() = @Suppress("UNCHECKED_CAST") (derefWorkerBoundReference(ptr) as T?)
|
||||
|
||||
/**
|
||||
* Worker that [value] is bound to.
|
||||
*/
|
||||
val worker: Worker = Worker.current
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user