Categorygithub.com/go-test/deep
modulepackage
1.1.1
Repository: https://github.com/go-test/deep.git
Documentation: pkg.go.dev

# README

Deep Variable Equality for Humans

Go Report Card Coverage Status Go Reference

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 differences
  • deep.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.