testify icon indicating copy to clipboard operation
testify copied to clipboard

Support Custom Equality and Diff in Assert and Require

Open nathanjsweet opened this issue 1 year ago • 1 comments

Description

Update assert to compare data structures that are isomorphically equal (such as a Tree, Trie, etc) to one another, but not equal by value or reference.

Proposed solution

Define an Equal and Diff interface that structures can implement that the require/assert package will check on equality assertion (e.g. require.Equal(t, expected, actual)) rather than using DeepEqual.

Use case

Currently, the Cilium codebase uses a require.Truef as a workaround, calling into a custom Equals method and a custom Diff method.

nathanjsweet avatar Jun 25 '24 16:06 nathanjsweet

We are definately not going to change Equal to compare values any differently to how it does today, mostly because it is a breaking change.

Partly also because changing the definition of "equal" has led to issues before, as with the EqualValues assertion's problems. I'm also concerned that types will unintentionally satisfy this interface, time.Time from the standard library has an Equal method and it does not mean that the instances are equal, only that they represent the same instant.

Is there a way of proposing this as a compatible change with a reasonable level of safetly?

brackendawson avatar Oct 08 '24 22:10 brackendawson