Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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!
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
 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);
        }