Skip to content

Commit

Permalink
first try
Browse files Browse the repository at this point in the history
  • Loading branch information
facundomedica committed May 5, 2022
1 parent dfde9a5 commit f6fe740
Show file tree
Hide file tree
Showing 20 changed files with 710 additions and 308 deletions.
88 changes: 61 additions & 27 deletions basic_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,23 @@ import (
func TestBasic(t *testing.T) {
tree, err := getTestTree(0)
require.NoError(t, err)
up := tree.Set([]byte("1"), []byte("one"))
up, err := tree.Set([]byte("1"), []byte("one"))
require.NoError(t, err)
if up {
t.Error("Did not expect an update (should have been create)")
}
up = tree.Set([]byte("2"), []byte("two"))
up, err = tree.Set([]byte("2"), []byte("two"))
require.NoError(t, err)
if up {
t.Error("Did not expect an update (should have been create)")
}
up = tree.Set([]byte("2"), []byte("TWO"))
up, err = tree.Set([]byte("2"), []byte("TWO"))
require.NoError(t, err)
if !up {
t.Error("Expected an update")
}
up = tree.Set([]byte("5"), []byte("five"))
up, err = tree.Set([]byte("5"), []byte("five"))
require.NoError(t, err)
if up {
t.Error("Did not expect an update (should have been create)")
}
Expand All @@ -38,7 +42,8 @@ func TestBasic(t *testing.T) {
key := []byte{0x00}
expected := ""

idx, val := tree.GetWithIndex(key)
idx, val, err := tree.GetWithIndex(key)
require.NoError(t, err)
if val != nil {
t.Error("Expected no value to exist")
}
Expand All @@ -49,7 +54,7 @@ func TestBasic(t *testing.T) {
t.Errorf("Unexpected value %s", val)
}

val = tree.Get(key)
val, err = tree.Get(key)
if val != nil {
t.Error("Fast method - expected no value to exist")
}
Expand All @@ -63,7 +68,8 @@ func TestBasic(t *testing.T) {
key := []byte("1")
expected := "one"

idx, val := tree.GetWithIndex(key)
idx, val, err := tree.GetWithIndex(key)
require.NoError(t, err)
if val == nil {
t.Error("Expected value to exist")
}
Expand All @@ -74,7 +80,8 @@ func TestBasic(t *testing.T) {
t.Errorf("Unexpected value %s", val)
}

val = tree.Get(key)
val, err = tree.Get(key)
require.NoError(t, err)
if val == nil {
t.Error("Fast method - expected value to exist")
}
Expand All @@ -88,7 +95,8 @@ func TestBasic(t *testing.T) {
key := []byte("2")
expected := "TWO"

idx, val := tree.GetWithIndex(key)
idx, val, err := tree.GetWithIndex(key)
require.NoError(t, err)
if val == nil {
t.Error("Expected value to exist")
}
Expand All @@ -99,7 +107,7 @@ func TestBasic(t *testing.T) {
t.Errorf("Unexpected value %s", val)
}

val = tree.Get(key)
val, err = tree.Get(key)
if val == nil {
t.Error("Fast method - expected value to exist")
}
Expand All @@ -113,7 +121,8 @@ func TestBasic(t *testing.T) {
key := []byte("4")
expected := ""

idx, val := tree.GetWithIndex(key)
idx, val, err := tree.GetWithIndex(key)
require.NoError(t, err)
if val != nil {
t.Error("Expected no value to exist")
}
Expand All @@ -124,7 +133,7 @@ func TestBasic(t *testing.T) {
t.Errorf("Unexpected value %s", val)
}

val = tree.Get(key)
val, err = tree.Get(key)
if val != nil {
t.Error("Fast method - expected no value to exist")
}
Expand All @@ -138,7 +147,8 @@ func TestBasic(t *testing.T) {
key := []byte("6")
expected := ""

idx, val := tree.GetWithIndex(key)
idx, val, err := tree.GetWithIndex(key)
require.NoError(t, err)
if val != nil {
t.Error("Expected no value to exist")
}
Expand All @@ -149,7 +159,7 @@ func TestBasic(t *testing.T) {
t.Errorf("Unexpected value %s", val)
}

val = tree.Get(key)
val, err = tree.Get(key)
if val != nil {
t.Error("Fast method - expected no value to exist")
}
Expand Down Expand Up @@ -181,7 +191,8 @@ func TestUnit(t *testing.T) {

expectSet := func(tree *MutableTree, i int, repr string, hashCount int64) {
origNode := tree.root
updated := tree.Set(i2b(i), []byte{})
updated, err := tree.Set(i2b(i), []byte{})
require.NoError(t, err)
// ensure node was added & structure is as expected.
if updated || P(tree.root) != repr {
t.Fatalf("Adding %v to %v:\nExpected %v\nUnexpectedly got %v updated:%v",
Expand All @@ -194,7 +205,8 @@ func TestUnit(t *testing.T) {

expectRemove := func(tree *MutableTree, i int, repr string, hashCount int64) {
origNode := tree.root
value, removed := tree.Remove(i2b(i))
value, removed, err := tree.Remove(i2b(i))
require.NoError(t, err)
// ensure node was added & structure is as expected.
if len(value) != 0 || !removed || P(tree.root) != repr {
t.Fatalf("Removing %v from %v:\nExpected %v\nUnexpectedly got %v value:%v removed:%v",
Expand Down Expand Up @@ -287,11 +299,13 @@ func TestIntegration(t *testing.T) {
for i := range records {
r := randomRecord()
records[i] = r
updated := tree.Set([]byte(r.key), []byte{})
updated, err := tree.Set([]byte(r.key), []byte{})
require.NoError(t, err)
if updated {
t.Error("should have not been updated")
}
updated = tree.Set([]byte(r.key), []byte(r.value))
updated, err = tree.Set([]byte(r.key), []byte(r.value))
require.NoError(t, err)
if !updated {
t.Error("should have been updated")
}
Expand All @@ -301,31 +315,49 @@ func TestIntegration(t *testing.T) {
}

for _, r := range records {
if has := tree.Has([]byte(r.key)); !has {
has, err := tree.Has([]byte(r.key))
require.NoError(t, err)
if !has {
t.Error("Missing key", r.key)
}
if has := tree.Has([]byte(randstr(12))); has {

has, err = tree.Has([]byte(randstr(12)))
require.NoError(t, err)
if has {
t.Error("Table has extra key")
}
if val := tree.Get([]byte(r.key)); string(val) != r.value {

val, err := tree.Get([]byte(r.key))
require.NoError(t, err)
if string(val) != r.value {
t.Error("wrong value")
}
}

for i, x := range records {
if val, removed := tree.Remove([]byte(x.key)); !removed {
if val, removed, err := tree.Remove([]byte(x.key)); err != nil {
require.NoError(t, err)
} else if !removed {
t.Error("Wasn't removed")
} else if string(val) != x.value {
t.Error("Wrong value")
}
require.NoError(t, err)
for _, r := range records[i+1:] {
if has := tree.Has([]byte(r.key)); !has {
has, err := tree.Has([]byte(r.key))
require.NoError(t, err)
if !has {
t.Error("Missing key", r.key)
}
if has := tree.Has([]byte(randstr(12))); has {

has, err = tree.Has([]byte(randstr(12)))
require.NoError(t, err)
if has {
t.Error("Table has extra key")
}
val := tree.Get([]byte(r.key))

val, err := tree.Get([]byte(r.key))
require.NoError(t, err)
if string(val) != r.value {
t.Error("wrong value")
}
Expand Down Expand Up @@ -365,7 +397,8 @@ func TestIterateRange(t *testing.T) {

// insert all the data
for _, r := range records {
updated := tree.Set([]byte(r.key), []byte(r.value))
updated, err := tree.Set([]byte(r.key), []byte(r.value))
require.NoError(t, err)
if updated {
t.Error("should have not been updated")
}
Expand Down Expand Up @@ -443,7 +476,8 @@ func TestPersistence(t *testing.T) {
require.NoError(t, err)
t2.Load()
for key, value := range records {
t2value := t2.Get([]byte(key))
t2value, err := t2.Get([]byte(key))
require.NoError(t, err)
if string(t2value) != value {
t.Fatalf("Invalid value. Expected %v, got %v", value, t2value)
}
Expand Down
3 changes: 2 additions & 1 deletion benchmarks/bench_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@ func runKnownQueriesSlow(b *testing.B, t *iavl.MutableTree, keys [][]byte) {
l := int32(len(keys))
for i := 0; i < b.N; i++ {
q := keys[rand.Int31n(l)]
index, value := itree.GetWithIndex(q)
index, value, err := itree.GetWithIndex(q)
require.NoError(b, err)
require.True(b, index >= 0, "the index must not be negative")
require.NotNil(b, value, "the value should exist")
}
Expand Down
3 changes: 2 additions & 1 deletion cmd/iaviewer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,8 @@ func encodeID(id []byte) string {

func PrintShape(tree *iavl.MutableTree) {
// shape := tree.RenderShape(" ", nil)
shape := tree.RenderShape(" ", nodeEncoder)
//TODO: handle this error
shape, _ := tree.RenderShape(" ", nodeEncoder)
fmt.Println(strings.Join(shape, "\n"))
}

Expand Down
18 changes: 12 additions & 6 deletions export_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,20 +75,22 @@ func setupExportTreeRandom(t *testing.T) *ImmutableTree {
index := r.Intn(len(keys))
key = keys[index]
keys = append(keys[:index], keys[index+1:]...)
_, removed := tree.Remove(key)
_, removed, err := tree.Remove(key)
require.NoError(t, err)
require.True(t, removed)

case len(keys) > 0 && r.Float64() <= updateRatio:
key = keys[r.Intn(len(keys))]
r.Read(value)
updated := tree.Set(key, value)
updated, err := tree.Set(key, value)
require.NoError(t, err)
require.True(t, updated)

default:
r.Read(key)
r.Read(value)
// If we get an update, set again
for tree.Set(key, value) {
for updated, err := tree.Set(key, value); updated && err == nil; {
key = make([]byte, keySize)
r.Read(key)
}
Expand Down Expand Up @@ -125,7 +127,9 @@ func setupExportTreeSized(t require.TestingT, treeSize int) *ImmutableTree {
value := make([]byte, valueSize)
r.Read(key)
r.Read(value)
updated := tree.Set(key, value)
updated, err := tree.Set(key, value)
require.NoError(t, err)

if updated {
i--
}
Expand Down Expand Up @@ -211,8 +215,10 @@ func TestExporter_Import(t *testing.T) {
require.Equal(t, tree.Version(), newTree.Version(), "Tree version mismatch")

tree.Iterate(func(key, value []byte) bool {
index, _ := tree.GetWithIndex(key)
newIndex, newValue := newTree.GetWithIndex(key)
index, _, err := tree.GetWithIndex(key)
require.NoError(t, err)
newIndex, newValue, err := newTree.GetWithIndex(key)
require.NoError(t, err)
require.Equal(t, index, newIndex, "Index mismatch for key %v", key)
require.Equal(t, value, newValue, "Value mismatch for key %v", key)
return false
Expand Down
Loading

0 comments on commit f6fe740

Please sign in to comment.