gnark-plonky2-verifier/plonky2_verifier/random_access_gate_test.go
plonky2_verifier/random_access_gate_test.goRaw
1package plonky2_verifier
2
3import (
4 "errors"
5 . "gnark-plonky2-verifier/field"
6 "testing"
7
8 "github.com/consensys/gnark/frontend"
9 "github.com/consensys/gnark/test"
10)
11
12type TestRandomAccessGateCircuit struct{}
13
14func (circuit *TestRandomAccessGateCircuit) Define(api frontend.API) error {
15 commonCircuitData := DeserializeCommonCircuitData("./data/step/common_circuit_data.json")
16 numSelectors := len(commonCircuitData.SelectorsInfo.groups)
17
18 fieldAPI := NewFieldAPI(api)
19 qeAPI := NewQuadraticExtensionAPI(fieldAPI, commonCircuitData.DegreeBits)
20 plonkChip := NewPlonkChip(api, qeAPI, commonCircuitData)
21
22 randomAccessGate := RandomAccessGate{bits: 4, numCopies: 4, numExtraConstants: 2}
23 vars := EvaluationVars{localConstants: localConstants[numSelectors:], localWires: localWires, publicInputsHash: publicInputsHash}
24
25 constraints := randomAccessGate.EvalUnfiltered(plonkChip, vars)
26
27 if len(constraints) != len(randomAccessGateExpectedConstraints) {
28 return errors.New("constant gate constraints length mismatch")
29 }
30
31 for i := 0; i < len(constraints); i++ {
32 qeAPI.AssertIsEqual(constraints[i], randomAccessGateExpectedConstraints[i])
33 }
34
35 return nil
36}
37
38func TestRandomAccessGate(t *testing.T) {
39 assert := test.NewAssert(t)
40
41 testCase := func() {
42 circuit := TestRandomAccessGateCircuit{}
43 witness := TestRandomAccessGateCircuit{}
44 err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
45 assert.NoError(err)
46 }
47
48 testCase()
49}