コード例 #1
0
        public IEnumerator PerFameTest()
        {
            var firstFrame  = Time.frameCount;
            var countedFunc = new CountedFunc <int>(() => Time.frameCount);
            var perFrame    = Per.Frame(countedFunc.Invoke);

            Assert.That(perFrame.Peek(), Is.EqualTo(default(int)), $"Before any retrievals of {nameof(perFrame.Value)}, the value should be default");

            for (int f = 0; f < 10; f++)
            {
                // LogUtils.Log($"frame: {f}, {Time.frameCount}");
                Assert.That(countedFunc, Has.Property(nameof(countedFunc.InvocationCount)).EqualTo(f));
                Assert.That(perFrame, Has.Property(nameof(perFrame.Freshness)).EqualTo(Freshness.Stale));
                Assert.That(perFrame, Has.Property(nameof(perFrame.RefreshCount)).EqualTo(f));

                for (int intraframe = 0; intraframe < 10; intraframe++)
                {
                    // LogUtils.Log($"{nameof(frame)}: {frame}.{intraframe}");
                    Assert.That(perFrame, Has.Property(nameof(perFrame.Value)).EqualTo(f + firstFrame));
                    Assert.That(perFrame, Has.Property(nameof(perFrame.RefreshCount)).EqualTo(f + 1));
                    Assert.That(perFrame, Has.Property(nameof(perFrame.Freshness)).EqualTo(Freshness.Fresh));
                    Assert.That(countedFunc, Has.Property(nameof(countedFunc.InvocationCount)).EqualTo(f + 1));
                }

                yield return(null);
            }
        }
コード例 #2
0
        public void MultipleSecondsButOnlyOneInvocation()
        {
            var invoker   = new CountedFunc <string>(() => "swag: " + DateTime.Now);
            var perSecond = new Refreshing <string, DateTime>(
                invoker.Invoke,
                () => DateTime.Now,
                (prev, cur) => cur - prev >= TimeSpan.FromSeconds(1)
                );

            Assert.That(perSecond, Has.Property(nameof(perSecond.Freshness)).EqualTo(Freshness.Stale));
            Assert.That(invoker, Has.Property(nameof(invoker.InvocationCount)).EqualTo(0));
        }
コード例 #3
0
        public void ForcedRefreshTest()
        {
            var countedFunc = new CountedFunc <int>(() => Time.frameCount);
            var perFrame    = Per.Frame(countedFunc.Invoke);

            for (int intraframe = 0; intraframe < 10; intraframe++)
            {
                Assert.That(countedFunc, Has.Property(nameof(countedFunc.InvocationCount)).EqualTo(intraframe));
                Validations.ForcedRefresh(perFrame);
                Assert.That(countedFunc, Has.Property(nameof(countedFunc.InvocationCount)).EqualTo(intraframe + 1));
            }
        }
コード例 #4
0
        public void PristineUntilFirstRetrieval()
        {
            const string str        = "yolo";
            var          invoker    = new CountedFunc <string>(() => str);
            var          refreshing = new Refreshing <string, long>(
                invoker.Invoke,
                () => DateTime.Now.Ticks,
                (prev, cur) => cur - prev >= TimeSpan.TicksPerSecond
                );

            Assert.That(invoker, Has.Property(nameof(invoker.InvocationCount)).EqualTo(0));
            Assert.That(refreshing, Has.Property(nameof(refreshing.Freshness)).EqualTo(Freshness.Stale));

            10.Repeat(
                () => {
                Assert.That(refreshing.Value, Is.EqualTo(str));
                Assert.That(invoker, Has.Property(nameof(invoker.InvocationCount)).EqualTo(1));
                Assert.That(refreshing, Has.Property(nameof(refreshing.Freshness)).EqualTo(Freshness.Fresh));
            }
                );
        }
コード例 #5
0
        public void EverySecond()
        {
            var timeKeeper = new CountedFunc <DateTime>(() => DateTime.Now);
            var perSecond  = new Refreshing <DateTime, DateTime>(
                () => timeKeeper.Invoke(),
                () => DateTime.Now,
                (prev, current) => current >= (prev + TimeSpan.FromSeconds(1))
                );

            Assert.That(timeKeeper.InvocationCount, Is.EqualTo(0));
            Assert.That(perSecond.Freshness, Is.EqualTo(Freshness.Stale));

            Console.WriteLine(perSecond.Value);
            Assert.That(perSecond.Freshness, Is.EqualTo(Freshness.Fresh));
            Assert.That(timeKeeper.InvocationCount, Is.EqualTo(1));

            int hertz   = 10;
            int seconds = 5;

            for (int s = 0; s < seconds; s++)
            {
                for (int i = 0; i < hertz; i++)
                {
                    Thread.Sleep(TimeSpan.FromSeconds(1f / hertz));
                    var v = perSecond.Value;
                    v = perSecond.Value;
                    v = perSecond.Value;
                    v = perSecond.Value;
                    v = perSecond.Value;

                    Assert.That(perSecond.Freshness, Is.EqualTo(Freshness.Fresh));
                }

                Console.WriteLine(perSecond.Value);
                Assert.That(timeKeeper.InvocationCount, Is.EqualTo(s + 2));
            }
        }