mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Use the `%target-swift-5.X-abi-triple` substitutions to compile the tests for deployment to the minimum OS versions required for the APIs used in the tests, instead of disabling availability checking.
65 lines
2.3 KiB
Swift
65 lines
2.3 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-frontend-emit-module -emit-module-path %t/FakeDistributedActorSystems.swiftmodule -module-name FakeDistributedActorSystems -target %target-swift-5.7-abi-triple %S/../Inputs/FakeDistributedActorSystems.swift
|
|
// RUN: %target-build-swift -target %target-swift-5.7-abi-triple -module-name main -j2 -parse-as-library -I %t %s %S/../Inputs/FakeDistributedActorSystems.swift -o %t/a.out
|
|
// RUN: %target-codesign %t/a.out
|
|
// RUN: %target-run %t/a.out
|
|
|
|
// REQUIRES: executable_test
|
|
// REQUIRES: concurrency
|
|
// REQUIRES: distributed
|
|
|
|
// rdar://76038845
|
|
// UNSUPPORTED: use_os_stdlib
|
|
// UNSUPPORTED: back_deployment_runtime
|
|
// UNSUPPORTED: freestanding
|
|
|
|
// FIXME(distributed): Distributed actors currently have some issues on windows rdar://82593574
|
|
// UNSUPPORTED: OS=windows-msvc
|
|
|
|
import StdlibUnittest
|
|
import Distributed
|
|
import FakeDistributedActorSystems
|
|
|
|
@available(SwiftStdlib 5.9, *)
|
|
typealias DefaultDistributedActorSystem = FakeRoundtripActorSystem
|
|
|
|
@available(SwiftStdlib 5.9, *)
|
|
func globalFunc(isolatedTo actor: isolated any DistributedActor) async {
|
|
MainActor.preconditionIsolated() // we forced the `actor` onto the main actor's executor
|
|
}
|
|
|
|
@available(SwiftStdlib 5.9, *) // because conforming to the protocol requirement introduced in 5.9
|
|
distributed actor NormalWorker {
|
|
|
|
nonisolated var unownedExecutor: UnownedSerialExecutor {
|
|
return MainActor.sharedUnownedExecutor
|
|
}
|
|
|
|
distributed func offerSelf() async {
|
|
print("executed: \(#function)")
|
|
MainActor.preconditionIsolated() // we forced the `actor` onto the main actor's executor
|
|
|
|
await globalFunc(isolatedTo: self)
|
|
MainActor.preconditionIsolated() // we forced the `actor` onto the main actor's executor
|
|
}
|
|
}
|
|
|
|
@available(SwiftStdlib 5.1, *)
|
|
@main struct Main {
|
|
@available(SwiftStdlib 5.1, *)
|
|
static func main() async {
|
|
if #available(SwiftStdlib 5.9, *) {
|
|
let tests = TestSuite("DistributedIsolatedTests")
|
|
let system = DefaultDistributedActorSystem()
|
|
let normalLocalWorker = NormalWorker(actorSystem: system)
|
|
precondition(__isLocalActor(normalLocalWorker), "must be local")
|
|
|
|
tests.test("remote actor reference should have crash-on-enqueue executor") {
|
|
try! await normalLocalWorker.offerSelf()
|
|
}
|
|
|
|
await runAllTestsAsync()
|
|
}
|
|
}
|
|
}
|