From 3220a32ff056f5bffed031bf1c4d3b0bc71f1ec9 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 18 Nov 2014 12:03:09 +0100 Subject: Added some comparison tests for the new ptrie --- trie/trie.go | 7 ++++++- trie/trie_test.go | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) (limited to 'trie') 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") + } +} -- cgit v1.2.3