@@ -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.
157152func 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.
190185func 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
262257func 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.
319314func 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.
406401func 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) {
455450func 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) {
490485func 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.
527522func 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
630625func 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
672667func 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.
746741func 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) {
780775func 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.
815810func 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.
859854func 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
965960func 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
1002997func 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