Skip to content

Commit 694d043

Browse files
authored
CachePolicy supports TryTrimExpired (#470)
1 parent 0f53f0b commit 694d043

File tree

2 files changed

+50
-6
lines changed

2 files changed

+50
-6
lines changed

BitFaster.Caching.UnitTests/CachePolicyTests.cs

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
4-
using System.Text;
5-
using System.Threading.Tasks;
6-
using FluentAssertions;
1+
using FluentAssertions;
72
using Moq;
83
using Xunit;
94

@@ -21,6 +16,33 @@ public void WhenCtorFieldsAreAssigned()
2116

2217
cp.Eviction.Value.Should().Be(eviction.Object);
2318
cp.ExpireAfterWrite.Value.Should().Be(expire.Object);
19+
cp.ExpireAfterAccess.HasValue.Should().BeFalse();
20+
}
21+
22+
[Fact]
23+
public void TryTrimWhenTrimNotSupportedReturnsFalse()
24+
{
25+
var cp = new CachePolicy(Optional<IBoundedPolicy>.None(), Optional<ITimePolicy>.None());
26+
27+
cp.TryTrimExpired().Should().BeFalse();
28+
}
29+
30+
[Fact]
31+
public void TryTrimWhenExpireAfterWriteReturnsTrue()
32+
{
33+
var expire = new Mock<ITimePolicy>();
34+
var cp = new CachePolicy(Optional<IBoundedPolicy>.None(), new Optional<ITimePolicy>(expire.Object));
35+
36+
cp.TryTrimExpired().Should().BeTrue();
37+
}
38+
39+
[Fact]
40+
public void TryTrimWhenExpireAfterAccessReturnsTrue()
41+
{
42+
var expire = new Mock<ITimePolicy>();
43+
var cp = new CachePolicy(Optional<IBoundedPolicy>.None(), Optional<ITimePolicy>.None(), new Optional<ITimePolicy>(expire.Object));
44+
45+
cp.TryTrimExpired().Should().BeTrue();
2446
}
2547
}
2648
}

BitFaster.Caching/CachePolicy.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public CachePolicy(Optional<IBoundedPolicy> eviction, Optional<ITimePolicy> expi
1616
{
1717
this.Eviction = eviction;
1818
this.ExpireAfterWrite = expireAfterWrite;
19+
this.ExpireAfterAccess = Optional<ITimePolicy>.None();
1920
}
2021

2122
/// <summary>
@@ -48,5 +49,26 @@ public CachePolicy(Optional<IBoundedPolicy> eviction, Optional<ITimePolicy> expi
4849
/// fixed duration since an entry's creation or most recent read/write access.
4950
/// </summary>
5051
public Optional<ITimePolicy> ExpireAfterAccess { get; }
52+
53+
/// <summary>
54+
/// If supported, trim expired items from the cache.
55+
/// </summary>
56+
/// <returns>True if expiry is supported and expired items were trimmed, otherwise false.</returns>
57+
public bool TryTrimExpired()
58+
{
59+
if (ExpireAfterWrite.HasValue)
60+
{
61+
ExpireAfterWrite.Value.TrimExpired();
62+
return true;
63+
}
64+
65+
if (ExpireAfterAccess.HasValue)
66+
{
67+
ExpireAfterAccess.Value.TrimExpired();
68+
return true;
69+
}
70+
71+
return false;
72+
}
5173
}
5274
}

0 commit comments

Comments
 (0)