Files
swift-mirror/test/Concurrency/Runtime/custom_executors.swift
Konrad `ktoso` Malawski fe66c47b8a [docs] Provide more documentation on custom executors with global actors
It could be confusing to adopters who were led to believe by the types
that they should "just" implement the sharedUnownedExecutor property,
but insead they have to implement the unownedExecutor on the specific
actor type.

Adding documentation clarify this as well as a simple test that
exercises this explicitly; We seem to have much coverage of main actor,
but not so much of custom executor global actors.
2024-06-12 12:28:55 +09:00

62 lines
1.4 KiB
Swift

// RUN: %target-run-simple-swift( -Xfrontend -disable-availability-checking %import-libdispatch -parse-as-library) | %FileCheck %s --dump-input=always
// REQUIRES: concurrency
// REQUIRES: executable_test
// UNSUPPORTED: freestanding
// UNSUPPORTED: back_deployment_runtime
// REQUIRES: concurrency_runtime
actor Simple {
var count = 0
func report() {
print("simple.count == \(count)")
count += 1
}
}
actor Custom {
var count = 0
let simple = Simple()
@available(SwiftStdlib 5.1, *)
nonisolated var unownedExecutor: UnownedSerialExecutor {
print("custom unownedExecutor")
return simple.unownedExecutor
}
func report() async {
simple.preconditionIsolated() // we're supposed to be on the same executor as 'simple'
print("custom.count == \(count)")
count += 1
await simple.report()
}
}
@available(SwiftStdlib 5.1, *)
@main struct Main {
static func main() async {
print("begin")
let actor = Custom()
await actor.report()
await actor.report()
await actor.report()
print("end")
}
}
// CHECK: begin
// CHECK-NEXT: custom unownedExecutor
// CHECK-NEXT: custom.count == 0
// CHECK-NEXT: simple.count == 0
// CHECK-NEXT: custom unownedExecutor
// CHECK-NEXT: custom.count == 1
// CHECK-NEXT: simple.count == 1
// CHECK-NEXT: custom unownedExecutor
// CHECK-NEXT: custom.count == 2
// CHECK-NEXT: simple.count == 2
// CHECK-NEXT: end