// TODO: rewrite without allocations public IEnumerable <Measurement> GetMeasurements() { double overhead = Idle == null ? 0.0 : new Statistics(Idle.Select(m => m.Nanoseconds)).Mean; var mainStats = new Statistics(Main.Select(m => m.Nanoseconds)); int resultIndex = 0; foreach (var measurement in Main) { if (removeOutliers && mainStats.IsOutlier(measurement.Nanoseconds)) { continue; } double value = Math.Max(0, measurement.Nanoseconds - overhead); if (IsSuspiciouslySmall(value)) { value = 0; } yield return(new Measurement( measurement.LaunchIndex, IterationMode.Result, ++resultIndex, measurement.Operations, value)); } }
public void Print() { // TODO: use Accuracy.RemoveOutliers // TODO: check if resulted measurements are too small (like < 0.1ns) double overhead = Idle == null ? 0.0 : new Statistics(Idle.Select(m => m.Nanoseconds)).Mean; int resultIndex = 0; foreach (var measurement in Main) { var resultMeasurement = new Measurement( measurement.LaunchIndex, IterationMode.Result, ++resultIndex, measurement.Operations, Math.Max(0, measurement.Nanoseconds - overhead)); WriteLine(resultMeasurement.ToOutputLine()); } WriteLine(); }