arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/goldilocks/base_test.go
goldilocks/base_test.goRaw
 1package goldilocks
 2
 3import (
 4	"math/big"
 5	"testing"
 6
 7	"github.com/consensys/gnark-crypto/ecc"
 8	"github.com/consensys/gnark/backend"
 9	"github.com/consensys/gnark/frontend"
10	"github.com/consensys/gnark/test"
11)
12
13type TestGoldilocksRangeCheckCircuit struct {
14	X frontend.Variable
15}
16
17func (c *TestGoldilocksRangeCheckCircuit) Define(api frontend.API) error {
18	glApi := NewGoldilocksApi(api)
19	glApi.RangeCheck(NewVariable(c.X))
20	return nil
21}
22func TestGoldilocksRangeCheck(t *testing.T) {
23	assert := test.NewAssert(t)
24
25	var circuit, witness TestGoldilocksRangeCheckCircuit
26
27	witness.X = 1
28	assert.ProverSucceeded(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16), test.NoSerializationChecks())
29
30	witness.X = 0
31	assert.ProverSucceeded(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16), test.NoSerializationChecks())
32
33	witness.X = MODULUS
34	assert.ProverFailed(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16), test.NoSerializationChecks())
35
36	one := big.NewInt(1)
37	maxValidVal := new(big.Int).Sub(MODULUS, one)
38	witness.X = maxValidVal
39	assert.ProverSucceeded(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16))
40}
41
42type TestGoldilocksMulAddCircuit struct {
43	X, Y, Z        frontend.Variable
44	ExpectedResult frontend.Variable
45}
46
47func (c *TestGoldilocksMulAddCircuit) Define(api frontend.API) error {
48	glApi := NewGoldilocksApi(api)
49	calculateValue := glApi.MulAdd(NewVariable(c.X), NewVariable(c.Y), NewVariable(c.Z))
50	api.AssertIsEqual(calculateValue.Limb, c.ExpectedResult)
51	return nil
52}
53
54func TestGoldilocksMulAdd(t *testing.T) {
55	assert := test.NewAssert(t)
56
57	var circuit, witness TestGoldilocksMulAddCircuit
58
59	witness.X = 1
60	witness.Y = 2
61	witness.Z = 3
62	witness.ExpectedResult = 5
63	assert.ProverSucceeded(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16), test.NoFuzzing())
64
65	bigOperand := new(big.Int).SetUint64(9223372036854775808)
66	expectedValue, _ := new(big.Int).SetString("18446744068340842500", 10)
67
68	witness.X = bigOperand
69	witness.Y = bigOperand
70	witness.Z = 3
71	witness.ExpectedResult = expectedValue
72	assert.ProverSucceeded(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16), test.NoFuzzing())
73}