Skip to content

bug: gnark/test/assert produce a stack trace that's unusable #553

Open
@gbotrel

Description

@gbotrel

Example error:

    assert.go:495: 
                Error Trace:    /Users/gbotrel/dev/go/src/github.com/consensys/gnark/std/math/emulated/assert.go:495
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/std/math/emulated/assert.go:225
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/std/math/emulated/assert.go:233
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/std/math/emulated/assert.go:74
                Error:          did not error (but should have) plonk(bn254)

When updating the dependency on github.com/stretchr/testify from v1.8.1 to v1.8.2 we get something better:

                Error Trace:    /Users/gbotrel/dev/go/src/github.com/consensys/gnark/test/assert.go:500
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/test/assert.go:230
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/test/assert.go:238
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/test/assert.go:77

since we point to the actual files. However the meaningful place where test failed (in the circuit) is missing from the stack (even when calling directly runtime methods).

This is because we are running in a subtest (maybe nested?); if we replace

	assert.t.Run(desc, func(t *testing.T) {
		// TODO(ivokub): access to compiled cache is not synchronized -- running
		// the tests in parallel will result in undetermined behavior. A better
		// approach would be to synchronize compiled and run the tests in
		// parallel for a potential speedup.
		assert := &Assert{t, require.New(t), assert.compiled}
		fn(assert)
	})

by

	assert.t.Logf("running %s", desc)
	fn(assert)

we get

    assert.go:69: running Goldilocks/limb=64
    assert.go:69: running bn254/groth16
    assert.go:500: 
                Error Trace:    /Users/gbotrel/dev/go/src/github.com/consensys/gnark/test/assert.go:500
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/test/assert.go:230
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/test/assert.go:238
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/test/assert.go:70
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/test/assert.go:226
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/std/math/emulated/element_test.go:53
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/test/assert.go:70
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/std/math/emulated/element_test.go:47
                                                        /Users/gbotrel/dev/go/src/github.com/consensys/gnark/std/math/emulated/element_test.go:39

which is what we want (ideally if we could filter the gnark/test part, that would be more readable, but it's outside of our code base...)

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingcleanup

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions