arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/goldilocks/quadratic_extension_test.go
goldilocks/quadratic_extension_test.goRaw
 1package goldilocks
 2
 3import (
 4	"testing"
 5
 6	"github.com/consensys/gnark-crypto/ecc"
 7	"github.com/consensys/gnark/frontend"
 8	"github.com/consensys/gnark/test"
 9)
10
11type TestQuadraticExtensionMulCircuit struct {
12	Operand1       QuadraticExtensionVariable
13	Operand2       QuadraticExtensionVariable
14	ExpectedResult QuadraticExtensionVariable
15}
16
17func (c *TestQuadraticExtensionMulCircuit) Define(api frontend.API) error {
18	glApi := New(api)
19	actualRes := glApi.MulExtension(c.Operand1, c.Operand2)
20	glApi.AssertIsEqual(actualRes[0], c.ExpectedResult[0])
21	glApi.AssertIsEqual(actualRes[1], c.ExpectedResult[1])
22	return nil
23}
24
25func TestQuadraticExtensionMul4(t *testing.T) {
26	assert := test.NewAssert(t)
27	operand1 := QuadraticExtensionVariable{
28		NewVariable("4994088319481652598"),
29		NewVariable("16489566008211790727"),
30	}
31	operand2 := QuadraticExtensionVariable{
32		NewVariable("3797605683985595697"),
33		NewVariable("13424401189265534004"),
34	}
35	expectedResult := QuadraticExtensionVariable{
36		NewVariable("15052319864161058789"),
37		NewVariable("16841416332519902625"),
38	}
39	circuit := TestQuadraticExtensionMulCircuit{
40		Operand1:       operand1,
41		Operand2:       operand2,
42		ExpectedResult: expectedResult,
43	}
44	witness := TestQuadraticExtensionMulCircuit{
45		Operand1:       operand1,
46		Operand2:       operand2,
47		ExpectedResult: expectedResult,
48	}
49	err := test.IsSolved(&circuit, &witness, ecc.BN254.ScalarField())
50	assert.NoError(err)
51}
52
53// Test for quadratic extension division
54type TestQuadraticExtensionDivCircuit struct {
55	Operand1       QuadraticExtensionVariable
56	Operand2       QuadraticExtensionVariable
57	ExpectedResult QuadraticExtensionVariable
58}
59
60func (c *TestQuadraticExtensionDivCircuit) Define(api frontend.API) error {
61	glAPI := New(api)
62	actualRes := glAPI.DivExtension(c.Operand1, c.Operand2)
63	glAPI.AssertIsEqual(actualRes[0], c.ExpectedResult[0])
64	glAPI.AssertIsEqual(actualRes[1], c.ExpectedResult[1])
65	return nil
66}
67
68func TestQuadraticExtensionDiv(t *testing.T) {
69	assert := test.NewAssert(t)
70	operand1 := QuadraticExtensionVariable{
71		NewVariable("4994088319481652598"),
72		NewVariable("16489566008211790727"),
73	}
74	operand2 := QuadraticExtensionVariable{
75		NewVariable("7166004739148609569"),
76		NewVariable("14655965871663555016"),
77	}
78	expectedResult := QuadraticExtensionVariable{
79		NewVariable("15052319864161058789"),
80		NewVariable("16841416332519902625"),
81	}
82	circuit := TestQuadraticExtensionDivCircuit{
83		Operand1:       operand1,
84		Operand2:       operand2,
85		ExpectedResult: expectedResult,
86	}
87	witness := TestQuadraticExtensionDivCircuit{
88		Operand1:       operand1,
89		Operand2:       operand2,
90		ExpectedResult: expectedResult,
91	}
92	err := test.IsSolved(&circuit, &witness, ecc.BN254.ScalarField())
93	assert.NoError(err)
94}