Skip to content

Commit a70cd95

Browse files
committed
[TaskLocals] move all tests to new style API
1 parent 664936c commit a70cd95

File tree

2 files changed

+53
-44
lines changed

2 files changed

+53
-44
lines changed

stdlib/private/StdlibUnittest/StdlibUnittest.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,13 @@ public func expectCrash(withMessage message: String = "", executing: () -> Void)
723723
fatalError()
724724
}
725725

726+
public func expectCrashAsync(withMessage message: String = "", executing: () async -> Void) async -> Never {
727+
expectCrashLater(withMessage: message)
728+
await executing()
729+
expectUnreachable()
730+
fatalError()
731+
}
732+
726733
func _defaultTestSuiteFailedCallback() {
727734
abort()
728735
}

test/Concurrency/Runtime/async_task_locals_basic.swift

Lines changed: 46 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ enum TL {
2727
static var number: Int = 0
2828

2929
@TaskLocal
30-
static var never: StringLike = "<never>"
30+
static var never: StringLike = .init("<never>")
3131

3232
@TaskLocal
33-
static var clazz: ClassTaskLocal = nil
33+
static var clazz: ClassTaskLocal? = nil
3434
}
3535

3636
@available(macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, *)
@@ -45,37 +45,39 @@ final class ClassTaskLocal {
4545
}
4646

4747
@available(macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, *)
48-
func printTaskLocal<Key>(
49-
_ key: KeyPath<TaskLocalValues, Key>,
50-
_ expected: Key.Value? = nil,
51-
file: String = #file, line: UInt = #line, function: String = #function
52-
) where Key: TaskLocalKey {
53-
let value = Task.local(key)
54-
print("\(Key.self): \(value) at \(file):\(line)")
48+
@discardableResult
49+
func printTaskLocal<V, Key>(
50+
_ key: Key,
51+
_ expected: V? = nil,
52+
file: String = #file, line: UInt = #line
53+
) -> V? where Key: TaskLocal<V> {
54+
let value = key
55+
print("\(value) at \(file):\(line)")
5556
if let expected = expected {
56-
assert("\(expected)" == "\(value)",
57-
"Expected [\(expected)] but found: \(value), at \(file):\(line)")
57+
assert("\(expected)" == "\(value.wrappedValue)",
58+
"Expected [\(expected)] but found: \(value), at \(file):\(line)")
5859
}
60+
return expected
5961
}
6062

6163
// ==== ------------------------------------------------------------------------
6264

6365
@available(macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, *)
6466
func simple() async {
65-
printTaskLocal(TL.$number) // CHECK: TaskLocal<Int>(2)
67+
printTaskLocal(TL.$number) // CHECK: TaskLocal<Int>(0)
6668
await TL.$number.withValue(1) {
6769
printTaskLocal(TL.$number) // CHECK-NEXT: TaskLocal<Int>(1)
6870
}
6971
}
7072

7173
@available(macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, *)
7274
func simple_deinit() async {
73-
await Task.withLocal(\.clazz, boundTo: ClassTaskLocal()) {
75+
await TL.$clazz.withValue(ClassTaskLocal()) {
7476
// CHECK: clazz init [[C:.*]]
75-
printTaskLocal(\.clazz) // CHECK: ClazzKey: Optional(main.ClassTaskLocal) {{.*}}
77+
printTaskLocal(TL.$clazz) // CHECK: TaskLocal<Optional<ClassTaskLocal>>(Optional(main.ClassTaskLocal))
7678
}
7779
// CHECK: clazz deinit [[C]]
78-
printTaskLocal(\.clazz) // CHECK: ClazzKey: nil {{.*}}
80+
printTaskLocal(TL.$clazz) // CHECK: TaskLocal<Optional<ClassTaskLocal>>(nil)
7981
}
8082

8183
struct Boom: Error {
@@ -84,7 +86,7 @@ struct Boom: Error {
8486
@available(macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, *)
8587
func simple_throw() async {
8688
do {
87-
try await Task.withLocal(\.clazz, boundTo: ClassTaskLocal()) {
89+
try await TL.$clazz.withValue(ClassTaskLocal()) {
8890
throw Boom(value: "oh no!")
8991
}
9092
} catch {
@@ -95,59 +97,59 @@ func simple_throw() async {
9597

9698
@available(macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, *)
9799
func nested() async {
98-
printTaskLocal(\.string) // CHECK: StringKey: <undefined> {{.*}}
99-
await Task.withLocal(\.string, boundTo: "hello") {
100-
printTaskLocal(TL.$number) // CHECK-NEXT: TaskLocal<Int>(2)
101-
printTaskLocal(\.string)// CHECK-NEXT: StringKey: hello {{.*}}
100+
printTaskLocal(TL.$string) // CHECK: TaskLocal<String>(<undefined>)
101+
await TL.$string.withValue("hello") {
102+
printTaskLocal(TL.$number) // CHECK-NEXT: TaskLocal<Int>(0)
103+
printTaskLocal(TL.$string)// CHECK-NEXT: TaskLocal<String>(hello)
102104
await TL.$number.withValue(2) {
103105
printTaskLocal(TL.$number) // CHECK-NEXT: TaskLocal<Int>(2)
104-
printTaskLocal(\.string, "hello") // CHECK: StringKey: hello {{.*}}
106+
printTaskLocal(TL.$string, "hello") // CHECK: TaskLocal<String>(hello)
105107
}
106-
printTaskLocal(TL.$number) // CHECK-NEXT: TaskLocal<Int>(2)
107-
printTaskLocal(\.string) // CHECK-NEXT: StringKey: hello {{.*}}
108+
printTaskLocal(TL.$number) // CHECK-NEXT: TaskLocal<Int>(0)
109+
printTaskLocal(TL.$string) // CHECK-NEXT: TaskLocal<String>(hello)
108110
}
109-
printTaskLocal(TL.$number) // CHECK-NEXT: TaskLocal<Int>(2)
110-
printTaskLocal(\.string) // CHECK-NEXT: StringKey: <undefined> {{.*}}
111+
printTaskLocal(TL.$number) // CHECK-NEXT: TaskLocal<Int>(0)
112+
printTaskLocal(TL.$string) // CHECK-NEXT: TaskLocal<String>(<undefined>)
111113
}
112114

113115
@available(macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, *)
114116
func nested_allContribute() async {
115-
printTaskLocal(\.string) // CHECK: StringKey: <undefined> {{.*}}
116-
await Task.withLocal(\.string, boundTo: "one") {
117-
printTaskLocal(\.string, "one")// CHECK-NEXT: StringKey: one {{.*}}
118-
await Task.withLocal(\.string, boundTo: "two") {
119-
printTaskLocal(\.string, "two") // CHECK-NEXT: StringKey: two {{.*}}
120-
await Task.withLocal(\.string, boundTo: "three") {
121-
printTaskLocal(\.string, "three") // CHECK-NEXT: StringKey: three {{.*}}
117+
printTaskLocal(TL.$string) // CHECK: TaskLocal<String>(<undefined>)
118+
await TL.$string.withValue("one") {
119+
printTaskLocal(TL.$string, "one")// CHECK-NEXT: TaskLocal<String>(one)
120+
await TL.$string.withValue("two") {
121+
printTaskLocal(TL.$string, "two") // CHECK-NEXT: TaskLocal<String>(two)
122+
await TL.$string.withValue("three") {
123+
printTaskLocal(TL.$string, "three") // CHECK-NEXT: TaskLocal<String>(three)
122124
}
123-
printTaskLocal(\.string, "two") // CHECK-NEXT: StringKey: two {{.*}}
125+
printTaskLocal(TL.$string, "two") // CHECK-NEXT: TaskLocal<String>(two)
124126
}
125-
printTaskLocal(\.string, "one")// CHECK-NEXT: StringKey: one {{.*}}
127+
printTaskLocal(TL.$string, "one")// CHECK-NEXT: TaskLocal<String>(one)
126128
}
127-
printTaskLocal(\.string) // CHECK-NEXT: StringKey: <undefined> {{.*}}
129+
printTaskLocal(TL.$string) // CHECK-NEXT: TaskLocal<String>(<undefined>)
128130
}
129131

130132
@available(macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, *)
131133
func nested_3_onlyTopContributes() async {
132-
printTaskLocal(\.string) // CHECK: StringKey: <undefined> {{.*}}
133-
await Task.withLocal(\.string, boundTo: "one") {
134-
printTaskLocal(\.string)// CHECK-NEXT: StringKey: one {{.*}}
134+
printTaskLocal(TL.$string) // CHECK: TaskLocal<String>(<undefined>)
135+
await TL.$string.withValue("one") {
136+
printTaskLocal(TL.$string)// CHECK-NEXT: TaskLocal<String>(one)
135137
await TL.$number.withValue(2) {
136-
printTaskLocal(\.string) // CHECK-NEXT: StringKey: one {{.*}}
138+
printTaskLocal(TL.$string) // CHECK-NEXT: TaskLocal<String>(one)
137139
await TL.$number.withValue(3) {
138-
printTaskLocal(\.string) // CHECK-NEXT: StringKey: one {{.*}}
140+
printTaskLocal(TL.$string) // CHECK-NEXT: TaskLocal<String>(one)
139141
}
140-
printTaskLocal(\.string) // CHECK-NEXT: StringKey: one {{.*}}
142+
printTaskLocal(TL.$string) // CHECK-NEXT: TaskLocal<String>(one)
141143
}
142-
printTaskLocal(\.string)// CHECK-NEXT: StringKey: one {{.*}}
144+
printTaskLocal(TL.$string)// CHECK-NEXT: TaskLocal<String>(one)
143145
}
144-
printTaskLocal(\.string) // CHECK-NEXT: StringKey: <undefined> {{.*}}
146+
printTaskLocal(TL.$string) // CHECK-NEXT: TaskLocal<String>(<undefined>)
145147
}
146148

147149
@available(macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, *)
148150
func withLocal_body_mustNotEscape() async {
149151
var something = "Nice"
150-
await Task.withLocal(\.string, boundTo: "xxx") {
152+
await TL.$string.withValue("xxx") {
151153
something = "very nice"
152154
}
153155
_ = something // silence not used warning

0 commit comments

Comments
 (0)