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(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{NewFieldElement(4994088319481652598), NewFieldElement(16489566008211790727)}
37 operand2 := QuadraticExtension{NewFieldElement(3797605683985595697), NewFieldElement(13424401189265534004)}
38 expectedResult := QuadraticExtension{NewFieldElement(15052319864161058789), NewFieldElement(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(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{NewFieldElement(4994088319481652598), NewFieldElement(16489566008211790727)}
72 operand2 := QuadraticExtension{NewFieldElement(7166004739148609569), NewFieldElement(14655965871663555016)}
73 expectedResult := QuadraticExtension{NewFieldElement(15052319864161058789), NewFieldElement(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}