protected static void Evict_Lowest_LastAccessTime(Func <Func <IMemoizationCacheEntryMetrics, TimeSpan>, int, double, IStopwatchFactory, IMemoizationCacheFactory> createEvictedByLowest) { var c = new VirtualTimeClock(); var cache = createEvictedByLowest(m => m.LastAccessTime, 4, 1.0, StopwatchFactory.FromClock(c)); var n = 0; var f = cache.Create <int, int>(x => { n++; c.Now += x * 1000; return(x + 1); }, MemoizationOptions.None, EqualityComparer <int> .Default); Assert.AreEqual(3, f.GetOrAdd(2)); // [2] Assert.AreEqual(2000, c.Now); Assert.AreEqual(2, f.GetOrAdd(1)); // [1, 2] Assert.AreEqual(3000, c.Now); Assert.AreEqual(4, f.GetOrAdd(3)); // [3, 1, 2] Assert.AreEqual(6000, c.Now); Assert.AreEqual(2, f.GetOrAdd(1)); // [1, 3, 2] Assert.AreEqual(6000, c.Now); Assert.AreEqual(5, f.GetOrAdd(4)); // [4, 1, 3, 2] Assert.AreEqual(10000, c.Now); Assert.AreEqual(6, f.GetOrAdd(5)); // [5, 4, 1, 3] Assert.AreEqual(15000, c.Now); Assert.AreEqual(2, f.GetOrAdd(1)); // [1, 5, 4, 3] Assert.AreEqual(15000, c.Now); Assert.AreEqual(3, f.GetOrAdd(2)); // [2, 1, 5, 4] Assert.AreEqual(17000, c.Now); }
public void Stopwatch_Clock() { var c = new VirtualTimeClock(); var sw = StopwatchFactory.FromClock(c).Create(); Assert.IsFalse(sw.IsRunning); sw.Start(); Assert.IsTrue(sw.IsRunning); Assert.AreEqual(0, sw.ElapsedTicks); c.Now += 1000; Assert.IsTrue(sw.IsRunning); Assert.AreEqual(1000, sw.ElapsedTicks); sw.Stop(); c.Now += 2000; Assert.IsFalse(sw.IsRunning); Assert.AreEqual(1000, sw.ElapsedTicks); sw.Start(); Assert.IsTrue(sw.IsRunning); Assert.AreEqual(1000, sw.ElapsedTicks); c.Now += 3000; Assert.IsTrue(sw.IsRunning); Assert.AreEqual(4000, sw.ElapsedTicks); sw.Reset(); Assert.IsFalse(sw.IsRunning); Assert.AreEqual(0, sw.ElapsedTicks); sw.Start(); Assert.IsTrue(sw.IsRunning); Assert.AreEqual(0, sw.ElapsedTicks); c.Now += 5000; Assert.IsTrue(sw.IsRunning); Assert.AreEqual(5000, sw.ElapsedTicks); sw.Restart(); Assert.IsTrue(sw.IsRunning); Assert.AreEqual(0, sw.ElapsedTicks); c.Now += 1500; Assert.IsTrue(sw.IsRunning); Assert.AreEqual(1500, sw.ElapsedTicks); Assert.AreEqual(1500, sw.Elapsed.Ticks); Assert.AreEqual(0, sw.ElapsedMilliseconds); // not a double! c.Now += TimeSpan.FromMilliseconds(1).Ticks; Assert.AreEqual(1, sw.ElapsedMilliseconds); // not a double! }
public void StopwatchFactoryExtensions_StartNew() { var c = new VirtualTimeClock(); var sw = StopwatchFactory.FromClock(c).StartNew(); Assert.IsTrue(sw.IsRunning); Assert.AreEqual(0, sw.ElapsedTicks); c.Now += 1000; Assert.IsTrue(sw.IsRunning); Assert.AreEqual(1000, sw.ElapsedTicks); }
public void StopwatchFactory_ArgumentChecking() { Assert.ThrowsException <ArgumentNullException>(() => StopwatchFactory.FromClock(clock: null)); }
public void WeakMemoizationCacheFactory_Evict_Lowest_LastAccessTime() { var c = new VirtualTimeClock(); var cache = WeakMemoizationCacheFactory.CreateEvictedByLowest(m => m.LastAccessTime, 4, 1.0, StopwatchFactory.FromClock(c)); var n = 0; var f = cache.Create <string, string>(x => { n++; c.Now += int.Parse(x) * 1000; return(x + "!"); }, MemoizationOptions.None); Assert.AreEqual("2!", f.GetOrAdd("2")); // [2] Assert.AreEqual(2000, c.Now); Assert.AreEqual("1!", f.GetOrAdd("1")); // [1, 2] Assert.AreEqual(3000, c.Now); Assert.AreEqual("3!", f.GetOrAdd("3")); // [3, 1, 2] Assert.AreEqual(6000, c.Now); Assert.AreEqual("1!", f.GetOrAdd("1")); // [1, 3, 2] Assert.AreEqual(6000, c.Now); Assert.AreEqual("4!", f.GetOrAdd("4")); // [4, 1, 3, 2] Assert.AreEqual(10000, c.Now); Assert.AreEqual("5!", f.GetOrAdd("5")); // [5, 4, 1, 3] Assert.AreEqual(15000, c.Now); Assert.AreEqual("1!", f.GetOrAdd("1")); // [1, 5, 4, 3] Assert.AreEqual(15000, c.Now); Assert.AreEqual("2!", f.GetOrAdd("2")); // [2, 1, 5, 4] Assert.AreEqual(17000, c.Now); }