fix: propagate error from Quartile for inputs too small for quartiles
Quartile computed the median of empty slices for inputs with fewer than three elements and discarded the resulting error, returning NaN quartiles with a nil error. The silent NaN then leaked into InterQuartileRange, Midhinge and Trimean. Propagate the error instead, mirroring the existing EmptyInputErr handling.
This commit is contained in:
1 parent
f9994fd0aa
commit
85d956c08c
2 files changed
+53
-7
No files matched your search
@@ -41,6 +41,18 @@ func TestQuartile(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestQuartileSingleElement(t *testing.T) {
|
||||
// A single element has no halves, so Quartile must error rather than
|
||||
// return NaN with a nil error.
|
||||
quartiles, err := stats.Quartile([]float64{1})
|
||||
if err == nil {
|
||||
t.Errorf("Single element slice should have returned an error")
|
||||
}
|
||||
if quartiles != (stats.Quartiles{}) {
|
||||
t.Errorf("Errored result should be the zero Quartiles value, got %+v", quartiles)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInterQuartileRange(t *testing.T) {
|
||||
s1 := []float64{102, 104, 105, 107, 108, 109, 110, 112, 115, 116, 118}
|
||||
iqr, _ := stats.InterQuartileRange(s1)
|
||||
@@ -53,6 +65,11 @@ func TestInterQuartileRange(t *testing.T) {
|
||||
if err == nil {
|
||||
t.Errorf("Empty slice should have returned an error")
|
||||
}
|
||||
|
||||
_, err = stats.InterQuartileRange([]float64{1})
|
||||
if err == nil {
|
||||
t.Errorf("Single element slice should have returned an error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMidhinge(t *testing.T) {
|
||||
@@ -67,6 +84,11 @@ func TestMidhinge(t *testing.T) {
|
||||
if err == nil {
|
||||
t.Errorf("Empty slice should have returned an error")
|
||||
}
|
||||
|
||||
_, err = stats.Midhinge([]float64{1})
|
||||
if err == nil {
|
||||
t.Errorf("Single element slice should have returned an error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTrimean(t *testing.T) {
|
||||
@@ -81,4 +103,9 @@ func TestTrimean(t *testing.T) {
|
||||
if err == nil {
|
||||
t.Errorf("Empty slice should have returned an error")
|
||||
}
|
||||
|
||||
_, err = stats.Trimean([]float64{1})
|
||||
if err == nil {
|
||||
t.Errorf("Single element slice should have returned an error")
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user