@@ -22,13 +22,13 @@ import (
2222"encoding/binary"
2323"fmt"
2424mrand "math/rand"
25- "sort"
2625"testing"
2726
2827"github.com/ethereum/go-ethereum/common"
2928"github.com/ethereum/go-ethereum/core/rawdb"
3029"github.com/ethereum/go-ethereum/crypto"
3130"github.com/ethereum/go-ethereum/ethdb/memorydb"
31+ "golang.org/x/exp/slices"
3232)
3333
3434// Prng is a pseudo random number generator seeded by strong randomness.
@@ -165,21 +165,15 @@ func TestMissingKeyProof(t *testing.T) {
165165}
166166}
167167
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-
174168// TestRangeProof tests normal range proof with both edge proofs
175169// as the existent proof. The test cases are generated randomly.
176170func TestRangeProof (t * testing.T ) {
177171trie , vals := randomTrie (4096 )
178- var entries entrySlice
172+ var entries [] * kv
179173for _ , kv := range vals {
180174entries = append (entries , kv )
181175}
182- sort . Sort (entries )
176+ slices . SortFunc (entries , ( * kv ). less )
183177for i := 0 ; i < 500 ; i ++ {
184178start := mrand .Intn (len (entries ))
185179end := mrand .Intn (len (entries )- start ) + start + 1
@@ -208,11 +202,11 @@ func TestRangeProof(t *testing.T) {
208202// The test cases are generated randomly.
209203func TestRangeProofWithNonExistentProof (t * testing.T ) {
210204trie , vals := randomTrie (4096 )
211- var entries entrySlice
205+ var entries [] * kv
212206for _ , kv := range vals {
213207entries = append (entries , kv )
214208}
215- sort . Sort (entries )
209+ slices . SortFunc (entries , ( * kv ). less )
216210for i := 0 ; i < 500 ; i ++ {
217211start := mrand .Intn (len (entries ))
218212end := mrand .Intn (len (entries )- start ) + start + 1
@@ -280,11 +274,11 @@ func TestRangeProofWithNonExistentProof(t *testing.T) {
280274// - There exists a gap between the last element and the right edge proof
281275func TestRangeProofWithInvalidNonExistentProof (t * testing.T ) {
282276trie , vals := randomTrie (4096 )
283- var entries entrySlice
277+ var entries [] * kv
284278for _ , kv := range vals {
285279entries = append (entries , kv )
286280}
287- sort . Sort (entries )
281+ slices . SortFunc (entries , ( * kv ). less )
288282
289283// Case 1
290284start , end := 100 , 200
@@ -337,11 +331,11 @@ func TestRangeProofWithInvalidNonExistentProof(t *testing.T) {
337331// non-existent one.
338332func TestOneElementRangeProof (t * testing.T ) {
339333trie , vals := randomTrie (4096 )
340- var entries entrySlice
334+ var entries [] * kv
341335for _ , kv := range vals {
342336entries = append (entries , kv )
343337}
344- sort . Sort (entries )
338+ slices . SortFunc (entries , ( * kv ). less )
345339
346340// One element with existent edge proof, both edge proofs
347341// point to the SAME key.
@@ -424,11 +418,11 @@ func TestOneElementRangeProof(t *testing.T) {
424418// The edge proofs can be nil.
425419func TestAllElementsProof (t * testing.T ) {
426420trie , vals := randomTrie (4096 )
427- var entries entrySlice
421+ var entries [] * kv
428422for _ , kv := range vals {
429423entries = append (entries , kv )
430424}
431- sort . Sort (entries )
425+ slices . SortFunc (entries , ( * kv ). less )
432426
433427var k [][]byte
434428var v [][]byte
@@ -474,13 +468,13 @@ func TestAllElementsProof(t *testing.T) {
474468func TestSingleSideRangeProof (t * testing.T ) {
475469for i := 0 ; i < 64 ; i ++ {
476470trie := NewEmpty (NewDatabase (rawdb .NewMemoryDatabase ()))
477- var entries entrySlice
471+ var entries [] * kv
478472for i := 0 ; i < 4096 ; i ++ {
479473value := & kv {randBytes (32 ), randBytes (20 ), false }
480474trie .MustUpdate (value .k , value .v )
481475entries = append (entries , value )
482476}
483- sort . Sort (entries )
477+ slices . SortFunc (entries , ( * kv ). less )
484478
485479var cases = []int {0 , 1 , 50 , 100 , 1000 , 2000 , len (entries ) - 1 }
486480for _ , pos := range cases {
@@ -509,13 +503,13 @@ func TestSingleSideRangeProof(t *testing.T) {
509503func TestReverseSingleSideRangeProof (t * testing.T ) {
510504for i := 0 ; i < 64 ; i ++ {
511505trie := NewEmpty (NewDatabase (rawdb .NewMemoryDatabase ()))
512- var entries entrySlice
506+ var entries [] * kv
513507for i := 0 ; i < 4096 ; i ++ {
514508value := & kv {randBytes (32 ), randBytes (20 ), false }
515509trie .MustUpdate (value .k , value .v )
516510entries = append (entries , value )
517511}
518- sort . Sort (entries )
512+ slices . SortFunc (entries , ( * kv ). less )
519513
520514var cases = []int {0 , 1 , 50 , 100 , 1000 , 2000 , len (entries ) - 1 }
521515for _ , pos := range cases {
@@ -545,11 +539,11 @@ func TestReverseSingleSideRangeProof(t *testing.T) {
545539// The prover is expected to detect the error.
546540func TestBadRangeProof (t * testing.T ) {
547541trie , vals := randomTrie (4096 )
548- var entries entrySlice
542+ var entries [] * kv
549543for _ , kv := range vals {
550544entries = append (entries , kv )
551545}
552- sort . Sort (entries )
546+ slices . SortFunc (entries , ( * kv ). less )
553547
554548for i := 0 ; i < 500 ; i ++ {
555549start := mrand .Intn (len (entries ))
@@ -648,11 +642,11 @@ func TestGappedRangeProof(t *testing.T) {
648642// TestSameSideProofs tests the element is not in the range covered by proofs
649643func TestSameSideProofs (t * testing.T ) {
650644trie , vals := randomTrie (4096 )
651- var entries entrySlice
645+ var entries [] * kv
652646for _ , kv := range vals {
653647entries = append (entries , kv )
654648}
655- sort . Sort (entries )
649+ slices . SortFunc (entries , ( * kv ). less )
656650
657651pos := 1000
658652first := decreaseKey (common .CopyBytes (entries [pos ].k ))
@@ -690,13 +684,13 @@ func TestSameSideProofs(t *testing.T) {
690684
691685func TestHasRightElement (t * testing.T ) {
692686trie := NewEmpty (NewDatabase (rawdb .NewMemoryDatabase ()))
693- var entries entrySlice
687+ var entries [] * kv
694688for i := 0 ; i < 4096 ; i ++ {
695689value := & kv {randBytes (32 ), randBytes (20 ), false }
696690trie .MustUpdate (value .k , value .v )
697691entries = append (entries , value )
698692}
699- sort . Sort (entries )
693+ slices . SortFunc (entries , ( * kv ). less )
700694
701695var cases = []struct {
702696start int
@@ -764,11 +758,11 @@ func TestHasRightElement(t *testing.T) {
764758// The first edge proof must be a non-existent proof.
765759func TestEmptyRangeProof (t * testing.T ) {
766760trie , vals := randomTrie (4096 )
767- var entries entrySlice
761+ var entries [] * kv
768762for _ , kv := range vals {
769763entries = append (entries , kv )
770764}
771- sort . Sort (entries )
765+ slices . SortFunc (entries , ( * kv ). less )
772766
773767var cases = []struct {
774768pos int
@@ -799,11 +793,11 @@ func TestEmptyRangeProof(t *testing.T) {
799793func TestBloatedProof (t * testing.T ) {
800794// Use a small trie
801795trie , kvs := nonRandomTrie (100 )
802- var entries entrySlice
796+ var entries [] * kv
803797for _ , kv := range kvs {
804798entries = append (entries , kv )
805799}
806- sort . Sort (entries )
800+ slices . SortFunc (entries , ( * kv ). less )
807801var keys [][]byte
808802var vals [][]byte
809803
@@ -833,11 +827,11 @@ func TestBloatedProof(t *testing.T) {
833827// noop technically, but practically should be rejected.
834828func TestEmptyValueRangeProof (t * testing.T ) {
835829trie , values := randomTrie (512 )
836- var entries entrySlice
830+ var entries [] * kv
837831for _ , kv := range values {
838832entries = append (entries , kv )
839833}
840- sort . Sort (entries )
834+ slices . SortFunc (entries , ( * kv ). less )
841835
842836// Create a new entry with a slightly modified key
843837mid := len (entries ) / 2
@@ -877,11 +871,11 @@ func TestEmptyValueRangeProof(t *testing.T) {
877871// practically should be rejected.
878872func TestAllElementsEmptyValueRangeProof (t * testing.T ) {
879873trie , values := randomTrie (512 )
880- var entries entrySlice
874+ var entries [] * kv
881875for _ , kv := range values {
882876entries = append (entries , kv )
883877}
884- sort . Sort (entries )
878+ slices . SortFunc (entries , ( * kv ). less )
885879
886880// Create a new entry with a slightly modified key
887881mid := len (entries ) / 2
@@ -983,11 +977,11 @@ func BenchmarkVerifyRangeProof5000(b *testing.B) { benchmarkVerifyRangeProof(b,
983977
984978func benchmarkVerifyRangeProof (b * testing.B , size int ) {
985979trie , vals := randomTrie (8192 )
986- var entries entrySlice
980+ var entries [] * kv
987981for _ , kv := range vals {
988982entries = append (entries , kv )
989983}
990- sort . Sort (entries )
984+ slices . SortFunc (entries , ( * kv ). less )
991985
992986start := 2
993987end := start + size
@@ -1020,11 +1014,11 @@ func BenchmarkVerifyRangeNoProof1000(b *testing.B) { benchmarkVerifyRangeNoProof
10201014
10211015func benchmarkVerifyRangeNoProof (b * testing.B , size int ) {
10221016trie , vals := randomTrie (size )
1023- var entries entrySlice
1017+ var entries [] * kv
10241018for _ , kv := range vals {
10251019entries = append (entries , kv )
10261020}
1027- sort . Sort (entries )
1021+ slices . SortFunc (entries , ( * kv ). less )
10281022
10291023var keys [][]byte
10301024var values [][]byte
0 commit comments