trie: use stacktrie for Derivesha operation (#21407)
core/types: use stacktrie for derivesha trie: add stacktrie file trie: fix linter core/types: use stacktrie for derivesha rebased: adapt stacktrie to the newer version of DeriveSha Co-authored-by: Martin Holst Swende <martin@swende.se> More linter fixes review feedback: no key offset for nodes converted to hashes trie: use EncodeRLP for full nodes core/types: insert txs in order in derivesha trie: tests for derivesha with stacktrie trie: make stacktrie use pooled hashers trie: make stacktrie reuse tmp slice space trie: minor polishes on stacktrie trie/stacktrie: less rlp dancing core/types: explain the contorsions in DeriveSha ci: fix goimport errors trie: clear mem on subtrie hashing squashme: linter fix stracktrie: use pooling, less allocs (#3) trie: in-place hex prefix, reduce allocs and add rawNode.EncodeRLP Reintroduce the `[]node` method, add the missing `EncodeRLP` implementation for `rawNode` and calculate the hex prefix in place. Co-authored-by: Martin Holst Swende <martin@swende.se> Co-authored-by: Martin Holst Swende <martin@swende.se>
This commit is contained in:
		| @@ -18,6 +18,8 @@ package trie | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/hex" | ||||
| 	"math/rand" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| @@ -75,6 +77,40 @@ func TestHexKeybytes(t *testing.T) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestHexToCompactInPlace(t *testing.T) { | ||||
| 	for i, keyS := range []string{ | ||||
| 		"00", | ||||
| 		"060a040c0f000a090b040803010801010900080d090a0a0d0903000b10", | ||||
| 		"10", | ||||
| 	} { | ||||
| 		hexBytes, _ := hex.DecodeString(keyS) | ||||
| 		exp := hexToCompact(hexBytes) | ||||
| 		sz := hexToCompactInPlace(hexBytes) | ||||
| 		got := hexBytes[:sz] | ||||
| 		if !bytes.Equal(exp, got) { | ||||
| 			t.Fatalf("test %d: encoding err\ninp %v\ngot %x\nexp %x\n", i, keyS, got, exp) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestHexToCompactInPlaceRandom(t *testing.T) { | ||||
| 	for i := 0; i < 10000; i++ { | ||||
| 		l := rand.Intn(128) | ||||
| 		key := make([]byte, l) | ||||
| 		rand.Read(key) | ||||
| 		hexBytes := keybytesToHex(key) | ||||
| 		hexOrig := []byte(string(hexBytes)) | ||||
| 		exp := hexToCompact(hexBytes) | ||||
| 		sz := hexToCompactInPlace(hexBytes) | ||||
| 		got := hexBytes[:sz] | ||||
|  | ||||
| 		if !bytes.Equal(exp, got) { | ||||
| 			t.Fatalf("encoding err \ncpt %x\nhex %x\ngot %x\nexp %x\n", | ||||
| 				key, hexOrig, got, exp) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func BenchmarkHexToCompact(b *testing.B) { | ||||
| 	testBytes := []byte{0, 15, 1, 12, 11, 8, 16 /*term*/} | ||||
| 	for i := 0; i < b.N; i++ { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user