public void AccumulatedValuesAggregatesCorrectlyForEmptyDataSet()
        {
            // ARRANGE
            AccumulatedValues accumulatorAverage = new AccumulatedValues("Metric1", AggregationType.Avg);
            AccumulatedValues accumulatorSum     = new AccumulatedValues("Metric1", AggregationType.Sum);
            AccumulatedValues accumulatorMin     = new AccumulatedValues("Metric1", AggregationType.Min);
            AccumulatedValues accumulatorMax     = new AccumulatedValues("Metric1", AggregationType.Max);

            // ACT
            double avg = accumulatorAverage.CalculateAggregation(out long avgCount);
            double sum = accumulatorSum.CalculateAggregation(out long sumCount);
            double min = accumulatorMin.CalculateAggregation(out long minCount);
            double max = accumulatorMax.CalculateAggregation(out long maxCount);

            // ASSERT
            Assert.AreEqual(0, avg);
            Assert.AreEqual(0, sum);
            Assert.AreEqual(0, min);
            Assert.AreEqual(0, max);

            Assert.AreEqual(0, avgCount);
            Assert.AreEqual(0, sumCount);
            Assert.AreEqual(0, minCount);
            Assert.AreEqual(0, maxCount);
        }
        public void AccumulatedValuesAggregatesCorrectly()
        {
            // ARRANGE
            double[]          accumulatedValues  = { 1d, 3d };
            AccumulatedValues accumulatorAverage = new AccumulatedValues("Metric1", AggregationType.Avg);
            AccumulatedValues accumulatorSum     = new AccumulatedValues("Metric1", AggregationType.Sum);
            AccumulatedValues accumulatorMin     = new AccumulatedValues("Metric1", AggregationType.Min);
            AccumulatedValues accumulatorMax     = new AccumulatedValues("Metric1", AggregationType.Max);

            // ACT
            ArrayHelpers.ForEach(accumulatedValues, accumulatorAverage.AddValue);
            ArrayHelpers.ForEach(accumulatedValues, accumulatorSum.AddValue);
            ArrayHelpers.ForEach(accumulatedValues, accumulatorMin.AddValue);
            ArrayHelpers.ForEach(accumulatedValues, accumulatorMax.AddValue);

            double avg = accumulatorAverage.CalculateAggregation(out long avgCount);
            double sum = accumulatorSum.CalculateAggregation(out long sumCount);
            double min = accumulatorMin.CalculateAggregation(out long minCount);
            double max = accumulatorMax.CalculateAggregation(out long maxCount);

            // ASSERT
            Assert.AreEqual(2d, avg);
            Assert.AreEqual(4d, sum);
            Assert.AreEqual(1d, min);
            Assert.AreEqual(3d, max);

            Assert.AreEqual(2, avgCount);
            Assert.AreEqual(2, sumCount);
            Assert.AreEqual(2, minCount);
            Assert.AreEqual(2, maxCount);
        }