aboutsummaryrefslogtreecommitdiffstats
path: root/ptrie/trie_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'ptrie/trie_test.go')
-rw-r--r--ptrie/trie_test.go78
1 files changed, 58 insertions, 20 deletions
diff --git a/ptrie/trie_test.go b/ptrie/trie_test.go
index 6af6e1b40..478f59c60 100644
--- a/ptrie/trie_test.go
+++ b/ptrie/trie_test.go
@@ -8,6 +8,16 @@ import (
"github.com/ethereum/go-ethereum/ethutil"
)
+type Db map[string][]byte
+
+func (self Db) Get(k []byte) []byte { return self[string(k)] }
+func (self Db) Set(k, v []byte) { self[string(k)] = v }
+
+// Used for testing
+func NewEmpty() *Trie {
+ return New(nil, make(Db))
+}
+
func TestInsert(t *testing.T) {
trie := NewEmpty()
@@ -91,7 +101,7 @@ func TestReplication(t *testing.T) {
}
trie.Hash()
- trie2 := New(trie.roothash, trie.backend)
+ trie2 := New(trie.roothash, trie.cache)
if string(trie2.GetString("horse")) != "stallion" {
t.Error("expected to have harse => stallion")
}
@@ -104,37 +114,32 @@ func TestReplication(t *testing.T) {
}
-func BenchmarkGets(b *testing.B) {
+func TestReset(t *testing.T) {
trie := NewEmpty()
vals := []struct{ k, v string }{
{"do", "verb"},
{"ether", "wookiedoo"},
{"horse", "stallion"},
- {"shaman", "horse"},
- {"doge", "coin"},
- {"ether", ""},
- {"dog", "puppy"},
- {"shaman", ""},
- {"somethingveryoddindeedthis is", "myothernodedata"},
}
for _, val := range vals {
trie.UpdateString(val.k, val.v)
}
+ trie.Commit()
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- trie.Get([]byte("horse"))
- }
-}
+ before := ethutil.CopyBytes(trie.roothash)
+ trie.UpdateString("should", "revert")
+ trie.Hash()
+ // Should have no effect
+ trie.Hash()
+ trie.Hash()
+ // ###
-func BenchmarkUpdate(b *testing.B) {
- trie := NewEmpty()
+ trie.Reset()
+ after := ethutil.CopyBytes(trie.roothash)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- trie.UpdateString(fmt.Sprintf("aaaaaaaaa%d", i), "value")
+ if !bytes.Equal(before, after) {
+ t.Errorf("expected roots to be equal. %x - %x", before, after)
}
- trie.Hash()
}
// Not actual test
@@ -150,8 +155,41 @@ func TestOutput(t *testing.T) {
fmt.Println("############################## FULL ################################")
fmt.Println(trie.root)
- trie2 := New(trie.roothash, trie.backend)
+ trie2 := New(trie.roothash, trie.cache)
trie2.GetString(base + "20")
fmt.Println("############################## SMALL ################################")
fmt.Println(trie2.root)
}
+
+func BenchmarkGets(b *testing.B) {
+ trie := NewEmpty()
+ vals := []struct{ k, v string }{
+ {"do", "verb"},
+ {"ether", "wookiedoo"},
+ {"horse", "stallion"},
+ {"shaman", "horse"},
+ {"doge", "coin"},
+ {"ether", ""},
+ {"dog", "puppy"},
+ {"shaman", ""},
+ {"somethingveryoddindeedthis is", "myothernodedata"},
+ }
+ for _, val := range vals {
+ trie.UpdateString(val.k, val.v)
+ }
+
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ trie.Get([]byte("horse"))
+ }
+}
+
+func BenchmarkUpdate(b *testing.B) {
+ trie := NewEmpty()
+
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ trie.UpdateString(fmt.Sprintf("aaaaaaaaa%d", i), "value")
+ }
+ trie.Hash()
+}