Skip to content

Commit 01d1058

Browse files
committed
trie: use slices package for sorting ethereum#27496
1 parent b49f6cb commit 01d1058

File tree

2 files changed

+37
-38
lines changed

2 files changed

+37
-38
lines changed

trie/iterator_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ type kv struct {
8585
t bool
8686
}
8787

88+
func (k *kv) cmp(other *kv) int {
89+
return bytes.Compare(k.k, other.k)
90+
}
91+
8892
func TestIteratorLargeData(t *testing.T) {
8993
trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase()))
9094
vals := make(map[string]*kv)

trie/proof_test.go

Lines changed: 33 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
crand "crypto/rand"
2222
"encoding/binary"
2323
mrand "math/rand"
24+
"slices"
2425
"sort"
2526
"testing"
2627

@@ -146,21 +147,15 @@ func TestMissingKeyProof(t *testing.T) {
146147
}
147148
}
148149

149-
type entrySlice []*kv
150-
151-
func (p entrySlice) Len() int { return len(p) }
152-
func (p entrySlice) Less(i, j int) bool { return bytes.Compare(p[i].k, p[j].k) < 0 }
153-
func (p entrySlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
154-
155150
// TestRangeProof tests normal range proof with both edge proofs
156151
// as the existent proof. The test cases are generated randomly.
157152
func TestRangeProof(t *testing.T) {
158153
trie, vals := randomTrie(4096)
159-
var entries entrySlice
154+
var entries []*kv
160155
for _, kv := range vals {
161156
entries = append(entries, kv)
162157
}
163-
sort.Sort(entries)
158+
slices.SortFunc(entries, (*kv).cmp)
164159
for i := 0; i < 500; i++ {
165160
start := mrand.Intn(len(entries))
166161
end := mrand.Intn(len(entries)-start) + start + 1
@@ -189,11 +184,11 @@ func TestRangeProof(t *testing.T) {
189184
// The test cases are generated randomly.
190185
func TestRangeProofWithNonExistentProof(t *testing.T) {
191186
trie, vals := randomTrie(4096)
192-
var entries entrySlice
187+
var entries []*kv
193188
for _, kv := range vals {
194189
entries = append(entries, kv)
195190
}
196-
sort.Sort(entries)
191+
slices.SortFunc(entries, (*kv).cmp)
197192
for i := 0; i < 500; i++ {
198193
start := mrand.Intn(len(entries))
199194
end := mrand.Intn(len(entries)-start) + start + 1
@@ -261,11 +256,11 @@ func TestRangeProofWithNonExistentProof(t *testing.T) {
261256
// - There exists a gap between the last element and the right edge proof
262257
func TestRangeProofWithInvalidNonExistentProof(t *testing.T) {
263258
trie, vals := randomTrie(4096)
264-
var entries entrySlice
259+
var entries []*kv
265260
for _, kv := range vals {
266261
entries = append(entries, kv)
267262
}
268-
sort.Sort(entries)
263+
slices.SortFunc(entries, (*kv).cmp)
269264

270265
// Case 1
271266
start, end := 100, 200
@@ -318,11 +313,11 @@ func TestRangeProofWithInvalidNonExistentProof(t *testing.T) {
318313
// non-existent one.
319314
func TestOneElementRangeProof(t *testing.T) {
320315
trie, vals := randomTrie(4096)
321-
var entries entrySlice
316+
var entries []*kv
322317
for _, kv := range vals {
323318
entries = append(entries, kv)
324319
}
325-
sort.Sort(entries)
320+
slices.SortFunc(entries, (*kv).cmp)
326321

327322
// One element with existent edge proof, both edge proofs
328323
// point to the SAME key.
@@ -405,11 +400,11 @@ func TestOneElementRangeProof(t *testing.T) {
405400
// The edge proofs can be nil.
406401
func TestAllElementsProof(t *testing.T) {
407402
trie, vals := randomTrie(4096)
408-
var entries entrySlice
403+
var entries []*kv
409404
for _, kv := range vals {
410405
entries = append(entries, kv)
411406
}
412-
sort.Sort(entries)
407+
slices.SortFunc(entries, (*kv).cmp)
413408

414409
var k [][]byte
415410
var v [][]byte
@@ -455,13 +450,13 @@ func TestAllElementsProof(t *testing.T) {
455450
func TestSingleSideRangeProof(t *testing.T) {
456451
for i := 0; i < 64; i++ {
457452
trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase()))
458-
var entries entrySlice
453+
var entries []*kv
459454
for i := 0; i < 4096; i++ {
460455
value := &kv{randBytes(32), randBytes(20), false}
461456
trie.Update(value.k, value.v)
462457
entries = append(entries, value)
463458
}
464-
sort.Sort(entries)
459+
slices.SortFunc(entries, (*kv).cmp)
465460

466461
var cases = []int{0, 1, 50, 100, 1000, 2000, len(entries) - 1}
467462
for _, pos := range cases {
@@ -490,13 +485,13 @@ func TestSingleSideRangeProof(t *testing.T) {
490485
func TestReverseSingleSideRangeProof(t *testing.T) {
491486
for i := 0; i < 64; i++ {
492487
trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase()))
493-
var entries entrySlice
488+
var entries []*kv
494489
for i := 0; i < 4096; i++ {
495490
value := &kv{randBytes(32), randBytes(20), false}
496491
trie.Update(value.k, value.v)
497492
entries = append(entries, value)
498493
}
499-
sort.Sort(entries)
494+
slices.SortFunc(entries, (*kv).cmp)
500495

501496
var cases = []int{0, 1, 50, 100, 1000, 2000, len(entries) - 1}
502497
for _, pos := range cases {
@@ -526,11 +521,11 @@ func TestReverseSingleSideRangeProof(t *testing.T) {
526521
// The prover is expected to detect the error.
527522
func TestBadRangeProof(t *testing.T) {
528523
trie, vals := randomTrie(4096)
529-
var entries entrySlice
524+
var entries []*kv
530525
for _, kv := range vals {
531526
entries = append(entries, kv)
532527
}
533-
sort.Sort(entries)
528+
slices.SortFunc(entries, (*kv).cmp)
534529

535530
for i := 0; i < 500; i++ {
536531
start := mrand.Intn(len(entries))
@@ -629,11 +624,11 @@ func TestGappedRangeProof(t *testing.T) {
629624
// TestSameSideProofs tests the element is not in the range covered by proofs
630625
func TestSameSideProofs(t *testing.T) {
631626
trie, vals := randomTrie(4096)
632-
var entries entrySlice
627+
var entries []*kv
633628
for _, kv := range vals {
634629
entries = append(entries, kv)
635630
}
636-
sort.Sort(entries)
631+
slices.SortFunc(entries, (*kv).cmp)
637632

638633
pos := 1000
639634
first := decreaseKey(common.CopyBytes(entries[pos].k))
@@ -671,13 +666,13 @@ func TestSameSideProofs(t *testing.T) {
671666

672667
func TestHasRightElement(t *testing.T) {
673668
trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase()))
674-
var entries entrySlice
669+
var entries []*kv
675670
for i := 0; i < 4096; i++ {
676671
value := &kv{randBytes(32), randBytes(20), false}
677672
trie.Update(value.k, value.v)
678673
entries = append(entries, value)
679674
}
680-
sort.Sort(entries)
675+
slices.SortFunc(entries, (*kv).cmp)
681676

682677
var cases = []struct {
683678
start int
@@ -745,11 +740,11 @@ func TestHasRightElement(t *testing.T) {
745740
// The first edge proof must be a non-existent proof.
746741
func TestEmptyRangeProof(t *testing.T) {
747742
trie, vals := randomTrie(4096)
748-
var entries entrySlice
743+
var entries []*kv
749744
for _, kv := range vals {
750745
entries = append(entries, kv)
751746
}
752-
sort.Sort(entries)
747+
slices.SortFunc(entries, (*kv).cmp)
753748

754749
var cases = []struct {
755750
pos int
@@ -780,11 +775,11 @@ func TestEmptyRangeProof(t *testing.T) {
780775
func TestBloatedProof(t *testing.T) {
781776
// Use a small trie
782777
trie, kvs := nonRandomTrie(100)
783-
var entries entrySlice
778+
var entries []*kv
784779
for _, kv := range kvs {
785780
entries = append(entries, kv)
786781
}
787-
sort.Sort(entries)
782+
slices.SortFunc(entries, (*kv).cmp)
788783
var keys [][]byte
789784
var vals [][]byte
790785

@@ -814,11 +809,11 @@ func TestBloatedProof(t *testing.T) {
814809
// noop technically, but practically should be rejected.
815810
func TestEmptyValueRangeProof(t *testing.T) {
816811
trie, values := randomTrie(512)
817-
var entries entrySlice
812+
var entries []*kv
818813
for _, kv := range values {
819814
entries = append(entries, kv)
820815
}
821-
sort.Sort(entries)
816+
slices.SortFunc(entries, (*kv).cmp)
822817

823818
// Create a new entry with a slightly modified key
824819
mid := len(entries) / 2
@@ -858,11 +853,11 @@ func TestEmptyValueRangeProof(t *testing.T) {
858853
// practically should be rejected.
859854
func TestAllElementsEmptyValueRangeProof(t *testing.T) {
860855
trie, values := randomTrie(512)
861-
var entries entrySlice
856+
var entries []*kv
862857
for _, kv := range values {
863858
entries = append(entries, kv)
864859
}
865-
sort.Sort(entries)
860+
slices.SortFunc(entries, (*kv).cmp)
866861

867862
// Create a new entry with a slightly modified key
868863
mid := len(entries) / 2
@@ -964,11 +959,11 @@ func BenchmarkVerifyRangeProof5000(b *testing.B) { benchmarkVerifyRangeProof(b,
964959

965960
func benchmarkVerifyRangeProof(b *testing.B, size int) {
966961
trie, vals := randomTrie(8192)
967-
var entries entrySlice
962+
var entries []*kv
968963
for _, kv := range vals {
969964
entries = append(entries, kv)
970965
}
971-
sort.Sort(entries)
966+
slices.SortFunc(entries, (*kv).cmp)
972967

973968
start := 2
974969
end := start + size
@@ -1001,11 +996,11 @@ func BenchmarkVerifyRangeNoProof1000(b *testing.B) { benchmarkVerifyRangeNoProof
1001996

1002997
func benchmarkVerifyRangeNoProof(b *testing.B, size int) {
1003998
trie, vals := randomTrie(size)
1004-
var entries entrySlice
999+
var entries []*kv
10051000
for _, kv := range vals {
10061001
entries = append(entries, kv)
10071002
}
1008-
sort.Sort(entries)
1003+
slices.SortFunc(entries, (*kv).cmp)
10091004

10101005
var keys [][]byte
10111006
var values [][]byte

0 commit comments

Comments
 (0)