gnark-plonky2-verifier/plonky2_verifier/quadratic_extension_test.go
plonky2_verifier/quadratic_extension_test.goRaw
1package plonky2_verifier
2
3import (
4 "gnark-ed25519/field"
5 . "gnark-ed25519/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}