# README
Deep Variable Equality for Humans
This package provides a single function: deep.Equal
. It's like reflect.DeepEqual but much friendlier to humans (or any sentient being) for two reason:
deep.Equal
returns a list of differencesdeep.Equal
does not compare unexported fields (by default)
reflect.DeepEqual
is good (like all things Golang!), but it's a game of Hunt the Wumpus. For large maps, slices, and structs, finding the difference is difficult.
deep.Equal
doesn't play games with you, it lists the differences:
package main_test
import (
"testing"
"github.com/go-test/deep"
)
type T struct {
Name string
Numbers []float64
}
func TestDeepEqual(t *testing.T) {
// Can you spot the difference?
t1 := T{
Name: "Isabella",
Numbers: []float64{1.13459, 2.29343, 3.010100010},
}
t2 := T{
Name: "Isabella",
Numbers: []float64{1.13459, 2.29843, 3.010100010},
}
if diff := deep.Equal(t1, t2); diff != nil {
t.Error(diff)
}
}
$ go test
--- FAIL: TestDeepEqual (0.00s)
main_test.go:25: [Numbers.slice[1]: 2.29343 != 2.29843]
The difference is in Numbers.slice[1]
: the two values aren't equal using Go ==
.
# Packages
No description provided by the author
# Functions
Equal compares variables a and b, recursing into their structure up to MaxDepth levels deep (if greater than zero), and returns a list of differences, or nil if there are none.
# Constants
FLAG_IGNORE_SLICE_ORDER causes Equal to ignore slice order so that []int{1, 2} and []int{2, 1} are equal.
FLAG_NONE is a placeholder for default Equal behavior.
# Variables
CompareFunctions compares functions the same as reflect.DeepEqual: only two nil functions are equal.
CompareUnexportedFields causes unexported struct fields, like s in T{s int}, to be compared when true.
ErrMaxRecursion is logged when MaxDepth is reached.
ErrNotHandled is logged when a primitive Go kind is not handled.
ErrTypeMismatch is logged when Equal passed two different types of values.
FloatPrecision is the number of decimal places to round float values to when comparing.
LogErrors causes errors to be logged to STDERR when true.
MaxDepth specifies the maximum levels of a struct to recurse into, if greater than zero.
MaxDiff specifies the maximum number of differences to return.
NilMapsAreEmpty causes a nil map to be equal to an empty map.
NilPointersAreZero causes a nil pointer to be equal to a zero value.
NilSlicesAreEmpty causes a nil slice to be equal to an empty slice.