using UnitTestSharp; namespace Blacklight.SharpDX9.UnitTesting { public class RefreshTallyTests : TestFixture { public class ObserveTests : TestFixture { public void FirstFrame_CountsNothing() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: 100); CheckEqual(0L, tally.MissedRefreshes); } public void FramesOnConsecutiveRefreshes_CountNothing() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Observe(presentCount: 6, presentRefreshCount: 101); tally.Observe(presentCount: 7, presentRefreshCount: 102); CheckEqual(0L, tally.MissedRefreshes); } public void FrameThatSkipsARefresh_CountsOne() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Observe(presentCount: 6, presentRefreshCount: 102); CheckEqual(1L, tally.MissedRefreshes); } public void LongStall_CountsEveryRepeatedRefresh() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Observe(presentCount: 6, presentRefreshCount: 105); CheckEqual(4L, tally.MissedRefreshes); } public void SeparateMisses_Accumulate() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Observe(presentCount: 6, presentRefreshCount: 102); tally.Observe(presentCount: 7, presentRefreshCount: 105); CheckEqual(3L, tally.MissedRefreshes); } public void SeveralFramesBetweenCalls_CountOnlyTheRefreshesBeyondThem() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Observe(presentCount: 8, presentRefreshCount: 104); CheckEqual(1L, tally.MissedRefreshes); } public void DiscardedPresentAndRepeatedFrameInOneGap_CancelOut() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Observe(presentCount: 7, presentRefreshCount: 102); CheckEqual(0L, tally.MissedRefreshes); } public void SameFrameAgain_KeepsMeasuringFromWhenItWentUp() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Observe(presentCount: 6, presentRefreshCount: 102); CheckEqual(1L, tally.MissedRefreshes); } public void PresentsDiscardedBeforeTheyWereShown_CountNothing() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Observe(presentCount: 8, presentRefreshCount: 101); CheckEqual(0L, tally.MissedRefreshes); } public void RefreshCounterWrapping_StillCountsTheGap() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: uint.MaxValue); tally.Observe(presentCount: 6, presentRefreshCount: 1); CheckEqual(1L, tally.MissedRefreshes); } public void PresentCounterWrapping_StillCountsTheGap() { var tally = new RefreshTally(); tally.Observe(presentCount: uint.MaxValue, presentRefreshCount: 100); tally.Observe(presentCount: 1, presentRefreshCount: 103); CheckEqual(1L, tally.MissedRefreshes); } public void StatisticsBeforeAnythingDisplayed_AreNotABaseline() { var tally = new RefreshTally(); tally.Observe(presentCount: 0, presentRefreshCount: 0); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Observe(presentCount: 6, presentRefreshCount: 102); CheckEqual(1L, tally.MissedRefreshes); } } public class RestartTests : TestFixture { public void GapAcrossTheRestart_IsNotCounted() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Restart(); tally.Observe(presentCount: 6, presentRefreshCount: 200); tally.Observe(presentCount: 7, presentRefreshCount: 201); CheckEqual(0L, tally.MissedRefreshes); } public void KeepsTheCountSoFar() { var tally = new RefreshTally(); tally.Observe(presentCount: 5, presentRefreshCount: 100); tally.Observe(presentCount: 6, presentRefreshCount: 102); tally.Restart(); CheckEqual(1L, tally.MissedRefreshes); } } } }