private void AutoTest(Frequency clockFrequency, TimeInterval operationTime, double maxStdErrRelative, long minInvokeCount)
 {
     var job = new Job
     {
         Infrastructure = { Clock = new MockClock(clockFrequency) },
         Accuracy = { MaxStdErrRelative = maxStdErrRelative }
     }.Freeze();
     var stage = CreateStage(job, data => data.InvokeCount * operationTime);
     long invokeCount = stage.Run();
     output.WriteLine($"InvokeCount = {invokeCount} (Min= {minInvokeCount}, Max = {MaxPossibleInvokeCount})");
     Assert.InRange(invokeCount, minInvokeCount, MaxPossibleInvokeCount);
 }
 public static HardwareTimerKind GetHardwareTimerKind(Frequency frequency)
 {
     long freqKHz = (long)Math.Round(frequency / Frequency.KHz);
     if (14300 <= freqKHz && freqKHz <= 14400)
         return HardwareTimerKind.Hpet;
     if (3579500 <= frequency && frequency <= 3579600)
         return HardwareTimerKind.Acpi;
     if (freqKHz == 10000)
         return HardwareTimerKind.Unknown;
     if (5 <= freqKHz && freqKHz < 4000)
         return HardwareTimerKind.Tsc;
     if (freqKHz <= 4)
         return HardwareTimerKind.System;
     return HardwareTimerKind.Unknown;
 }
 public ClockSpan(long startTimestamp, long endTimestamp, Frequency frequency)
 {
     StartTimestamp = startTimestamp;
     EndTimestamp   = endTimestamp;
     Frequency      = frequency;
 }
 public MockClock(Frequency frequency)
 {
     Frequency = frequency;
 }