aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--trie/trie.go7
-rw-r--r--trie/trie_test.go56
2 files changed, 62 insertions, 1 deletions
diff --git a/trie/trie.go b/trie/trie.go
index 139e3d286..d89c39775 100644
--- a/trie/trie.go
+++ b/trie/trie.go
@@ -197,7 +197,12 @@ func (t *Trie) Update(key, value string) {
k := CompactHexDecode(key)
- root := t.UpdateState(t.Root, k, value)
+ var root interface{}
+ if value != "" {
+ root = t.UpdateState(t.Root, k, value)
+ } else {
+ root = t.deleteState(t.Root, k)
+ }
t.setRoot(root)
}
diff --git a/trie/trie_test.go b/trie/trie_test.go
index 4c7e621dc..d00671c6a 100644
--- a/trie/trie_test.go
+++ b/trie/trie_test.go
@@ -444,3 +444,59 @@ func TestRndCase(t *testing.T) {
fmt.Printf("%x\n", trie.Get(string(ethutil.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001"))))
}
*/
+
+func TestOtherSomething(t *testing.T) {
+ _, trie := NewTrie()
+
+ vals := []struct{ k, v string }{
+ {"do", "verb"},
+ {"ether", "wookiedoo"},
+ {"horse", "stallion"},
+ {"shaman", "horse"},
+ {"doge", "coin"},
+ {"ether", ""},
+ {"dog", "puppy"},
+ {"shaman", ""},
+ }
+ for _, val := range vals {
+ trie.Update(val.k, val.v)
+ }
+
+ exp := ethutil.Hex2Bytes("5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84")
+ hash := trie.Root.([]byte)
+ if !bytes.Equal(hash, exp) {
+ t.Errorf("expected %x got %x", exp, hash)
+ }
+}
+
+func BenchmarkGets(b *testing.B) {
+ _, trie := NewTrie()
+ 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.Update(val.k, val.v)
+ }
+
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ trie.Get("horse")
+ }
+}
+
+func BenchmarkUpdate(b *testing.B) {
+ _, trie := NewTrie()
+
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ trie.Update(fmt.Sprintf("aaaaaaaaaaaaaaa%d", j), "value")
+ }
+}