29
29
// SOFTWARE.
30
30
//
31
31
32
+ #if canImport(Testing)
32
33
@testable import Mutex
33
- import XCTest
34
+ import Testing
34
35
35
- final class AllocatedLockTests : XCTestCase {
36
+ struct AllocatedLockTests {
36
37
37
- func testLockState_IsProtected( ) async {
38
+ @Test
39
+ func lockState_IsProtected( ) async {
38
40
let state = AllocatedLock < Int > ( initialState: 0 )
39
41
40
42
let total = await withTaskGroup ( of: Void . self) { group in
@@ -47,17 +49,18 @@ final class AllocatedLockTests: XCTestCase {
47
49
return state. withLock { $0 }
48
50
}
49
51
50
- XCTAssertEqual ( total, 500500 )
52
+ #expect ( total == 500500 )
51
53
}
52
54
53
- func testLock_ReturnsValue( ) async {
55
+ @Test
56
+ func lock_ReturnsValue( ) async {
54
57
let lock = AllocatedLock ( )
55
58
let value = lock. withLock { true }
56
- XCTAssertTrue ( value)
59
+ #expect ( value)
57
60
}
58
61
59
-
60
- func testLock_Blocks ( ) async {
62
+ @ Test
63
+ func lock_Blocks ( ) async {
61
64
let lock = AllocatedLock ( )
62
65
await MainActor . run {
63
66
lock. unsafeLock ( )
@@ -82,99 +85,95 @@ final class AllocatedLockTests: XCTestCase {
82
85
let second = await group. next ( ) !
83
86
return [ first, second]
84
87
}
85
- XCTAssertEqual ( results, [ true , false ] )
88
+ #expect ( results == [ true , false ] )
86
89
}
87
90
88
- func testTryLock( ) {
91
+ @Test
92
+ func tryLock( ) {
89
93
let lock = AllocatedLock ( )
90
94
let value = lock. withLock { true }
91
- XCTAssertTrue ( value)
95
+ #expect ( value)
92
96
}
93
97
94
- func testIfAvailable( ) {
98
+ @Test
99
+ func ifAvailable( ) {
95
100
let lock = AllocatedLock ( uncheckedState: 5 )
96
- XCTAssertEqual (
97
- lock. withLock { _ in " fish " } ,
98
- " fish "
101
+ #expect(
102
+ lock. withLock { _ in " fish " } == " fish "
99
103
)
100
104
101
105
lock. unsafeLock ( )
102
- XCTAssertEqual (
103
- lock. withLockIfAvailable { _ in " fish " } ,
104
- String ? . none
106
+ #expect(
107
+ lock. withLockIfAvailable { _ in " fish " } == nil
105
108
)
106
109
107
110
lock. unsafeUnlock ( )
108
- XCTAssertEqual (
109
- lock. withLockIfAvailable { _ in " fish " } ,
110
- " fish "
111
+ #expect(
112
+ lock. withLockIfAvailable { _ in " fish " } == " fish "
111
113
)
112
114
}
113
115
114
- func testIfAvailableUnchecked( ) {
116
+ @Test
117
+ func ifAvailableUnchecked( ) {
115
118
let lock = AllocatedLock ( uncheckedState: NonSendable ( " fish " ) )
116
- XCTAssertEqual (
117
- lock. withLockUnchecked { $0 } . name,
118
- " fish "
119
+ #expect(
120
+ lock. withLockUnchecked { $0 } . name == " fish "
119
121
)
120
122
121
123
lock. unsafeLock ( )
122
- XCTAssertNil (
123
- lock. withLockIfAvailableUnchecked { $0 } ? . name
124
+ #expect (
125
+ lock. withLockIfAvailableUnchecked { $0 } ? . name == nil
124
126
)
125
127
126
128
lock. unsafeUnlock ( )
127
- XCTAssertEqual (
128
- lock. withLockIfAvailableUnchecked { $0 } ? . name,
129
- " fish "
129
+ #expect(
130
+ lock. withLockIfAvailableUnchecked { $0 } ? . name == " fish "
130
131
)
131
132
}
132
133
133
- func testVoidIfAvailable( ) {
134
+ @Test
135
+ func voidIfAvailable( ) {
134
136
let lock = AllocatedLock ( )
135
- XCTAssertEqual (
136
- lock. withLock { " fish " } ,
137
- " fish "
137
+ #expect(
138
+ lock. withLock { " fish " } == " fish "
138
139
)
139
140
140
141
lock. unsafeLock ( )
141
- XCTAssertEqual (
142
- lock. withLockIfAvailable { " fish " } ,
143
- String ? . none
142
+ #expect(
143
+ lock. withLockIfAvailable { " fish " } == nil
144
144
)
145
145
146
146
lock. unsafeUnlock ( )
147
- XCTAssertEqual (
148
- lock. withLockIfAvailable { " fish " } ,
149
- " fish "
147
+ #expect(
148
+ lock. withLockIfAvailable { " fish " } == " fish "
150
149
)
151
150
}
152
151
153
- func testVoidIfAvailableUnchecked( ) {
152
+ @Test
153
+ func voidIfAvailableUnchecked( ) {
154
154
let lock = AllocatedLock ( )
155
- XCTAssertEqual (
156
- lock. withLockUnchecked { NonSendable ( " fish " ) } . name,
157
- " fish "
155
+ #expect(
156
+ lock. withLockUnchecked { NonSendable ( " fish " ) } . name == " fish "
158
157
)
159
158
160
159
lock. lock ( )
161
- XCTAssertNil (
162
- lock. withLockIfAvailableUnchecked { NonSendable ( " fish " ) }
160
+ #expect (
161
+ lock. withLockIfAvailableUnchecked { NonSendable ( " fish " ) } == nil
163
162
)
164
163
165
164
lock. unlock ( )
166
- XCTAssertEqual (
167
- lock. withLockIfAvailableUnchecked { NonSendable ( " chips " ) } ? . name,
168
- " chips "
165
+ #expect(
166
+ lock. withLockIfAvailableUnchecked { NonSendable ( " chips " ) } ? . name == " chips "
169
167
)
170
168
}
171
169
172
- func testVoidLock( ) {
170
+ @Test
171
+ func voidLock( ) {
173
172
let lock = AllocatedLock ( )
174
173
lock. lock ( )
175
- XCTAssertFalse ( lock. lockIfAvailable ( ) )
174
+ #expect ( lock. lockIfAvailable ( ) == false )
176
175
lock. unlock ( )
177
- XCTAssertTrue ( lock. lockIfAvailable ( ) )
176
+ #expect ( lock. lockIfAvailable ( ) )
178
177
lock. unlock ( )
179
178
}
180
179
}
@@ -187,9 +186,4 @@ public final class NonSendable {
187
186
self . name = name
188
187
}
189
188
}
190
-
191
- // sidestep warning: unavailable from asynchronous contexts
192
- extension AllocatedLock {
193
- func unsafeLock( ) { storage. lock ( ) }
194
- func unsafeUnlock( ) { storage. unlock ( ) }
195
- }
189
+ #endif
0 commit comments