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	c.qeAPI = NewQuadraticExtensionAPI(api, fieldAPI)
24
25	actualRes := c.qeAPI.MulExtension(c.Operand1, c.Operand2)
26
27	fieldAPI.AssertIsEqual(actualRes[0], c.ExpectedResult[0])
28	fieldAPI.AssertIsEqual(actualRes[1], c.ExpectedResult[1])
29
30	return nil
31}
32func TestQuadraticExtensionMul(t *testing.T) {
33	assert := test.NewAssert(t)
34
35	operand1 := QuadraticExtension{NewFieldConst(4994088319481652598), NewFieldConst(16489566008211790727)}
36	operand2 := QuadraticExtension{NewFieldConst(3797605683985595697), NewFieldConst(13424401189265534004)}
37	expectedResult := QuadraticExtension{NewFieldConst(15052319864161058789), NewFieldConst(16841416332519902625)}
38
39	circuit := TestQuadraticExtensionMulCircuit{Operand1: operand1, Operand2: operand2, ExpectedResult: expectedResult}
40	witness := TestQuadraticExtensionMulCircuit{Operand1: operand1, Operand2: operand2, ExpectedResult: expectedResult}
41	err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
42	assert.NoError(err)
43}
44
45// Test for quadratic extension division
46type TestQuadraticExtensionDivCircuit struct {
47	qeAPI *QuadraticExtensionAPI
48
49	Operand1       QuadraticExtension
50	Operand2       QuadraticExtension
51	ExpectedResult QuadraticExtension
52}
53
54func (c *TestQuadraticExtensionDivCircuit) Define(api frontend.API) error {
55	fieldAPI := NewFieldAPI(api)
56	c.qeAPI = NewQuadraticExtensionAPI(api, fieldAPI)
57
58	actualRes := c.qeAPI.DivExtension(c.Operand1, c.Operand2)
59
60	fieldAPI.AssertIsEqual(actualRes[0], c.ExpectedResult[0])
61	fieldAPI.AssertIsEqual(actualRes[1], c.ExpectedResult[1])
62
63	return nil
64}
65
66func TestQuadraticExtensionDiv(t *testing.T) {
67	assert := test.NewAssert(t)
68
69	operand1 := QuadraticExtension{NewFieldConst(4994088319481652598), NewFieldConst(16489566008211790727)}
70	operand2 := QuadraticExtension{NewFieldConst(7166004739148609569), NewFieldConst(14655965871663555016)}
71	expectedResult := QuadraticExtension{NewFieldConst(15052319864161058789), NewFieldConst(16841416332519902625)}
72
73	circuit := TestQuadraticExtensionDivCircuit{Operand1: operand1, Operand2: operand2, ExpectedResult: expectedResult}
74	witness := TestQuadraticExtensionDivCircuit{Operand1: operand1, Operand2: operand2, ExpectedResult: expectedResult}
75	err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField())
76	assert.NoError(err)
77}