arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/field/goldilocks_test.go
field/goldilocks_test.goRaw
 1package field
 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	GoldilocksRangeCheck(api, c.X)
19	return nil
20}
21func TestGoldilocksRangeCheck(t *testing.T) {
22	assert := test.NewAssert(t)
23
24	var circuit, witness TestGoldilocksRangeCheckCircuit
25
26	witness.X = 1
27	assert.ProverSucceeded(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16), test.NoSerialization())
28
29	witness.X = 0
30	assert.ProverSucceeded(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16), test.NoSerialization())
31
32	witness.X = EmulatedField{}.Modulus()
33	assert.ProverFailed(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16), test.NoSerialization())
34
35	one := big.NewInt(1)
36	maxValidVal := new(big.Int).Sub(EmulatedField{}.Modulus(), one)
37	witness.X = maxValidVal
38	assert.ProverSucceeded(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16))
39}
40
41type TestGoldilocksMulAddCircuit struct {
42	X, Y, Z        frontend.Variable
43	ExpectedResult frontend.Variable
44}
45
46func (c *TestGoldilocksMulAddCircuit) Define(api frontend.API) error {
47	calculateValue := GoldilocksMulAdd(api, c.X, c.Y, c.Z)
48	api.AssertIsEqual(calculateValue, c.ExpectedResult)
49
50	return nil
51}
52
53func TestGoldilocksMulAdd(t *testing.T) {
54	assert := test.NewAssert(t)
55
56	var circuit, witness TestGoldilocksMulAddCircuit
57
58	witness.X = 1
59	witness.Y = 2
60	witness.Z = 3
61	witness.ExpectedResult = 5
62	assert.ProverSucceeded(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16), test.NoFuzzing())
63
64	bigOperand := new(big.Int).SetUint64(9223372036854775808)
65	expectedValue, _ := new(big.Int).SetString("18446744068340842500", 10)
66
67	witness.X = bigOperand
68	witness.Y = bigOperand
69	witness.Z = 3
70	witness.ExpectedResult = expectedValue
71	assert.ProverSucceeded(&circuit, &witness, test.WithCurves(ecc.BN254), test.WithBackends(backend.GROTH16), test.NoFuzzing())
72}