@@ -22,13 +22,13 @@ import (
22
22
"encoding/binary"
23
23
"fmt"
24
24
mrand "math/rand"
25
- "sort"
26
25
"testing"
27
26
28
27
"github.com/ethereum/go-ethereum/common"
29
28
"github.com/ethereum/go-ethereum/core/rawdb"
30
29
"github.com/ethereum/go-ethereum/crypto"
31
30
"github.com/ethereum/go-ethereum/ethdb/memorydb"
31
+ "golang.org/x/exp/slices"
32
32
)
33
33
34
34
// Prng is a pseudo random number generator seeded by strong randomness.
@@ -165,21 +165,15 @@ func TestMissingKeyProof(t *testing.T) {
165
165
}
166
166
}
167
167
168
- type entrySlice []* kv
169
-
170
- func (p entrySlice ) Len () int { return len (p ) }
171
- func (p entrySlice ) Less (i , j int ) bool { return bytes .Compare (p [i ].k , p [j ].k ) < 0 }
172
- func (p entrySlice ) Swap (i , j int ) { p [i ], p [j ] = p [j ], p [i ] }
173
-
174
168
// TestRangeProof tests normal range proof with both edge proofs
175
169
// as the existent proof. The test cases are generated randomly.
176
170
func TestRangeProof (t * testing.T ) {
177
171
trie , vals := randomTrie (4096 )
178
- var entries entrySlice
172
+ var entries [] * kv
179
173
for _ , kv := range vals {
180
174
entries = append (entries , kv )
181
175
}
182
- sort . Sort (entries )
176
+ slices . SortFunc (entries , ( * kv ). less )
183
177
for i := 0 ; i < 500 ; i ++ {
184
178
start := mrand .Intn (len (entries ))
185
179
end := mrand .Intn (len (entries )- start ) + start + 1
@@ -208,11 +202,11 @@ func TestRangeProof(t *testing.T) {
208
202
// The test cases are generated randomly.
209
203
func TestRangeProofWithNonExistentProof (t * testing.T ) {
210
204
trie , vals := randomTrie (4096 )
211
- var entries entrySlice
205
+ var entries [] * kv
212
206
for _ , kv := range vals {
213
207
entries = append (entries , kv )
214
208
}
215
- sort . Sort (entries )
209
+ slices . SortFunc (entries , ( * kv ). less )
216
210
for i := 0 ; i < 500 ; i ++ {
217
211
start := mrand .Intn (len (entries ))
218
212
end := mrand .Intn (len (entries )- start ) + start + 1
@@ -280,11 +274,11 @@ func TestRangeProofWithNonExistentProof(t *testing.T) {
280
274
// - There exists a gap between the last element and the right edge proof
281
275
func TestRangeProofWithInvalidNonExistentProof (t * testing.T ) {
282
276
trie , vals := randomTrie (4096 )
283
- var entries entrySlice
277
+ var entries [] * kv
284
278
for _ , kv := range vals {
285
279
entries = append (entries , kv )
286
280
}
287
- sort . Sort (entries )
281
+ slices . SortFunc (entries , ( * kv ). less )
288
282
289
283
// Case 1
290
284
start , end := 100 , 200
@@ -337,11 +331,11 @@ func TestRangeProofWithInvalidNonExistentProof(t *testing.T) {
337
331
// non-existent one.
338
332
func TestOneElementRangeProof (t * testing.T ) {
339
333
trie , vals := randomTrie (4096 )
340
- var entries entrySlice
334
+ var entries [] * kv
341
335
for _ , kv := range vals {
342
336
entries = append (entries , kv )
343
337
}
344
- sort . Sort (entries )
338
+ slices . SortFunc (entries , ( * kv ). less )
345
339
346
340
// One element with existent edge proof, both edge proofs
347
341
// point to the SAME key.
@@ -424,11 +418,11 @@ func TestOneElementRangeProof(t *testing.T) {
424
418
// The edge proofs can be nil.
425
419
func TestAllElementsProof (t * testing.T ) {
426
420
trie , vals := randomTrie (4096 )
427
- var entries entrySlice
421
+ var entries [] * kv
428
422
for _ , kv := range vals {
429
423
entries = append (entries , kv )
430
424
}
431
- sort . Sort (entries )
425
+ slices . SortFunc (entries , ( * kv ). less )
432
426
433
427
var k [][]byte
434
428
var v [][]byte
@@ -474,13 +468,13 @@ func TestAllElementsProof(t *testing.T) {
474
468
func TestSingleSideRangeProof (t * testing.T ) {
475
469
for i := 0 ; i < 64 ; i ++ {
476
470
trie := NewEmpty (NewDatabase (rawdb .NewMemoryDatabase ()))
477
- var entries entrySlice
471
+ var entries [] * kv
478
472
for i := 0 ; i < 4096 ; i ++ {
479
473
value := & kv {randBytes (32 ), randBytes (20 ), false }
480
474
trie .MustUpdate (value .k , value .v )
481
475
entries = append (entries , value )
482
476
}
483
- sort . Sort (entries )
477
+ slices . SortFunc (entries , ( * kv ). less )
484
478
485
479
var cases = []int {0 , 1 , 50 , 100 , 1000 , 2000 , len (entries ) - 1 }
486
480
for _ , pos := range cases {
@@ -509,13 +503,13 @@ func TestSingleSideRangeProof(t *testing.T) {
509
503
func TestReverseSingleSideRangeProof (t * testing.T ) {
510
504
for i := 0 ; i < 64 ; i ++ {
511
505
trie := NewEmpty (NewDatabase (rawdb .NewMemoryDatabase ()))
512
- var entries entrySlice
506
+ var entries [] * kv
513
507
for i := 0 ; i < 4096 ; i ++ {
514
508
value := & kv {randBytes (32 ), randBytes (20 ), false }
515
509
trie .MustUpdate (value .k , value .v )
516
510
entries = append (entries , value )
517
511
}
518
- sort . Sort (entries )
512
+ slices . SortFunc (entries , ( * kv ). less )
519
513
520
514
var cases = []int {0 , 1 , 50 , 100 , 1000 , 2000 , len (entries ) - 1 }
521
515
for _ , pos := range cases {
@@ -545,11 +539,11 @@ func TestReverseSingleSideRangeProof(t *testing.T) {
545
539
// The prover is expected to detect the error.
546
540
func TestBadRangeProof (t * testing.T ) {
547
541
trie , vals := randomTrie (4096 )
548
- var entries entrySlice
542
+ var entries [] * kv
549
543
for _ , kv := range vals {
550
544
entries = append (entries , kv )
551
545
}
552
- sort . Sort (entries )
546
+ slices . SortFunc (entries , ( * kv ). less )
553
547
554
548
for i := 0 ; i < 500 ; i ++ {
555
549
start := mrand .Intn (len (entries ))
@@ -648,11 +642,11 @@ func TestGappedRangeProof(t *testing.T) {
648
642
// TestSameSideProofs tests the element is not in the range covered by proofs
649
643
func TestSameSideProofs (t * testing.T ) {
650
644
trie , vals := randomTrie (4096 )
651
- var entries entrySlice
645
+ var entries [] * kv
652
646
for _ , kv := range vals {
653
647
entries = append (entries , kv )
654
648
}
655
- sort . Sort (entries )
649
+ slices . SortFunc (entries , ( * kv ). less )
656
650
657
651
pos := 1000
658
652
first := decreaseKey (common .CopyBytes (entries [pos ].k ))
@@ -690,13 +684,13 @@ func TestSameSideProofs(t *testing.T) {
690
684
691
685
func TestHasRightElement (t * testing.T ) {
692
686
trie := NewEmpty (NewDatabase (rawdb .NewMemoryDatabase ()))
693
- var entries entrySlice
687
+ var entries [] * kv
694
688
for i := 0 ; i < 4096 ; i ++ {
695
689
value := & kv {randBytes (32 ), randBytes (20 ), false }
696
690
trie .MustUpdate (value .k , value .v )
697
691
entries = append (entries , value )
698
692
}
699
- sort . Sort (entries )
693
+ slices . SortFunc (entries , ( * kv ). less )
700
694
701
695
var cases = []struct {
702
696
start int
@@ -764,11 +758,11 @@ func TestHasRightElement(t *testing.T) {
764
758
// The first edge proof must be a non-existent proof.
765
759
func TestEmptyRangeProof (t * testing.T ) {
766
760
trie , vals := randomTrie (4096 )
767
- var entries entrySlice
761
+ var entries [] * kv
768
762
for _ , kv := range vals {
769
763
entries = append (entries , kv )
770
764
}
771
- sort . Sort (entries )
765
+ slices . SortFunc (entries , ( * kv ). less )
772
766
773
767
var cases = []struct {
774
768
pos int
@@ -799,11 +793,11 @@ func TestEmptyRangeProof(t *testing.T) {
799
793
func TestBloatedProof (t * testing.T ) {
800
794
// Use a small trie
801
795
trie , kvs := nonRandomTrie (100 )
802
- var entries entrySlice
796
+ var entries [] * kv
803
797
for _ , kv := range kvs {
804
798
entries = append (entries , kv )
805
799
}
806
- sort . Sort (entries )
800
+ slices . SortFunc (entries , ( * kv ). less )
807
801
var keys [][]byte
808
802
var vals [][]byte
809
803
@@ -833,11 +827,11 @@ func TestBloatedProof(t *testing.T) {
833
827
// noop technically, but practically should be rejected.
834
828
func TestEmptyValueRangeProof (t * testing.T ) {
835
829
trie , values := randomTrie (512 )
836
- var entries entrySlice
830
+ var entries [] * kv
837
831
for _ , kv := range values {
838
832
entries = append (entries , kv )
839
833
}
840
- sort . Sort (entries )
834
+ slices . SortFunc (entries , ( * kv ). less )
841
835
842
836
// Create a new entry with a slightly modified key
843
837
mid := len (entries ) / 2
@@ -877,11 +871,11 @@ func TestEmptyValueRangeProof(t *testing.T) {
877
871
// practically should be rejected.
878
872
func TestAllElementsEmptyValueRangeProof (t * testing.T ) {
879
873
trie , values := randomTrie (512 )
880
- var entries entrySlice
874
+ var entries [] * kv
881
875
for _ , kv := range values {
882
876
entries = append (entries , kv )
883
877
}
884
- sort . Sort (entries )
878
+ slices . SortFunc (entries , ( * kv ). less )
885
879
886
880
// Create a new entry with a slightly modified key
887
881
mid := len (entries ) / 2
@@ -983,11 +977,11 @@ func BenchmarkVerifyRangeProof5000(b *testing.B) { benchmarkVerifyRangeProof(b,
983
977
984
978
func benchmarkVerifyRangeProof (b * testing.B , size int ) {
985
979
trie , vals := randomTrie (8192 )
986
- var entries entrySlice
980
+ var entries [] * kv
987
981
for _ , kv := range vals {
988
982
entries = append (entries , kv )
989
983
}
990
- sort . Sort (entries )
984
+ slices . SortFunc (entries , ( * kv ). less )
991
985
992
986
start := 2
993
987
end := start + size
@@ -1020,11 +1014,11 @@ func BenchmarkVerifyRangeNoProof1000(b *testing.B) { benchmarkVerifyRangeNoProof
1020
1014
1021
1015
func benchmarkVerifyRangeNoProof (b * testing.B , size int ) {
1022
1016
trie , vals := randomTrie (size )
1023
- var entries entrySlice
1017
+ var entries [] * kv
1024
1018
for _ , kv := range vals {
1025
1019
entries = append (entries , kv )
1026
1020
}
1027
- sort . Sort (entries )
1021
+ slices . SortFunc (entries , ( * kv ). less )
1028
1022
1029
1023
var keys [][]byte
1030
1024
var values [][]byte
0 commit comments