Example #1
0
        // 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();
        }