Skip to content

Commit 3cc34f0

Browse files
committed
Add failing test for concurrency safety
1 parent fb15075 commit 3cc34f0

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

Tests/DefaultsKitTests/DefaultsTests.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,4 +213,34 @@ struct DefaultsKitTests {
213213
let actual = defaults.get(for: .personMockKey)
214214
#expect(expected == actual)
215215
}
216+
217+
@Test
218+
func testThreadSafe() async throws {
219+
// Given
220+
let defaults = Defaults.shared
221+
let iterations = 10000
222+
223+
// When
224+
var expected = 0
225+
var actual = 0
226+
227+
await withTaskGroup(of: Void.self) { taskGroup in
228+
for i in 1 ... iterations {
229+
taskGroup.addTask {
230+
defaults.set(i, for: .integerKey) // Write a value
231+
if let value = defaults.get(for: .integerKey) {
232+
Task.detached {
233+
actual += value
234+
}
235+
}
236+
Task.detached {
237+
expected += i
238+
}
239+
}
240+
}
241+
}
242+
243+
// Then
244+
#expect(expected == actual)
245+
}
216246
}

0 commit comments

Comments
 (0)