mirror of
https://github.com/arnaucube/arbo.git
synced 2026-01-09 07:21:28 +01:00
Merge pull request #9 from vocdoni/fix/level
Fix level when going down & in computeHashes
This commit is contained in:
2
tree.go
2
tree.go
@@ -340,7 +340,7 @@ func (t *Tree) add(wTx db.WriteTx, root []byte, fromLvl int, k, v []byte) ([]byt
|
|||||||
func (t *Tree) down(rTx db.ReadTx, newKey, currKey []byte, siblings [][]byte,
|
func (t *Tree) down(rTx db.ReadTx, newKey, currKey []byte, siblings [][]byte,
|
||||||
path []bool, currLvl int, getLeaf bool) (
|
path []bool, currLvl int, getLeaf bool) (
|
||||||
[]byte, []byte, [][]byte, error) {
|
[]byte, []byte, [][]byte, error) {
|
||||||
if currLvl > t.maxLevels-1 {
|
if currLvl > t.maxLevels {
|
||||||
return nil, nil, nil, ErrMaxLevel
|
return nil, nil, nil, ErrMaxLevel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
60
tree_test.go
60
tree_test.go
@@ -454,6 +454,66 @@ func TestRWMutex(t *testing.T) {
|
|||||||
// c.Assert(n, qt.Equals, maxInt)
|
// c.Assert(n, qt.Equals, maxInt)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
func TestAddBatchFullyUsed(t *testing.T) {
|
||||||
|
c := qt.New(t)
|
||||||
|
|
||||||
|
database1, err := badgerdb.New(badgerdb.Options{Path: c.TempDir()})
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
tree1, err := NewTree(database1, 4, HashFunctionPoseidon)
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
|
||||||
|
database2, err := badgerdb.New(badgerdb.Options{Path: c.TempDir()})
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
tree2, err := NewTree(database2, 4, HashFunctionPoseidon)
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
|
||||||
|
var keys, values [][]byte
|
||||||
|
for i := 0; i < 16; i++ {
|
||||||
|
k := BigIntToBytes(32, big.NewInt(int64(i)))
|
||||||
|
v := k
|
||||||
|
|
||||||
|
keys = append(keys, k)
|
||||||
|
values = append(values, v)
|
||||||
|
|
||||||
|
// add one by one expecting no error
|
||||||
|
err := tree1.Add(k, v)
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
}
|
||||||
|
|
||||||
|
invalids, err := tree2.AddBatch(keys, values)
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
c.Assert(0, qt.Equals, len(invalids))
|
||||||
|
|
||||||
|
root1, err := tree1.Root()
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
root2, err := tree2.Root()
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
c.Assert(root1, qt.DeepEquals, root2)
|
||||||
|
|
||||||
|
// get all key-values and check that are equal between both trees
|
||||||
|
for i := 0; i < 16; i++ {
|
||||||
|
auxK1, auxV1, err := tree1.Get(BigIntToBytes(32, big.NewInt(int64(i))))
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
|
||||||
|
auxK2, auxV2, err := tree2.Get(BigIntToBytes(32, big.NewInt(int64(i))))
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
|
||||||
|
c.Assert(auxK1, qt.DeepEquals, auxK2)
|
||||||
|
c.Assert(auxV1, qt.DeepEquals, auxV2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// try adding one more key to both trees (through Add & AddBatch) and
|
||||||
|
// expect not being added due the tree is already full
|
||||||
|
k := BigIntToBytes(32, big.NewInt(int64(16)))
|
||||||
|
v := k
|
||||||
|
err = tree1.Add(k, v)
|
||||||
|
c.Assert(err, qt.Equals, ErrMaxVirtualLevel)
|
||||||
|
|
||||||
|
invalids, err = tree2.AddBatch([][]byte{k}, [][]byte{v})
|
||||||
|
c.Assert(err, qt.IsNil)
|
||||||
|
c.Assert(1, qt.Equals, len(invalids))
|
||||||
|
}
|
||||||
|
|
||||||
func TestSnapshot(t *testing.T) {
|
func TestSnapshot(t *testing.T) {
|
||||||
c := qt.New(t)
|
c := qt.New(t)
|
||||||
database, err := badgerdb.New(badgerdb.Options{Path: c.TempDir()})
|
database, err := badgerdb.New(badgerdb.Options{Path: c.TempDir()})
|
||||||
|
|||||||
4
vt.go
4
vt.go
@@ -318,11 +318,11 @@ func (t *vt) computeHashes() ([][2][]byte, error) {
|
|||||||
wg.Add(nCPU)
|
wg.Add(nCPU)
|
||||||
for i := 0; i < nCPU; i++ {
|
for i := 0; i < nCPU; i++ {
|
||||||
go func(cpu int) {
|
go func(cpu int) {
|
||||||
bucketVT := newVT(t.params.maxLevels-l, t.params.hashFunction)
|
bucketVT := newVT(t.params.maxLevels, t.params.hashFunction)
|
||||||
bucketVT.params.dbg = newDbgStats()
|
bucketVT.params.dbg = newDbgStats()
|
||||||
bucketVT.root = nodesAtL[cpu]
|
bucketVT.root = nodesAtL[cpu]
|
||||||
|
|
||||||
bucketPairs[cpu], err = bucketVT.root.computeHashes(l,
|
bucketPairs[cpu], err = bucketVT.root.computeHashes(l-1,
|
||||||
t.params.maxLevels, bucketVT.params, bucketPairs[cpu])
|
t.params.maxLevels, bucketVT.params, bucketPairs[cpu])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errs[cpu] = err
|
errs[cpu] = err
|
||||||
|
|||||||
Reference in New Issue
Block a user