private void WriteData(long sampleSize, double dataPerSecond, TimeSpan duration, double?maxSamplesToKeepPerSecond, Action <Datum, double, DataRateCalculator.SamplingAction> calculatedDataRateKeepCallback) { DataRateCalculator dataRateCalculator = new DataRateCalculator(sampleSize, maxSamplesToKeepPerSecond); long numData = (long)(dataPerSecond * duration.TotalSeconds); double interDataTime = duration.TotalSeconds / numData; DateTimeOffset startTimestamp = DateTimeOffset.UtcNow; dataRateCalculator.Start(startTimestamp); for (long i = 0; i < numData; ++i) { DateTimeOffset simulatedCurrentTime = startTimestamp.AddSeconds((i + 1) * interDataTime); AccelerometerDatum datum = new AccelerometerDatum(simulatedCurrentTime, 1, 1, 1); DataRateCalculator.SamplingAction samplingAction = dataRateCalculator.Add(datum); double?calculatedDataPerSecond = dataRateCalculator.GetDataPerSecond(); if (i < sampleSize - 1) { Assert.IsNull(calculatedDataPerSecond); } else { Assert.NotNull(calculatedDataPerSecond); calculatedDataRateKeepCallback?.Invoke(datum, calculatedDataPerSecond.Value, samplingAction); } } }
private List <Datum> GenerateData() { List <Datum> data = new List <Datum>(); Random r = new Random(); for (int i = 0; i < 1000; ++i) { Datum d; int type = r.Next(0, 3); if (type == 0) { d = new AccelerometerDatum(DateTimeOffset.UtcNow, r.NextDouble(), r.NextDouble(), r.NextDouble()); } else if (type == 1) { d = new LocationDatum(DateTimeOffset.UtcNow, r.NextDouble(), r.NextDouble(), r.NextDouble()); } else { d = new BatteryDatum(DateTimeOffset.UtcNow, r.NextDouble()); } data.Add(d); } return(data); }
public void ImmediateDataTest() { InitServiceHelper(); DataRateCalculator calculator = new DataRateCalculator(10, 1); AccelerometerDatum datum = new AccelerometerDatum(DateTimeOffset.UtcNow, 1, 1, 1); calculator.Start(datum.Timestamp); for (int i = 0; i < calculator.SampleSize * 2; ++i) { DataRateCalculator.SamplingAction action = calculator.Add(datum); if (i < calculator.SampleSize) { Assert.AreEqual(action, DataRateCalculator.SamplingAction.Keep); } else { Assert.AreEqual(action, DataRateCalculator.SamplingAction.Drop); } } }