diff --git a/logic/c.go b/logic/c.go index d08091e..e60f5a1 100644 --- a/logic/c.go +++ b/logic/c.go @@ -266,7 +266,7 @@ func (p *C) And(a, b z.Lit) z.Lit { return b } c := strashCode(a, b) - l := uint32(cap(p.nodes)) + l := uint32(cap(p.nodes) - 1) i := c % l si := p.strash[i] for { @@ -282,7 +282,7 @@ func (p *C) And(a, b z.Lit) z.Lit { m, j := p.newNode() m.a = a m.b = b - k := c % uint32(cap(p.nodes)) + k := c % uint32(cap(p.nodes) - 1) m.n = p.strash[k] p.strash[k] = j return z.Var(j).Pos() @@ -367,7 +367,7 @@ func (p *C) grow() { continue } c := strashCode(n.a, n.b) - j := c % ucap + j := c % (ucap - 1) n.n = strash[j] strash[j] = uint32(i) } diff --git a/sudoku_test.go b/sudoku_test.go index a260390..2e08bbe 100644 --- a/sudoku_test.go +++ b/sudoku_test.go @@ -2,11 +2,18 @@ package gini_test import ( "fmt" + "testing" "github.com/go-air/gini" "github.com/go-air/gini/z" ) +func BenchmarkSudoku(b *testing.B) { + for i := 0; i < b.N; i++ { + Example_sudoku() + } +} + func Example_sudoku() { g := gini.New() // 9 rows, 9 cols, 9 boxes, 9 numbers