pkg/check: NotEqual, DeepEqual, ElementsMatch
This commit is contained in:
parent
9574c0faad
commit
3915cf2dda
@ -9,6 +9,7 @@
|
||||
package check
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@ -71,6 +72,44 @@ func Equal[T comparable](t *testing.T, got, want T) {
|
||||
}
|
||||
}
|
||||
|
||||
// NotEqual fails the test if got == want.
|
||||
func NotEqual[T comparable](t *testing.T, got, want T) {
|
||||
t.Helper()
|
||||
if got == want {
|
||||
t.Errorf("expected values to differ, got %v", got)
|
||||
}
|
||||
}
|
||||
|
||||
// DeepEqual fails the test if got and want are not deeply equal.
|
||||
// Use instead of Equal for maps, slices, and structs with slice fields.
|
||||
func DeepEqual(t *testing.T, got, want any) {
|
||||
t.Helper()
|
||||
if !reflect.DeepEqual(got, want) {
|
||||
t.Errorf("got %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
// ElementsMatch fails the test if got and want do not contain the same
|
||||
// elements regardless of order, including duplicates. T must be comparable —
|
||||
// for slices or maps as elements, use DeepEqual after sorting manually.
|
||||
func ElementsMatch[T comparable](t *testing.T, got, want []T) {
|
||||
t.Helper()
|
||||
if len(got) != len(want) {
|
||||
t.Errorf("length mismatch: got %d elements, want %d", len(got), len(want))
|
||||
return
|
||||
}
|
||||
freq := make(map[T]int, len(want))
|
||||
for _, v := range want {
|
||||
freq[v]++
|
||||
}
|
||||
for _, v := range got {
|
||||
if freq[v]--; freq[v] < 0 {
|
||||
t.Errorf("unexpected element: %v", v)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ok fails the test if r holds an error, then returns the value.
|
||||
func Ok[T any](t *testing.T, r result.Expect[T]) T {
|
||||
t.Helper()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user