diff --git a/assert/assertions.go b/assert/assertions.go index 1419e4776..2206305ad 100644 --- a/assert/assertions.go +++ b/assert/assertions.go @@ -1488,19 +1488,25 @@ func InDeltaSlice(t TestingT, expected, actual interface{}, delta float64, msgAn if h, ok := t.(tHelper); ok { h.Helper() } - if expected == nil || actual == nil || - reflect.TypeOf(actual).Kind() != reflect.Slice || - reflect.TypeOf(expected).Kind() != reflect.Slice { + if expected == nil || actual == nil { return Fail(t, "Parameters must be slice", msgAndArgs...) } - actualSlice := reflect.ValueOf(actual) expectedSlice := reflect.ValueOf(expected) + actualSlice := reflect.ValueOf(actual) + + if expectedSlice.Type().Kind() != reflect.Slice { + return Fail(t, "Expected value must be slice", msgAndArgs...) + } - for i := 0; i < actualSlice.Len(); i++ { - result := InDelta(t, actualSlice.Index(i).Interface(), expectedSlice.Index(i).Interface(), delta, msgAndArgs...) - if !result { - return result + expectedLen := expectedSlice.Len() + if !IsType(t, expected, actual) || !Len(t, actual, expectedLen) { + return false + } + + for i := 0; i < expectedLen; i++ { + if !InDelta(t, expectedSlice.Index(i).Interface(), actualSlice.Index(i).Interface(), delta, "at index %d", i) { + return false } } diff --git a/assert/assertions_test.go b/assert/assertions_test.go index 11642e096..653912a31 100644 --- a/assert/assertions_test.go +++ b/assert/assertions_test.go @@ -2359,6 +2359,21 @@ func TestInDeltaSlice(t *testing.T) { []float64{0, math.NaN(), 3}, 0.1), "{1, NaN, 2} is not element-wise close to {0, NaN, 3} in delta=0.1") + False(t, InDeltaSlice(mockT, + []float64{1, 2}, + []float64{1}, + 0.1), "Expected slices with extra expected values to fail") + + False(t, InDeltaSlice(mockT, + []float64{1}, + []float64{1, 2}, + 0.1), "Expected slices with extra actual values to fail") + + False(t, InDeltaSlice(mockT, + []float64{1}, + []int{1}, + 0.1), "Expected slices with different types to fail") + False(t, InDeltaSlice(mockT, "", nil, 1), "Expected non numeral slices to fail") }