public void ComplexRemove() { TimeSpan?RemoveFunc(Person t) { if (t.Age <= 40) { return(TimeSpan.FromSeconds(5)); } if (t.Age <= 80) { return(TimeSpan.FromSeconds(7)); } return(null); } const int size = 100; Person[] items = Enumerable.Range(1, size).Select(i => new Person($"Name.{i}", i)).ToArray(); _source.AddRange(items); var remover = _source.ExpireAfter(RemoveFunc, _scheduler).Subscribe(); _scheduler.AdvanceBy(TimeSpan.FromMilliseconds(5010).Ticks); _source.Count.Should().Be(60, "40 items should have been removed from the cache"); _scheduler.AdvanceBy(TimeSpan.FromSeconds(5).Ticks); _source.Count.Should().Be(20, "80 items should have been removed from the cache"); remover.Dispose(); }
public void ComplexRemove() { Func <Person, TimeSpan?> removeFunc = t => { if (t.Age <= 40) { return(TimeSpan.FromSeconds(5)); } if (t.Age <= 80) { return(TimeSpan.FromSeconds(7)); } return(null); }; const int size = 100; Person[] items = Enumerable.Range(1, size).Select(i => new Person("Name.{0}".FormatWith(i), i)).ToArray(); _source.AddRange(items); var remover = _source.ExpireAfter(removeFunc, _scheduler).Subscribe(); _scheduler.AdvanceBy(TimeSpan.FromMilliseconds(5010).Ticks); Assert.AreEqual(60, _source.Count, "40 items should have been removed from the cache"); _scheduler.AdvanceBy(TimeSpan.FromSeconds(5).Ticks); Assert.AreEqual(20, _source.Count, "80 items should have been removed from the cache"); remover.Dispose(); }
public void CanHandleABatchOfUpdates() { var remover = _source.ExpireAfter(p => TimeSpan.FromMilliseconds(100), _scheduler).Subscribe(); const int size = 100; Person[] items = Enumerable.Range(1, size).Select(i => new Person($"Name.{i}", i)).ToArray(); _source.AddRange(items); _scheduler.AdvanceBy(TimeSpan.FromMilliseconds(200).Ticks); remover.Dispose(); _results.Data.Count.Should().Be(0, "Should be no data in the cache"); _results.Messages.Count.Should().Be(2, "Should be 2 updates"); _results.Messages[0].Adds.Should().Be(100, "Should be 100 adds in the first message"); _results.Messages[1].Removes.Should().Be(100, "Should be 100 removes in the second message"); }