// RUN: %target-run-simple-swift(-Xfrontend -enable-experimental-concurrency %import-libdispatch -parse-as-library) | %FileCheck %s --dump-input always // REQUIRES: executable_test // REQUIRES: concurrency // REQUIRES: libdispatch // rdar://76038845 // UNSUPPORTED: use_os_stdlib import _Concurrency // FIXME: should not depend on Dispatch import Dispatch @available(macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, *) @main struct Main { static let pause = 500_000_000 // 500ms static func main() async { await testSleepDuration() await testSleepDoesNotBlock() } static func testSleepDuration() async { let start = DispatchTime.now() await Task.sleep(UInt64(pause)) let stop = DispatchTime.now() // assert that at least the specified time passed since calling `sleep` assert(stop >= (start + .nanoseconds(pause))) } static func testSleepDoesNotBlock() async { // FIXME: Should run on main executor let task = detach { print("Run first") } await Task.sleep(UInt64(pause)) print("Run second") // CHECK: Run first // CHECK: Run second await task.get() } }