github.com/eris-ltd/erisdb@v0.25.0/storage/util_test.go (about) 1 package storage 2 3 import ( 4 "sort" 5 "strings" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func sendKVPair(ch chan<- KVPair, kvs []KVPair) { 12 for _, kv := range kvs { 13 ch <- kv 14 } 15 close(ch) 16 } 17 18 func collectIterator(it KVIterator) KVPairs { 19 var kvp []KVPair 20 for it.Valid() { 21 kvp = append(kvp, KVPair{it.Key(), it.Value()}) 22 it.Next() 23 } 24 return kvp 25 } 26 27 func kvPairs(kvs ...string) KVPairs { 28 n := len(kvs) / 2 29 kvp := make([]KVPair, 0, n) 30 for i := 0; i < 2*n; i += 2 { 31 kvp = append(kvp, KVPair{[]byte(kvs[i]), []byte(kvs[i+1])}) 32 } 33 return kvp 34 } 35 36 func assertIteratorSorted(t *testing.T, it KVIterator, reverse bool) { 37 prev := "" 38 for it.Valid() { 39 strKey := string(it.Key()) 40 t.Log(strKey, "=>", string(it.Value())) 41 if prev == "" { 42 prev = strKey 43 } 44 // Assert non-decreasing sequence of keys 45 if reverse { 46 assert.False(t, strings.Compare(prev, strKey) == -1) 47 } else { 48 assert.False(t, strings.Compare(prev, strKey) == 1) 49 } 50 prev = strKey 51 it.Next() 52 } 53 } 54 55 func iteratorOver(kvp []KVPair, reverse ...bool) *ChannelIterator { 56 var sortable sort.Interface = KVPairs(kvp) 57 if len(reverse) > 0 && reverse[0] { 58 sortable = sort.Reverse(sortable) 59 } 60 sort.Stable(sortable) 61 ch := make(chan KVPair) 62 var start, end []byte 63 if len(kvp) > 0 { 64 start, end = kvp[0].Key, kvp[len(kvp)-1].Key 65 } 66 go sendKVPair(ch, kvp) 67 ci := NewChannelIterator(ch, start, end) 68 return ci 69 } 70 71 func bz(s string) []byte { 72 return []byte(s) 73 }