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}