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