mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-10 18:25:17 +00:00
70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
// Copyright 2022 The LevelDB-Go and Pebble Authors. All rights reserved. Use
|
|
// of this source code is governed by a BSD-style license that can be found in
|
|
// the LICENSE file.
|
|
|
|
package keyspan
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/cockroachdb/datadriven"
|
|
"github.com/cockroachdb/pebble/internal/testkeys"
|
|
)
|
|
|
|
func TestBoundedIter(t *testing.T) {
|
|
getBounds := func(td *datadriven.TestData) (lower, upper []byte) {
|
|
for _, cmdArg := range td.CmdArgs {
|
|
switch cmdArg.Key {
|
|
case "lower":
|
|
if len(cmdArg.Vals[0]) > 0 {
|
|
lower = []byte(cmdArg.Vals[0])
|
|
}
|
|
case "upper":
|
|
if len(cmdArg.Vals[0]) > 0 {
|
|
upper = []byte(cmdArg.Vals[0])
|
|
}
|
|
}
|
|
}
|
|
return lower, upper
|
|
}
|
|
|
|
cmp := testkeys.Comparer.Compare
|
|
split := testkeys.Comparer.Split
|
|
var buf bytes.Buffer
|
|
var iter BoundedIter
|
|
var hasPrefix bool
|
|
var prefix []byte
|
|
datadriven.RunTest(t, "testdata/bounded_iter", func(t *testing.T, td *datadriven.TestData) string {
|
|
switch td.Cmd {
|
|
case "define":
|
|
var spans []Span
|
|
lines := strings.Split(strings.TrimSpace(td.Input), "\n")
|
|
for _, line := range lines {
|
|
spans = append(spans, ParseSpan(line))
|
|
}
|
|
inner := &invalidatingIter{iter: NewIter(cmp, spans)}
|
|
lower, upper := getBounds(td)
|
|
iter.Init(cmp, split, inner, lower, upper, &hasPrefix, &prefix)
|
|
return ""
|
|
case "set-prefix":
|
|
hasPrefix = len(td.CmdArgs) > 0
|
|
if hasPrefix {
|
|
prefix = []byte(td.CmdArgs[0].String())
|
|
return fmt.Sprintf("set prefix to %q\n", prefix)
|
|
}
|
|
return "cleared prefix"
|
|
case "iter":
|
|
buf.Reset()
|
|
lower, upper := getBounds(td)
|
|
iter.SetBounds(lower, upper)
|
|
runIterCmd(t, td, &iter, &buf)
|
|
return buf.String()
|
|
default:
|
|
return fmt.Sprintf("unrecognized command %q", td.Cmd)
|
|
}
|
|
})
|
|
}
|