Skip to content

Commit 3cd433f

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

File tree

2 files changed

+37
-39
lines changed

2 files changed

+37
-39
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 & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
crand "crypto/rand"
2222
"encoding/binary"
2323
mrand "math/rand"
24-
"sort"
24+
"slices"
2525
"testing"
2626

2727
"github.com/XinFinOrg/XDPoSChain/common"
@@ -146,21 +146,15 @@ func TestMissingKeyProof(t *testing.T) {
146146
}
147147
}
148148

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-
155149
// TestRangeProof tests normal range proof with both edge proofs
156150
// as the existent proof. The test cases are generated randomly.
157151
func TestRangeProof(t *testing.T) {
158152
trie, vals := randomTrie(4096)
159-
var entries entrySlice
153+
var entries []*kv
160154
for _, kv := range vals {
161155
entries = append(entries, kv)
162156
}
163-
sort.Sort(entries)
157+
slices.SortFunc(entries, (*kv).cmp)
164158
for i := 0; i < 500; i++ {
165159
start := mrand.Intn(len(entries))
166160
end := mrand.Intn(len(entries)-start) + start + 1
@@ -189,11 +183,11 @@ func TestRangeProof(t *testing.T) {
189183
// The test cases are generated randomly.
190184
func TestRangeProofWithNonExistentProof(t *testing.T) {
191185
trie, vals := randomTrie(4096)
192-
var entries entrySlice
186+
var entries []*kv
193187
for _, kv := range vals {
194188
entries = append(entries, kv)
195189
}
196-
sort.Sort(entries)
190+
slices.SortFunc(entries, (*kv).cmp)
197191
for i := 0; i < 500; i++ {
198192
start := mrand.Intn(len(entries))
199193
end := mrand.Intn(len(entries)-start) + start + 1
@@ -261,11 +255,11 @@ func TestRangeProofWithNonExistentProof(t *testing.T) {
261255
// - There exists a gap between the last element and the right edge proof
262256
func TestRangeProofWithInvalidNonExistentProof(t *testing.T) {
263257
trie, vals := randomTrie(4096)
264-
var entries entrySlice
258+
var entries []*kv
265259
for _, kv := range vals {
266260
entries = append(entries, kv)
267261
}
268-
sort.Sort(entries)
262+
slices.SortFunc(entries, (*kv).cmp)
269263

270264
// Case 1
271265
start, end := 100, 200
@@ -318,11 +312,11 @@ func TestRangeProofWithInvalidNonExistentProof(t *testing.T) {
318312
// non-existent one.
319313
func TestOneElementRangeProof(t *testing.T) {
320314
trie, vals := randomTrie(4096)
321-
var entries entrySlice
315+
var entries []*kv
322316
for _, kv := range vals {
323317
entries = append(entries, kv)
324318
}
325-
sort.Sort(entries)
319+
slices.SortFunc(entries, (*kv).cmp)
326320

327321
// One element with existent edge proof, both edge proofs
328322
// point to the SAME key.
@@ -405,11 +399,11 @@ func TestOneElementRangeProof(t *testing.T) {
405399
// The edge proofs can be nil.
406400
func TestAllElementsProof(t *testing.T) {
407401
trie, vals := randomTrie(4096)
408-
var entries entrySlice
402+
var entries []*kv
409403
for _, kv := range vals {
410404
entries = append(entries, kv)
411405
}
412-
sort.Sort(entries)
406+
slices.SortFunc(entries, (*kv).cmp)
413407

414408
var k [][]byte
415409
var v [][]byte
@@ -455,13 +449,13 @@ func TestAllElementsProof(t *testing.T) {
455449
func TestSingleSideRangeProof(t *testing.T) {
456450
for i := 0; i < 64; i++ {
457451
trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase()))
458-
var entries entrySlice
452+
var entries []*kv
459453
for i := 0; i < 4096; i++ {
460454
value := &kv{randBytes(32), randBytes(20), false}
461455
trie.Update(value.k, value.v)
462456
entries = append(entries, value)
463457
}
464-
sort.Sort(entries)
458+
slices.SortFunc(entries, (*kv).cmp)
465459

466460
var cases = []int{0, 1, 50, 100, 1000, 2000, len(entries) - 1}
467461
for _, pos := range cases {
@@ -490,13 +484,13 @@ func TestSingleSideRangeProof(t *testing.T) {
490484
func TestReverseSingleSideRangeProof(t *testing.T) {
491485
for i := 0; i < 64; i++ {
492486
trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase()))
493-
var entries entrySlice
487+
var entries []*kv
494488
for i := 0; i < 4096; i++ {
495489
value := &kv{randBytes(32), randBytes(20), false}
496490
trie.Update(value.k, value.v)
497491
entries = append(entries, value)
498492
}
499-
sort.Sort(entries)
493+
slices.SortFunc(entries, (*kv).cmp)
500494

501495
var cases = []int{0, 1, 50, 100, 1000, 2000, len(entries) - 1}
502496
for _, pos := range cases {
@@ -526,11 +520,11 @@ func TestReverseSingleSideRangeProof(t *testing.T) {
526520
// The prover is expected to detect the error.
527521
func TestBadRangeProof(t *testing.T) {
528522
trie, vals := randomTrie(4096)
529-
var entries entrySlice
523+
var entries []*kv
530524
for _, kv := range vals {
531525
entries = append(entries, kv)
532526
}
533-
sort.Sort(entries)
527+
slices.SortFunc(entries, (*kv).cmp)
534528

535529
for i := 0; i < 500; i++ {
536530
start := mrand.Intn(len(entries))
@@ -629,11 +623,11 @@ func TestGappedRangeProof(t *testing.T) {
629623
// TestSameSideProofs tests the element is not in the range covered by proofs
630624
func TestSameSideProofs(t *testing.T) {
631625
trie, vals := randomTrie(4096)
632-
var entries entrySlice
626+
var entries []*kv
633627
for _, kv := range vals {
634628
entries = append(entries, kv)
635629
}
636-
sort.Sort(entries)
630+
slices.SortFunc(entries, (*kv).cmp)
637631

638632
pos := 1000
639633
first := decreaseKey(common.CopyBytes(entries[pos].k))
@@ -671,13 +665,13 @@ func TestSameSideProofs(t *testing.T) {
671665

672666
func TestHasRightElement(t *testing.T) {
673667
trie := NewEmpty(NewDatabase(rawdb.NewMemoryDatabase()))
674-
var entries entrySlice
668+
var entries []*kv
675669
for i := 0; i < 4096; i++ {
676670
value := &kv{randBytes(32), randBytes(20), false}
677671
trie.Update(value.k, value.v)
678672
entries = append(entries, value)
679673
}
680-
sort.Sort(entries)
674+
slices.SortFunc(entries, (*kv).cmp)
681675

682676
var cases = []struct {
683677
start int
@@ -745,11 +739,11 @@ func TestHasRightElement(t *testing.T) {
745739
// The first edge proof must be a non-existent proof.
746740
func TestEmptyRangeProof(t *testing.T) {
747741
trie, vals := randomTrie(4096)
748-
var entries entrySlice
742+
var entries []*kv
749743
for _, kv := range vals {
750744
entries = append(entries, kv)
751745
}
752-
sort.Sort(entries)
746+
slices.SortFunc(entries, (*kv).cmp)
753747

754748
var cases = []struct {
755749
pos int
@@ -780,11 +774,11 @@ func TestEmptyRangeProof(t *testing.T) {
780774
func TestBloatedProof(t *testing.T) {
781775
// Use a small trie
782776
trie, kvs := nonRandomTrie(100)
783-
var entries entrySlice
777+
var entries []*kv
784778
for _, kv := range kvs {
785779
entries = append(entries, kv)
786780
}
787-
sort.Sort(entries)
781+
slices.SortFunc(entries, (*kv).cmp)
788782
var keys [][]byte
789783
var vals [][]byte
790784

@@ -814,11 +808,11 @@ func TestBloatedProof(t *testing.T) {
814808
// noop technically, but practically should be rejected.
815809
func TestEmptyValueRangeProof(t *testing.T) {
816810
trie, values := randomTrie(512)
817-
var entries entrySlice
811+
var entries []*kv
818812
for _, kv := range values {
819813
entries = append(entries, kv)
820814
}
821-
sort.Sort(entries)
815+
slices.SortFunc(entries, (*kv).cmp)
822816

823817
// Create a new entry with a slightly modified key
824818
mid := len(entries) / 2
@@ -858,11 +852,11 @@ func TestEmptyValueRangeProof(t *testing.T) {
858852
// practically should be rejected.
859853
func TestAllElementsEmptyValueRangeProof(t *testing.T) {
860854
trie, values := randomTrie(512)
861-
var entries entrySlice
855+
var entries []*kv
862856
for _, kv := range values {
863857
entries = append(entries, kv)
864858
}
865-
sort.Sort(entries)
859+
slices.SortFunc(entries, (*kv).cmp)
866860

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

965959
func benchmarkVerifyRangeProof(b *testing.B, size int) {
966960
trie, vals := randomTrie(8192)
967-
var entries entrySlice
961+
var entries []*kv
968962
for _, kv := range vals {
969963
entries = append(entries, kv)
970964
}
971-
sort.Sort(entries)
965+
slices.SortFunc(entries, (*kv).cmp)
972966

973967
start := 2
974968
end := start + size
@@ -1001,11 +995,11 @@ func BenchmarkVerifyRangeNoProof1000(b *testing.B) { benchmarkVerifyRangeNoProof
1001995

1002996
func benchmarkVerifyRangeNoProof(b *testing.B, size int) {
1003997
trie, vals := randomTrie(size)
1004-
var entries entrySlice
998+
var entries []*kv
1005999
for _, kv := range vals {
10061000
entries = append(entries, kv)
10071001
}
1008-
sort.Sort(entries)
1002+
slices.SortFunc(entries, (*kv).cmp)
10091003

10101004
var keys [][]byte
10111005
var values [][]byte

0 commit comments

Comments
 (0)