github.com/Tri-stone/burrow@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  }