public void StopsWhenTimestampIsOutOfRange() { // Sampling rate should be small to enough to fail quickly var clock = new SamplesCounterClock(0.000001, SamplesCounterClockOptions.Default); while (true) { clock.Increase(UInt32.MaxValue); } }
public void AutoInitializesReferenceAndCount() { const int samplingRate = 10; var time = DateTimeOffset.UtcNow; var clock = new SamplesCounterClock(samplingRate, SamplesCounterClockOptions.Default); clock.Increase(samplingRate); // More or less one second after "time" Assert.IsTrue(clock.Current > time); }
public void CountsWithGivenReference() { const int samplingRate = 128; var time = DateTimeOffset.UtcNow; var clock = new SamplesCounterClock(samplingRate, SamplesCounterClockOptions.Default); clock.Reference = time; clock.Increase(samplingRate); Assert.AreEqual(time.AddSeconds(1), clock.Current); }
private void OnDataTimerTick(object state) { // Same considerations of SetupCore(), generating 1 sample each time // is a big performance hit and resource consuming, collect data in bigger packets (if possible). double[][] samples = new double[Channels.Count][]; for (int i = 0; i < samples.Length; ++i) { samples[i] = new double[] { NextValueForChannel(i) } } ; OnData(new DataEventArgs(new DataPacket(Id, _timestampGenerator.Increase(1), samples))); }
public void CanAutoResetOnOverflow() { // Very high sampling frequency otherwise we will exhaust DateTime range before we reach MaximumNumberOfSamples var clock = new SamplesCounterClock(1000000, SamplesCounterClockOptions.AdjustForOverflow | SamplesCounterClockOptions.ForceMonotonic); // Force creations of reference time var time = clock.Current; // Enqueue enough samples to cause an overflow DateTimeOffset latestPacketTime = DateTimeOffset.MinValue; for (long i = 0; i <= (SamplesCounterClock.MaximumNumberOfSamples + 1) / UInt32.MaxValue; ++i) { var thisPacketTime = clock.Increase(UInt32.MaxValue); Assert.IsTrue(thisPacketTime > latestPacketTime); latestPacketTime = thisPacketTime; } // Now reference time has been "regenerated" Assert.AreNotEqual(time, clock.Reference.Value); }