Skip to content

Commit 91908a1

Browse files
committed
Add failing test for concurrency safety
1 parent fb15075 commit 91908a1

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

Tests/DefaultsKitTests/DefaultsTests.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,4 +213,35 @@ 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+
// Add a task to the group
230+
taskGroup.addTask {
231+
defaults.set(i, for: .integerKey) // Write a value
232+
if let value = defaults.get(for: .integerKey) {
233+
Task.detached {
234+
actual += value
235+
}
236+
}
237+
Task.detached {
238+
expected += i
239+
}
240+
}
241+
}
242+
}
243+
244+
// Then
245+
#expect(expected == actual)
246+
}
216247
}

0 commit comments

Comments
 (0)