@@ -16,17 +16,6 @@ func yield(until condition: @autoclosure () async -> Bool, message: @autoclosure
16
16
throw E ( errorDescription: message ( ) )
17
17
}
18
18
19
- private extension Staging {
20
- func changes( for key: Key ) -> Change ? {
21
- for stage in stages {
22
- if let change = stage. changes [ key] {
23
- return change
24
- }
25
- }
26
- return nil
27
- }
28
- }
29
-
30
19
@MainActor
31
20
final class DiskCacheTests : XCTestCase {
32
21
private var tmpDir : URL !
@@ -56,39 +45,38 @@ final class DiskCacheTests: XCTestCase {
56
45
let clock = ManualClock ( )
57
46
let cache = DiskCache < String > ( options: cacheOptions ( ) , clock: clock, logger: . init( . default) )
58
47
59
- await cache. store ( Data ( ) , for: " empty " ) . value
48
+ cache. store ( Data ( ) , for: " empty " )
49
+
50
+ try await yield ( until: await cache. isFlushScheduled)
60
51
61
52
do {
62
53
// load from staging (memory)
63
- let change = await cache. staging . changes ( for: " empty " )
64
- XCTAssertNotNil ( change )
54
+ let data = try await cache. value ( for: " empty " )
55
+ XCTAssertNotNil ( data )
65
56
66
57
let url = try XCTUnwrap ( cache. url ( for: " empty " ) )
67
58
XCTAssertFalse ( FileManager . default. fileExists ( atPath: url. path) )
68
-
69
- let data = try await cache. value ( for: " empty " )
70
- XCTAssertNotNil ( data)
71
59
} catch {
72
60
XCTFail ( " \( error) " )
73
61
}
74
62
75
63
clock. advance ( by: . milliseconds( 500 ) )
64
+ try ? await SuspendingClock ( ) . sleep ( until: . now. advanced ( by: . microseconds( 300 ) ) )
76
65
77
66
XCTAssertEqual ( numberOfItems, 0 )
78
67
79
68
clock. advance ( by: . milliseconds( 500 ) )
80
-
81
- try await yield ( until: await cache. staging. changes ( for: " empty " ) == nil )
69
+ try ? await SuspendingClock ( ) . sleep ( until: . now. advanced ( by: . microseconds( 300 ) ) )
82
70
83
71
XCTAssertEqual ( numberOfItems, 1 )
84
72
85
73
do {
86
74
// load from disk
87
- let url = try XCTUnwrap ( cache. url ( for: " empty " ) )
88
- XCTAssertTrue ( FileManager . default. fileExists ( atPath: url. path) )
89
-
90
75
let data = try await cache. value ( for: " empty " )
91
76
XCTAssertNotNil ( data)
77
+
78
+ let url = try XCTUnwrap ( cache. url ( for: " empty " ) )
79
+ XCTAssertTrue ( FileManager . default. fileExists ( atPath: url. path) )
92
80
} catch {
93
81
XCTFail ( " \( error) " )
94
82
}
@@ -100,7 +88,9 @@ final class DiskCacheTests: XCTestCase {
100
88
let cache = DiskCache < String > ( options: cacheOptions ( ) , clock: clock, logger: . init( . default) )
101
89
102
90
cache. store ( Data ( [ 1 ] ) , for: " item0 " )
103
- await cache. store ( Data ( [ 1 , 2 ] ) , for: " item1 " ) . value
91
+ cache. store ( Data ( [ 1 , 2 ] ) , for: " item1 " )
92
+
93
+ try await yield ( until: await cache. isFlushScheduled)
104
94
105
95
do {
106
96
cache. logger. debug ( " check staging items " )
@@ -110,7 +100,7 @@ final class DiskCacheTests: XCTestCase {
110
100
111
101
clock. advance ( by: . milliseconds( 1000 ) )
112
102
113
- try await yield ( until : await cache. staging . stages . isEmpty )
103
+ try ? await cache. flushingTask ? . value
114
104
115
105
XCTAssertEqual ( numberOfItems, 2 )
116
106
}
@@ -123,7 +113,9 @@ final class DiskCacheTests: XCTestCase {
123
113
124
114
cache. store ( Data ( [ 1 ] ) , for: " item0 " )
125
115
cache. store ( Data ( [ 1 , 2 ] ) , for: " item1 " )
126
- await cache. remove ( for: " item0 " ) . value
116
+ cache. remove ( for: " item0 " )
117
+
118
+ try await yield ( until: await cache. isFlushScheduled)
127
119
128
120
do {
129
121
let data0 = try await cache. value ( for: " item0 " )
@@ -145,7 +137,7 @@ final class DiskCacheTests: XCTestCase {
145
137
146
138
clock. advance ( by: . milliseconds( 1000 ) )
147
139
148
- try await yield ( until : await cache. staging . stages . isEmpty )
140
+ try ? await cache. flushingTask ? . value
149
141
150
142
XCTAssertEqual ( numberOfItems, 1 )
151
143
}
@@ -194,7 +186,7 @@ final class DiskCacheTests: XCTestCase {
194
186
}
195
187
196
188
@available ( macOS 13 . 0 , iOS 16 . 0 , watchOS 9 . 0 , tvOS 16 . 0 , * )
197
- func testSweep( ) async {
189
+ func testSweep( ) async throws {
198
190
let allocationUnit = 4096
199
191
200
192
var options = cacheOptions ( ) as DiskCache < String > . Options
@@ -204,17 +196,19 @@ final class DiskCacheTests: XCTestCase {
204
196
205
197
cache. store ( Data ( [ 1 ] ) , for: " item0 " )
206
198
cache. store ( Data ( [ 1 , 2 ] ) , for: " item1 " )
207
- await cache. store ( Data ( [ 1 , 2 , 3 ] ) , for: " item2 " ) . value
199
+ cache. store ( Data ( [ 1 , 2 , 3 ] ) , for: " item2 " )
200
+
201
+ try await yield ( until: await cache. isFlushScheduled)
208
202
209
203
do {
210
204
cache. logger. debug ( " check staging layers " )
211
205
clock. advance ( by: . milliseconds( 1000 ) )
212
206
207
+ try ? await cache. flushingTask? . value
208
+
213
209
let data2 = try ? await cache. value ( for: " item2 " )
214
210
XCTAssertEqual ( data2, Data ( [ 1 , 2 , 3 ] ) )
215
211
216
- try ? await cache. flushingTask? . value
217
-
218
212
XCTAssertEqual ( numberOfItems, 3 )
219
213
}
220
214
0 commit comments