arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/field/quadratic_extension_test.go
field/quadratic_extension_test.goRaw
 1package field
 2
 3import (
 4	"testing"
 5
 6	"github.com/consensys/gnark/frontend"
 7	"github.com/consensys/gnark/test"
 8)
 9
10// TODO: ADD MORE TEST CASES!!!
11
12// Test for quadratic extension multiplication
13type TestQuadraticExtensionMulCircuit struct {
14	qeAPI *QuadraticExtensionAPI
15
16	Operand1       QuadraticExtension
17	Operand2       QuadraticExtension
18	ExpectedResult QuadraticExtension
19}
20
21func (c *TestQuadraticExtensionMulCircuit) Define(api frontend.API) error {
22	fieldAPI := NewFieldAPI(api)
23	degreeBits := 3
24	c.qeAPI = NewQuadraticExtensionAPI(api, fieldAPI, uint64(degreeBits))
25
26	actualRes := c.qeAPI.MulExtension(c.Operand1, c.Operand2)
27
28	fieldAPI.AssertIsEqual(actualRes[0], c.ExpectedResult[0])
29	fieldAPI.AssertIsEqual(actualRes[1], c.ExpectedResult[1])
30
31	return nil
32}
33func TestQuadraticExtensionMul(t *testing.T) {
34	assert := test.NewAssert(t)
35
36	operand1 := QuadraticExtension{NewFieldConst(4994088319481652598), NewFieldConst(16489566008211790727)}
37	operand2 := QuadraticExtension{NewFieldConst(3797605683985595697), NewFieldConst(13424401189265534004)}
38	expectedResult := QuadraticExtension{NewFieldConst(15052319864161058789), NewFieldConst(16841416332519902625)}
39
40	circuit := TestQuadraticExtensionMulCircuit{Operand1: operand1, Operand2: operand2, ExpectedResult: expectedResult}
41	witness := TestQuadraticExtensionMulCircuit{Operand1: operand1, Operand2: operand2, ExpectedResult: expectedResult}
42	err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
43	assert.NoError(err)
44}
45
46// Test for quadratic extension division
47type TestQuadraticExtensionDivCircuit struct {
48	qeAPI *QuadraticExtensionAPI
49
50	Operand1       QuadraticExtension
51	Operand2       QuadraticExtension
52	ExpectedResult QuadraticExtension
53}
54
55func (c *TestQuadraticExtensionDivCircuit) Define(api frontend.API) error {
56	fieldAPI := NewFieldAPI(api)
57	degreeBits := 3
58	c.qeAPI = NewQuadraticExtensionAPI(api, fieldAPI, uint64(degreeBits))
59
60	actualRes := c.qeAPI.DivExtension(c.Operand1, c.Operand2)
61
62	fieldAPI.AssertIsEqual(actualRes[0], c.ExpectedResult[0])
63	fieldAPI.AssertIsEqual(actualRes[1], c.ExpectedResult[1])
64
65	return nil
66}
67
68func TestQuadraticExtensionDiv(t *testing.T) {
69	assert := test.NewAssert(t)
70
71	operand1 := QuadraticExtension{NewFieldConst(4994088319481652598), NewFieldConst(16489566008211790727)}
72	operand2 := QuadraticExtension{NewFieldConst(7166004739148609569), NewFieldConst(14655965871663555016)}
73	expectedResult := QuadraticExtension{NewFieldConst(15052319864161058789), NewFieldConst(16841416332519902625)}
74
75	circuit := TestQuadraticExtensionDivCircuit{Operand1: operand1, Operand2: operand2, ExpectedResult: expectedResult}
76	witness := TestQuadraticExtensionDivCircuit{Operand1: operand1, Operand2: operand2, ExpectedResult: expectedResult}
77	err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
78	assert.NoError(err)
79}