示例#1
0
        public void ClockExtensions_EnsureMonotonic()
        {
            var c = new VirtualTimeClock();

            var m = c.EnsureMonotonic();

            Assert.AreEqual(c.Now, m.Now);
            Assert.AreEqual(c.Now, m.Now);

            c.Now += 10;

            Assert.AreEqual(c.Now, m.Now);
            Assert.AreEqual(c.Now, m.Now);

            c.Now += 20;

            Assert.AreEqual(c.Now, m.Now);
            Assert.AreEqual(c.Now, m.Now);

            c.Now -= 5;

            Assert.AreEqual(30, m.Now);
            Assert.AreEqual(30, m.Now);

            c.Now += 5;

            Assert.AreEqual(c.Now, m.Now);
            Assert.AreEqual(c.Now, m.Now);
        }
示例#2
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);
        }
        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);
        }
示例#4
0
        public void ClockExtensions_AssertMonotonic()
        {
            var c = new VirtualTimeClock();

            var m = c.AssertMonotonic();

            Assert.AreEqual(c.Now, m.Now);
            Assert.AreEqual(c.Now, m.Now);

            c.Now += 10;

            Assert.AreEqual(c.Now, m.Now);
            Assert.AreEqual(c.Now, m.Now);

            c.Now += 20;

            Assert.AreEqual(c.Now, m.Now);
            Assert.AreEqual(c.Now, m.Now);

            c.Now -= 5;

            Assert.ThrowsException <InvalidOperationException>(() => m.Now);

            c.Now += 5;

            Assert.AreEqual(c.Now, m.Now);
            Assert.AreEqual(c.Now, m.Now);
        }
示例#5
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!
        }
示例#6
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);
        }
示例#7
0
        public void Stopwatch_HighResolution()
        {
            var c = new VirtualTimeClock();

            var sw = new MyStopwatch(c);

            sw.Start();

            c.Now += 1000;

            Assert.AreEqual(1000, sw.ElapsedTicks);
            Assert.AreEqual(2000, sw.Elapsed.Ticks);
        }
示例#8
0
        public void VirtualTimeClock_Simple2()
        {
            var c = new VirtualTimeClock(10);

            Assert.AreEqual(10, c.Now);

            c.Now += 20;

            Assert.AreEqual(30, c.Now);

            c.Now -= 10;

            Assert.AreEqual(20, c.Now);
        }
示例#9
0
 public void VirtualTimeClock_ArgumentChecking()
 {
     Assert.ThrowsException <ArgumentOutOfRangeException>(() => _ = new VirtualTimeClock(-1));
     Assert.ThrowsException <ArgumentOutOfRangeException>(() => _ = new VirtualTimeClock().Now = -1);
 }