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}