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
|
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
|
@Test
|
||||||
fun testLocal() {
|
fun testLocal() {
|
||||||
val local = WorkerBoundReference(A(3))
|
val local = WorkerBoundReference(A(3))
|
||||||
@@ -276,6 +293,39 @@ fun testLocalModification() {
|
|||||||
worker.requestTermination().result
|
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>> {
|
fun getOwnerAndWeaks(initial: Int): Triple<AtomicReference<WorkerBoundReference<A>?>, WeakReference<WorkerBoundReference<A>>, WeakReference<A>> {
|
||||||
val ref = WorkerBoundReference(A(initial))
|
val ref = WorkerBoundReference(A(initial))
|
||||||
val refOwner: AtomicReference<WorkerBoundReference<A>?> = AtomicReference(ref)
|
val refOwner: AtomicReference<WorkerBoundReference<A>?> = AtomicReference(ref)
|
||||||
|
|||||||
@@ -49,4 +49,9 @@ public class WorkerBoundReference<out T : Any>(value: T) {
|
|||||||
*/
|
*/
|
||||||
val valueOrNull: T?
|
val valueOrNull: T?
|
||||||
get() = @Suppress("UNCHECKED_CAST") (derefWorkerBoundReference(ptr) as 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