github.com/consensys/gnark@v0.11.0/internal/backend/circuits/lookup2.go (about)

     1  package circuits
     2  
     3  import (
     4  	"github.com/consensys/gnark/frontend"
     5  )
     6  
     7  type lookup2Circuit struct {
     8  	V0, V1, V2, V3       frontend.Variable `gnark:",secret"`
     9  	Selector0, Selector1 frontend.Variable `gnark:",secret"`
    10  	Expected             frontend.Variable `gnark:",public"`
    11  }
    12  
    13  func (c *lookup2Circuit) Define(api frontend.API) error {
    14  	selected := api.Lookup2(c.Selector0, c.Selector1, c.V0, c.V1, c.V2, c.V3)
    15  	api.AssertIsEqual(selected, c.Expected)
    16  	return nil
    17  }
    18  
    19  func init() {
    20  	v0, v1, v2, v3 := 0, 1, 2, 3
    21  	good := []frontend.Circuit{}
    22  	bad := []frontend.Circuit{}
    23  	for _, tc := range []struct {
    24  		b0, b1     int
    25  		expected   int
    26  		unexpected int
    27  	}{{0, 0, 0, 1}, {1, 0, 1, 0}, {0, 1, 2, 0}, {1, 1, 3, 0}} {
    28  		good = append(good, &lookup2Circuit{v0, v1, v2, v3, tc.b0, tc.b1, tc.expected})
    29  		bad = append(bad, &lookup2Circuit{v0, v1, v2, v3, tc.b0, tc.b1, tc.unexpected})
    30  	}
    31  
    32  	addNewEntry("lookup2", &lookup2Circuit{}, good, bad, nil)
    33  }