test

package
v0.0.0-...-ae8e47d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 25, 2023 License: Apache-2.0 Imports: 39 Imported by: 0

Documentation

Overview

Package test provides components or functions to help test and fuzz gnark circuits.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrCompilationNotDeterministic = errors.New("compilation is not deterministic")
	ErrInvalidWitnessSolvedCS      = errors.New("invalid witness solved the constraint system")
	ErrInvalidWitnessVerified      = errors.New("invalid witness resulted in a valid proof")
)

Functions

func IsSolved

func IsSolved(circuit, witness frontend.Circuit, field *big.Int, opts ...TestEngineOption) (err error)

IsSolved returns an error if the test execution engine failed to execute the given circuit with provided witness as input.

The test execution engine implements frontend.API using big.Int operations.

This is an experimental feature.

func NewKZGSRS

func NewKZGSRS(ccs constraint.ConstraintSystem) (kzg.SRS, error)

NewKZGSRS uses ccs nb variables and nb constraints to initialize a kzg srs for sizes < 2¹⁵, returns a pre-computed cached SRS

/!\ warning /!\: this method is here for convenience only: in production, a SRS generated through MPC should be used.

Types

type ApiWrapper

type ApiWrapper func(frontend.API) frontend.API

ApiWrapper defines a function which wraps the API given to the circuit.

type Assert

type Assert struct {
	*require.Assertions
	// contains filtered or unexported fields
}

Assert is a helper to test circuits

func NewAssert

func NewAssert(t *testing.T) *Assert

NewAssert returns an Assert helper embedding a testify/require object for convenience

The Assert object caches the compiled circuit:

the first call to assert.ProverSucceeded/Failed will compile the circuit for n curves, m backends and subsequent calls will re-use the result of the compilation, if available.

func (*Assert) Fuzz

func (assert *Assert) Fuzz(circuit frontend.Circuit, fuzzCount int, opts ...TestingOption)

Fuzz fuzzes the given circuit by instantiating "randomized" witnesses and cross checking execution result between constraint system solver and big.Int test execution engine

note: this is experimental and will be more tightly integrated with go1.18 built-in fuzzing

func (*Assert) Log

func (assert *Assert) Log(v ...interface{})

Log logs using the test instance logger.

func (*Assert) ProverFailed

func (assert *Assert) ProverFailed(circuit frontend.Circuit, invalidAssignment frontend.Circuit, opts ...TestingOption)

ProverSucceeded fails the test if any of the following step errored:

1. compiles the circuit (or fetch it from the cache) 2. using the test execution engine, executes the circuit with provided witness (must fail) 3. run Setup / Prove / Verify with the backend (must fail)

By default, this tests on all curves and proving schemes supported by gnark. See available TestingOption.

func (*Assert) ProverSucceeded

func (assert *Assert) ProverSucceeded(circuit frontend.Circuit, validAssignment frontend.Circuit, opts ...TestingOption)

ProverSucceeded fails the test if any of the following step errored:

1. compiles the circuit (or fetch it from the cache) 2. using the test execution engine, executes the circuit with provided witness 3. run Setup / Prove / Verify with the backend 4. if set, (de)serializes the witness and call ReadAndProve and ReadAndVerify on the backend

By default, this tests on all curves and proving schemes supported by gnark. See available TestingOption.

func (*Assert) Run

func (assert *Assert) Run(fn func(assert *Assert), descs ...string)

Run runs the test function fn as a subtest. The subtest is parametrized by the description strings descs.

func (*Assert) SolvingFailed

func (assert *Assert) SolvingFailed(circuit frontend.Circuit, invalidWitness frontend.Circuit, opts ...TestingOption)

func (*Assert) SolvingSucceeded

func (assert *Assert) SolvingSucceeded(circuit frontend.Circuit, validWitness frontend.Circuit, opts ...TestingOption)

type TestEngineOption

type TestEngineOption func(e *engine) error

TestEngineOption defines an option for the test engine.

func SetAllVariablesAsConstants

func SetAllVariablesAsConstants() TestEngineOption

SetAllVariablesAsConstants is a test engine option which makes the calls to IsConstant() and ConstantValue() always return true. If this test engine option is not set, then all variables are considered as non-constant, regardless if it is constructed by a call to ConstantValue().

func WithApiWrapper

func WithApiWrapper(wrapper ApiWrapper) TestEngineOption

WithApiWrapper is a test engine option which which wraps the API before calling the Define method in circuit. If not set, then API is not wrapped.

func WithBackendProverOptions

func WithBackendProverOptions(opts ...backend.ProverOption) TestEngineOption

WithBackendProverOptions is a test engine option which allows to define prover options. If not set, then default prover configuration is used.

type TestingOption

type TestingOption func(*testingConfig) error

TestingOption defines option for altering the behaviour of Assert methods. See the descriptions of functions returning instances of this type for particular options.

func NoFuzzing

func NoFuzzing() TestingOption

NoFuzzing is a testing option which disables fuzzing tests in assertions.

func NoSerialization

func NoSerialization() TestingOption

NoSerialization is a testing option which disables witness serialization tests in assertions.

func WithBackends

func WithBackends(b backend.ID, backends ...backend.ID) TestingOption

WithBackends is testing option which restricts the backends the assertions are run. When not given, runs on all implemented backends.

func WithCompileOpts

func WithCompileOpts(compileOpts ...frontend.CompileOption) TestingOption

WithCompileOpts is a testing option which uses the given compileOpts when calling frontend.Compile in assertions.

func WithCurves

func WithCurves(c ecc.ID, curves ...ecc.ID) TestingOption

WithCurves is a testing option which restricts the curves the assertions are run. When not given, runs on all implemented curves.

func WithProverOpts

func WithProverOpts(proverOpts ...backend.ProverOption) TestingOption

WithProverOpts is a testing option which uses the given proverOpts when calling backend.Prover, backend.ReadAndProve and backend.IsSolved methods in assertions.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL