Browse Source

Statistics: never throw on empty data (instead use NaN)

v2
Christoph Ruegg 14 years ago
parent
commit
8fb1d36f73
  1. 43
      src/Numerics/Statistics/Statistics.cs
  2. 16
      src/UnitTests/StatisticsTests/StatisticsTests.cs

43
src/Numerics/Statistics/Statistics.cs

@ -344,12 +344,7 @@ namespace MathNet.Numerics.Statistics
} }
} }
if (count == 0) return count == 0 ? double.NaN : min;
{
throw new ArgumentException(Resources.CollectionEmpty, "data");
}
return min;
} }
/// <summary> /// <summary>
@ -375,12 +370,7 @@ namespace MathNet.Numerics.Statistics
} }
} }
if (count == 0) return count == 0 ? double.NaN : max;
{
throw new ArgumentException(Resources.CollectionEmpty, "data");
}
return max;
} }
/// <summary> /// <summary>
@ -403,12 +393,7 @@ namespace MathNet.Numerics.Statistics
count++; count++;
} }
if (count == 0) return count == 0 ? double.NaN : min;
{
throw new ArgumentException(Resources.CollectionEmpty, "data");
}
return min;
} }
/// <summary> /// <summary>
@ -431,12 +416,7 @@ namespace MathNet.Numerics.Statistics
count++; count++;
} }
if (count == 0) return count == 0 ? double.NaN : max;
{
throw new ArgumentException(Resources.CollectionEmpty, "data");
}
return max;
} }
/// <summary> /// <summary>
@ -452,6 +432,11 @@ namespace MathNet.Numerics.Statistics
} }
var dataArray = new List<double>(data); var dataArray = new List<double>(data);
if (dataArray.Count == 0)
{
return double.NaN;
}
int index = (dataArray.Count / 2) + 1; int index = (dataArray.Count / 2) + 1;
if (dataArray.Count % 2 == 0) if (dataArray.Count % 2 == 0)
{ {
@ -484,11 +469,6 @@ namespace MathNet.Numerics.Statistics
} }
} }
if (nonNull.Count == 0)
{
throw new ArgumentException(Resources.CollectionEmpty, "data");
}
return nonNull.Median(); return nonNull.Median();
} }
@ -507,6 +487,11 @@ namespace MathNet.Numerics.Statistics
} }
var list = new List<double>(samples); var list = new List<double>(samples);
if (list.Count == 0)
{
return double.NaN;
}
if (order < 1 || order > list.Count) if (order < 1 || order > list.Count)
{ {
throw new ArgumentOutOfRangeException("order", Resources.ArgumentInIntervalXYInclusive); throw new ArgumentOutOfRangeException("order", Resources.ArgumentInIntervalXYInclusive);

16
src/UnitTests/StatisticsTests/StatisticsTests.cs

@ -63,6 +63,11 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests
Assert.Throws<ArgumentNullException>(() => Statistics.Minimum(data)); Assert.Throws<ArgumentNullException>(() => Statistics.Minimum(data));
Assert.Throws<ArgumentNullException>(() => Statistics.Maximum(data)); Assert.Throws<ArgumentNullException>(() => Statistics.Maximum(data));
Assert.Throws<ArgumentNullException>(() => Statistics.Mean(data)); Assert.Throws<ArgumentNullException>(() => Statistics.Mean(data));
Assert.Throws<ArgumentNullException>(() => Statistics.Median(data));
Assert.Throws<ArgumentNullException>(() => Statistics.Variance(data));
Assert.Throws<ArgumentNullException>(() => Statistics.StandardDeviation(data));
Assert.Throws<ArgumentNullException>(() => Statistics.PopulationVariance(data));
Assert.Throws<ArgumentNullException>(() => Statistics.PopulationStandardDeviation(data));
Assert.Throws<ArgumentNullException>(() => SortedArrayStatistics.Minimum(data)); Assert.Throws<ArgumentNullException>(() => SortedArrayStatistics.Minimum(data));
Assert.Throws<ArgumentNullException>(() => SortedArrayStatistics.Maximum(data)); Assert.Throws<ArgumentNullException>(() => SortedArrayStatistics.Maximum(data));
@ -88,9 +93,14 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests
{ {
double[] data = new double[0]; double[] data = new double[0];
//Assert.DoesNotThrow(() => Statistics.Minimum(data)); Assert.DoesNotThrow(() => Statistics.Minimum(data));
//Assert.DoesNotThrow(() => Statistics.Maximum(data)); Assert.DoesNotThrow(() => Statistics.Maximum(data));
//Assert.DoesNotThrow(() => Statistics.Mean(data)); Assert.DoesNotThrow(() => Statistics.Mean(data));
Assert.DoesNotThrow(() => Statistics.Median(data));
Assert.DoesNotThrow(() => Statistics.Variance(data));
Assert.DoesNotThrow(() => Statistics.StandardDeviation(data));
Assert.DoesNotThrow(() => Statistics.PopulationVariance(data));
Assert.DoesNotThrow(() => Statistics.PopulationStandardDeviation(data));
Assert.DoesNotThrow(() => SortedArrayStatistics.Minimum(data)); Assert.DoesNotThrow(() => SortedArrayStatistics.Minimum(data));
Assert.DoesNotThrow(() => SortedArrayStatistics.Maximum(data)); Assert.DoesNotThrow(() => SortedArrayStatistics.Maximum(data));

Loading…
Cancel
Save