gnark-plonky2-verifier/goldilocks/quadratic_extension_test.go
goldilocks/quadratic_extension_test.goRaw
1package goldilocks
2
3import (
4 "testing"
5
6 "github.com/consensys/gnark-crypto/ecc"
7 "github.com/consensys/gnark/frontend"
8 "github.com/consensys/gnark/test"
9)
10
11type TestQuadraticExtensionMulCircuit struct {
12 Operand1 QuadraticExtensionVariable
13 Operand2 QuadraticExtensionVariable
14 ExpectedResult QuadraticExtensionVariable
15}
16
17func (c *TestQuadraticExtensionMulCircuit) Define(api frontend.API) error {
18 glApi := NewChip(api)
19 actualRes := glApi.MulExtension(c.Operand1, c.Operand2)
20 glApi.AssertIsEqual(actualRes[0], c.ExpectedResult[0])
21 glApi.AssertIsEqual(actualRes[1], c.ExpectedResult[1])
22 return nil
23}
24
25func TestQuadraticExtensionMul4(t *testing.T) {
26 assert := test.NewAssert(t)
27 operand1 := QuadraticExtensionVariable{
28 NewVariable("4994088319481652598"),
29 NewVariable("16489566008211790727"),
30 }
31 operand2 := QuadraticExtensionVariable{
32 NewVariable("3797605683985595697"),
33 NewVariable("13424401189265534004"),
34 }
35 expectedResult := QuadraticExtensionVariable{
36 NewVariable("15052319864161058789"),
37 NewVariable("16841416332519902625"),
38 }
39 circuit := TestQuadraticExtensionMulCircuit{
40 Operand1: operand1,
41 Operand2: operand2,
42 ExpectedResult: expectedResult,
43 }
44 witness := TestQuadraticExtensionMulCircuit{
45 Operand1: operand1,
46 Operand2: operand2,
47 ExpectedResult: expectedResult,
48 }
49 err := test.IsSolved(&circuit, &witness, ecc.BN254.ScalarField())
50 assert.NoError(err)
51}
52
53// Test for quadratic extension division
54type TestQuadraticExtensionDivCircuit struct {
55 Operand1 QuadraticExtensionVariable
56 Operand2 QuadraticExtensionVariable
57 ExpectedResult QuadraticExtensionVariable
58}
59
60func (c *TestQuadraticExtensionDivCircuit) Define(api frontend.API) error {
61 glAPI := NewChip(api)
62 actualRes := glAPI.DivExtension(c.Operand1, c.Operand2)
63 glAPI.AssertIsEqual(actualRes[0], c.ExpectedResult[0])
64 glAPI.AssertIsEqual(actualRes[1], c.ExpectedResult[1])
65 return nil
66}
67
68func TestQuadraticExtensionDiv(t *testing.T) {
69 assert := test.NewAssert(t)
70 operand1 := QuadraticExtensionVariable{
71 NewVariable("4994088319481652598"),
72 NewVariable("16489566008211790727"),
73 }
74 operand2 := QuadraticExtensionVariable{
75 NewVariable("7166004739148609569"),
76 NewVariable("14655965871663555016"),
77 }
78 expectedResult := QuadraticExtensionVariable{
79 NewVariable("15052319864161058789"),
80 NewVariable("16841416332519902625"),
81 }
82 circuit := TestQuadraticExtensionDivCircuit{
83 Operand1: operand1,
84 Operand2: operand2,
85 ExpectedResult: expectedResult,
86 }
87 witness := TestQuadraticExtensionDivCircuit{
88 Operand1: operand1,
89 Operand2: operand2,
90 ExpectedResult: expectedResult,
91 }
92 err := test.IsSolved(&circuit, &witness, ecc.BN254.ScalarField())
93 assert.NoError(err)
94}