package goldilocks
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/consensys/gnark-crypto/ecc"
|
|
"github.com/consensys/gnark/frontend"
|
|
"github.com/consensys/gnark/test"
|
|
)
|
|
|
|
type TestQuadraticExtensionMulCircuit struct {
|
|
Operand1 QuadraticExtensionVariable
|
|
Operand2 QuadraticExtensionVariable
|
|
ExpectedResult QuadraticExtensionVariable
|
|
}
|
|
|
|
func (c *TestQuadraticExtensionMulCircuit) Define(api frontend.API) error {
|
|
glApi := NewChip(api)
|
|
actualRes := glApi.MulExtension(c.Operand1, c.Operand2)
|
|
glApi.AssertIsEqual(actualRes[0], c.ExpectedResult[0])
|
|
glApi.AssertIsEqual(actualRes[1], c.ExpectedResult[1])
|
|
return nil
|
|
}
|
|
|
|
func TestQuadraticExtensionMul4(t *testing.T) {
|
|
assert := test.NewAssert(t)
|
|
operand1 := QuadraticExtensionVariable{
|
|
NewVariable("4994088319481652598"),
|
|
NewVariable("16489566008211790727"),
|
|
}
|
|
operand2 := QuadraticExtensionVariable{
|
|
NewVariable("3797605683985595697"),
|
|
NewVariable("13424401189265534004"),
|
|
}
|
|
expectedResult := QuadraticExtensionVariable{
|
|
NewVariable("15052319864161058789"),
|
|
NewVariable("16841416332519902625"),
|
|
}
|
|
circuit := TestQuadraticExtensionMulCircuit{
|
|
Operand1: operand1,
|
|
Operand2: operand2,
|
|
ExpectedResult: expectedResult,
|
|
}
|
|
witness := TestQuadraticExtensionMulCircuit{
|
|
Operand1: operand1,
|
|
Operand2: operand2,
|
|
ExpectedResult: expectedResult,
|
|
}
|
|
err := test.IsSolved(&circuit, &witness, ecc.BN254.ScalarField())
|
|
assert.NoError(err)
|
|
}
|
|
|
|
// Test for quadratic extension division
|
|
type TestQuadraticExtensionDivCircuit struct {
|
|
Operand1 QuadraticExtensionVariable
|
|
Operand2 QuadraticExtensionVariable
|
|
ExpectedResult QuadraticExtensionVariable
|
|
}
|
|
|
|
func (c *TestQuadraticExtensionDivCircuit) Define(api frontend.API) error {
|
|
glAPI := NewChip(api)
|
|
actualRes := glAPI.DivExtension(c.Operand1, c.Operand2)
|
|
glAPI.AssertIsEqual(actualRes[0], c.ExpectedResult[0])
|
|
glAPI.AssertIsEqual(actualRes[1], c.ExpectedResult[1])
|
|
return nil
|
|
}
|
|
|
|
func TestQuadraticExtensionDiv(t *testing.T) {
|
|
assert := test.NewAssert(t)
|
|
operand1 := QuadraticExtensionVariable{
|
|
NewVariable("4994088319481652598"),
|
|
NewVariable("16489566008211790727"),
|
|
}
|
|
operand2 := QuadraticExtensionVariable{
|
|
NewVariable("7166004739148609569"),
|
|
NewVariable("14655965871663555016"),
|
|
}
|
|
expectedResult := QuadraticExtensionVariable{
|
|
NewVariable("15052319864161058789"),
|
|
NewVariable("16841416332519902625"),
|
|
}
|
|
circuit := TestQuadraticExtensionDivCircuit{
|
|
Operand1: operand1,
|
|
Operand2: operand2,
|
|
ExpectedResult: expectedResult,
|
|
}
|
|
witness := TestQuadraticExtensionDivCircuit{
|
|
Operand1: operand1,
|
|
Operand2: operand2,
|
|
ExpectedResult: expectedResult,
|
|
}
|
|
err := test.IsSolved(&circuit, &witness, ecc.BN254.ScalarField())
|
|
assert.NoError(err)
|
|
}
|