Files
linea-monorepo/prover/symbolic/expression_board_test.go
Julien Marchand a001342170 chore: Initial commit
Co-authored-by: Franklin Delehelle <franklin.delehelle@odena.eu>
Co-authored-by: Alexandre Belling <alexandrebelling8@gmail.com>
Co-authored-by: Pedro Novais <jpvnovais@gmail.com>
Co-authored-by: Roman Vaseev <4833306+Filter94@users.noreply.github.com>
Co-authored-by: Bradley Bown <bradbown@googlemail.com>
Co-authored-by: Victorien Gauch <85494462+VGau@users.noreply.github.com>
Co-authored-by: Nikolai Golub <nikolai.golub@consensys.net>
Co-authored-by: The Dark Jester <thedarkjester@users.noreply.github.com>
Co-authored-by: jonesho <81145364+jonesho@users.noreply.github.com>
Co-authored-by: Gaurav Ahuja <gauravahuja9@gmail.com>
Co-authored-by: Azam Soleimanian <49027816+Soleimani193@users.noreply.github.com>
Co-authored-by: Andrei A <andrei.alexandru@consensys.net>
Co-authored-by: Arijit Dutta <37040536+arijitdutta67@users.noreply.github.com>
Co-authored-by: Gautam Botrel <gautam.botrel@gmail.com>
Co-authored-by: Ivo Kubjas <ivo.kubjas@consensys.net>
Co-authored-by: gusiri <dreamerty@postech.ac.kr>
Co-authored-by: FlorianHuc <florian.huc@gmail.com>
Co-authored-by: Arya Tabaie <arya.pourtabatabaie@gmail.com>
Co-authored-by: Julink <julien.fontanel@consensys.net>
Co-authored-by: Bogdan Ursu <bogdanursuoffice@gmail.com>
Co-authored-by: Jakub Trąd <jakubtrad@gmail.com>
Co-authored-by: Alessandro Sforzin <alessandro.sforzin@consensys.net>
Co-authored-by: Olivier Bégassat <olivier.begassat.cours@gmail.com>
Co-authored-by: Steve Huang <97596526+stevehuangc7s@users.noreply.github.com>
Co-authored-by: bkolad <blazejkolad@gmail.com>
Co-authored-by: fadyabuhatoum1 <139905934+fadyabuhatoum1@users.noreply.github.com>
Co-authored-by: Blas Rodriguez Irizar <rodrigblas@gmail.com>
Co-authored-by: Eduardo Andrade <eduardofandrade@gmail.com>
Co-authored-by: Ivo Kubjas <tsimmm@gmail.com>
Co-authored-by: Ludcour <ludovic.courcelas@consensys.net>
Co-authored-by: m4sterbunny <harrie.bickle@consensys.net>
Co-authored-by: Alex Panayi <145478258+alexandrospanayi@users.noreply.github.com>
Co-authored-by: Diana Borbe - ConsenSys <diana.borbe@consensys.net>
Co-authored-by: ThomasPiellard <thomas.piellard@gmail.com>
2024-07-31 18:17:20 +02:00

78 lines
1.8 KiB
Go

package symbolic
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestBoarding(t *testing.T) {
x := NewDummyVar("x")
y := NewDummyVar("y")
{
// Simple case : x + y
expr := x.Add(y)
b := expr.Board()
require.Equal(t, len(b.Nodes), 2)
require.Equal(t, len(b.Nodes[0]), 2)
require.Equal(t, len(b.Nodes[1]), 1)
metadatas := b.ListVariableMetadata()
require.Equal(t, len(metadatas), 2)
require.Equal(t, metadatas[0].String(), "x")
require.Equal(t, metadatas[1].String(), "y")
}
{
// Pythagoras
expr := x.Square().Add(y.Square())
b := expr.Board()
require.Equal(t, len(b.Nodes), 3)
require.Equal(t, len(b.Nodes[0]), 2)
require.Equal(t, len(b.Nodes[1]), 2)
require.Equal(t, len(b.Nodes[2]), 1)
metadatas := b.ListVariableMetadata()
require.Equal(t, len(metadatas), 2)
require.Equal(t, metadatas[0].String(), "x")
require.Equal(t, metadatas[1].String(), "y")
}
{
// It should eliminate duplicate variables
// (Concretely, it should reuse the x^2)
expr := x.Square().Add(y.Square()).Mul(x.Square())
b := expr.Board()
require.Equal(t, len(b.Nodes), 4)
require.Equal(t, len(b.Nodes[0]), 2)
require.Equal(t, len(b.Nodes[1]), 2)
require.Equal(t, len(b.Nodes[2]), 1)
require.Equal(t, len(b.Nodes[3]), 1)
metadatas := b.ListVariableMetadata()
require.Equal(t, len(metadatas), 2)
require.Equal(t, metadatas[0].String(), "x")
require.Equal(t, metadatas[1].String(), "y")
}
}
func TestNodeID(t *testing.T) {
levels := []int{0, 0, 1, 2, 15, 64, 1 << 10}
pos := []int{0, 1, 1, 0, 4, 12, 1 << 10, 42}
for i := range levels {
nodeID := newNodeID(levels[i], pos[i])
require.Equal(t, levels[i], nodeID.level(), "nodeid %v", nodeID)
require.Equal(t, pos[i], nodeID.posInLevel(), "nodeid %v", nodeID)
}
}