7
7
8
8
namespace BitFaster . Caching . UnitTests . Lru
9
9
{
10
- public abstract class ConcurrentTLruTests
10
+ public class ConcurrentTLruTests
11
11
{
12
12
private readonly TimeSpan timeToLive = TimeSpan . FromMilliseconds ( 10 ) ;
13
13
private readonly ICapacityPartition capacity = new EqualCapacityPartition ( 9 ) ;
14
- private ICache < int , string > lru ;
14
+ private ConcurrentTLru < int , string > lru ;
15
15
16
16
private ValueFactory valueFactory = new ValueFactory ( ) ;
17
17
@@ -25,7 +25,10 @@ private void OnLruItemRemoved(object sender, ItemRemovedEventArgs<int, int> e)
25
25
removedItems . Add ( e ) ;
26
26
}
27
27
28
- protected abstract ICache < K , V > CreateTLru < K , V > ( ICapacityPartition capacity , TimeSpan timeToLive ) ;
28
+ public ConcurrentTLru < K , V > CreateTLru < K , V > ( ICapacityPartition capacity , TimeSpan timeToLive )
29
+ {
30
+ return new ConcurrentTLru < K , V > ( 1 , capacity , EqualityComparer < K > . Default , timeToLive ) ;
31
+ }
29
32
30
33
public ConcurrentTLruTests ( )
31
34
{
@@ -159,7 +162,9 @@ public void WhenItemsAreExpiredExpireRemovesExpiredItems()
159
162
{
160
163
lru . Policy . ExpireAfterWrite . Value . TrimExpired ( ) ;
161
164
162
- lru . Count . Should ( ) . Be ( 0 ) ;
165
+ lru . HotCount . Should ( ) . Be ( 0 ) ;
166
+ lru . WarmCount . Should ( ) . Be ( 0 ) ;
167
+ lru . ColdCount . Should ( ) . Be ( 0 ) ;
163
168
}
164
169
) ;
165
170
}
@@ -199,6 +204,9 @@ public void WhenExpiredItemsAreTrimmedCacheMarkedCold()
199
204
}
200
205
201
206
lru . Count . Should ( ) . Be ( lru . Policy . Eviction . Value . Capacity ) ;
207
+
208
+ var total = lru . HotCount + lru . WarmCount + lru . ColdCount ;
209
+ total . Should ( ) . Be ( lru . Policy . Eviction . Value . Capacity ) ;
202
210
}
203
211
) ;
204
212
}
@@ -230,6 +238,9 @@ public void WhenCacheHasExpiredAndFreshItemsExpireRemovesOnlyExpiredItems()
230
238
lru . Policy . ExpireAfterWrite . Value . TrimExpired ( ) ;
231
239
232
240
lru . Count . Should ( ) . Be ( 3 ) ;
241
+
242
+ var total = lru . HotCount + lru . WarmCount + lru . ColdCount ;
243
+ total . Should ( ) . Be ( 3 ) ;
233
244
}
234
245
) ;
235
246
}
@@ -253,17 +264,54 @@ public void WhenItemsAreExpiredTrimRemovesExpiredItems()
253
264
lru . Policy . Eviction . Value . Trim ( 1 ) ;
254
265
255
266
lru . Count . Should ( ) . Be ( 0 ) ;
267
+
268
+ lru . HotCount . Should ( ) . Be ( 0 ) ;
269
+ lru . WarmCount . Should ( ) . Be ( 0 ) ;
270
+ lru . ColdCount . Should ( ) . Be ( 0 ) ;
256
271
}
257
272
) ;
258
273
}
259
- }
260
274
261
- public class ConcurrentTLruDefaultClockTests : ConcurrentTLruTests
262
- {
263
- protected override ICache < K , V > CreateTLru < K , V > ( ICapacityPartition capacity , TimeSpan timeToLive )
275
+ [ Fact ]
276
+ public void WhenItemsAreExpiredCountFiltersExpiredItems ( )
264
277
{
265
- // backcompat: use TLruTickCount64Policy
266
- return new ConcurrentTLru < K , V > ( 1 , capacity , EqualityComparer < K > . Default , timeToLive ) ;
278
+ Timed . Execute (
279
+ lru ,
280
+ lru =>
281
+ {
282
+ lru . AddOrUpdate ( 1 , "1" ) ;
283
+ lru . AddOrUpdate ( 2 , "2" ) ;
284
+ lru . AddOrUpdate ( 3 , "3" ) ;
285
+
286
+ return lru ;
287
+ } ,
288
+ timeToLive . MultiplyBy ( ttlWaitMlutiplier ) ,
289
+ lru =>
290
+ {
291
+ lru . Count . Should ( ) . Be ( 0 ) ;
292
+ }
293
+ ) ;
294
+ }
295
+
296
+ [ Fact ]
297
+ public void WhenItemsAreExpiredEnumerateFiltersExpiredItems ( )
298
+ {
299
+ Timed . Execute (
300
+ lru ,
301
+ lru =>
302
+ {
303
+ lru . AddOrUpdate ( 1 , "1" ) ;
304
+ lru . AddOrUpdate ( 2 , "2" ) ;
305
+ lru . AddOrUpdate ( 3 , "3" ) ;
306
+
307
+ return lru ;
308
+ } ,
309
+ timeToLive . MultiplyBy ( ttlWaitMlutiplier ) ,
310
+ lru =>
311
+ {
312
+ lru . Should ( ) . BeEquivalentTo ( Array . Empty < KeyValuePair < int , string > > ( ) ) ;
313
+ }
314
+ ) ;
267
315
}
268
316
269
317
[ Fact ]
@@ -290,13 +338,4 @@ public void ConstructPartitionCtorReturnsCapacity()
290
338
x . Capacity . Should ( ) . Be ( 3 ) ;
291
339
}
292
340
}
293
-
294
- public class ConcurrentTLruHighResClockTests : ConcurrentTLruTests
295
- {
296
- protected override ICache < K , V > CreateTLru < K , V > ( ICapacityPartition capacity , TimeSpan timeToLive )
297
- {
298
- // backcompat: use TlruStopwatchPolicy
299
- return new ConcurrentLruCore < K , V , LongTickCountLruItem < K , V > , TLruLongTicksPolicy < K , V > , TelemetryPolicy < K , V > > ( 1 , capacity , EqualityComparer < K > . Default , new TLruLongTicksPolicy < K , V > ( timeToLive ) , default ) ;
300
- }
301
- }
302
341
}
0 commit comments