package plonky2_verifier import ( "gnark-ed25519/field" . "gnark-ed25519/field" "testing" "github.com/consensys/gnark/frontend" "github.com/consensys/gnark/test" ) // TODO: ADD MORE TEST CASES!!! // Test for quadratic extension multiplication type TestQuadraticExtensionMulCircuit struct { qeAPI *QuadraticExtensionAPI operand1 QuadraticExtension operand2 QuadraticExtension expectedResult QuadraticExtension } func (c *TestQuadraticExtensionMulCircuit) Define(api frontend.API) error { field := field.NewFieldAPI(api) degreeBits := 3 c.qeAPI = NewQuadraticExtensionAPI(field, uint64(degreeBits)) actualRes := c.qeAPI.MulExtension(c.operand1, c.operand2) field.AssertIsEqual(actualRes[0], c.expectedResult[0]) field.AssertIsEqual(actualRes[1], c.expectedResult[1]) return nil } func TestQuadraticExtensionMul(t *testing.T) { assert := test.NewAssert(t) operand1 := QuadraticExtension{NewFieldElement(4994088319481652598), NewFieldElement(16489566008211790727)} operand2 := QuadraticExtension{NewFieldElement(3797605683985595697), NewFieldElement(13424401189265534004)} expectedResult := QuadraticExtension{NewFieldElement(15052319864161058789), NewFieldElement(16841416332519902625)} circuit := TestQuadraticExtensionMulCircuit{operand1: operand1, operand2: operand2, expectedResult: expectedResult} witness := TestQuadraticExtensionMulCircuit{operand1: operand1, operand2: operand2, expectedResult: expectedResult} err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField()) assert.NoError(err) } // Test for quadratic extension division type TestQuadraticExtensionDivCircuit struct { qeAPI *QuadraticExtensionAPI operand1 QuadraticExtension operand2 QuadraticExtension expectedResult QuadraticExtension } func (c *TestQuadraticExtensionDivCircuit) Define(api frontend.API) error { field := field.NewFieldAPI(api) degreeBits := 3 c.qeAPI = NewQuadraticExtensionAPI(field, uint64(degreeBits)) actualRes := c.qeAPI.DivExtension(c.operand1, c.operand2) field.AssertIsEqual(actualRes[0], c.expectedResult[0]) field.AssertIsEqual(actualRes[1], c.expectedResult[1]) return nil } func TestQuadraticExtensionDiv(t *testing.T) { assert := test.NewAssert(t) operand1 := QuadraticExtension{NewFieldElement(4994088319481652598), NewFieldElement(16489566008211790727)} operand2 := QuadraticExtension{NewFieldElement(7166004739148609569), NewFieldElement(14655965871663555016)} expectedResult := QuadraticExtension{NewFieldElement(15052319864161058789), NewFieldElement(16841416332519902625)} circuit := TestQuadraticExtensionDivCircuit{operand1: operand1, operand2: operand2, expectedResult: expectedResult} witness := TestQuadraticExtensionDivCircuit{operand1: operand1, operand2: operand2, expectedResult: expectedResult} err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField()) assert.NoError(err) }