mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-27 17:15:18 +00:00
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
|
// Copyright 2018 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"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/cockroachdb/datadriven"
|
||
|
"github.com/cockroachdb/pebble/internal/base"
|
||
|
)
|
||
|
|
||
|
func TestSeek(t *testing.T) {
|
||
|
cmp := base.DefaultComparer.Compare
|
||
|
fmtKey := base.DefaultComparer.FormatKey
|
||
|
var iter FragmentIterator
|
||
|
var buf bytes.Buffer
|
||
|
|
||
|
datadriven.RunTest(t, "testdata/seek", func(t *testing.T, d *datadriven.TestData) string {
|
||
|
buf.Reset()
|
||
|
switch d.Cmd {
|
||
|
case "build":
|
||
|
spans := buildSpans(t, cmp, fmtKey, d.Input, base.InternalKeyKindRangeDelete)
|
||
|
for _, s := range spans {
|
||
|
fmt.Fprintln(&buf, s)
|
||
|
}
|
||
|
iter = NewIter(cmp, spans)
|
||
|
return buf.String()
|
||
|
case "seek-ge", "seek-le":
|
||
|
seek := SeekLE
|
||
|
if d.Cmd == "seek-ge" {
|
||
|
seek = func(_ base.Compare, iter FragmentIterator, key []byte) *Span {
|
||
|
return iter.SeekGE(key)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for _, line := range strings.Split(d.Input, "\n") {
|
||
|
parts := strings.Fields(line)
|
||
|
if len(parts) != 2 {
|
||
|
return fmt.Sprintf("malformed input: %s", line)
|
||
|
}
|
||
|
seq, err := strconv.ParseUint(parts[1], 10, 64)
|
||
|
if err != nil {
|
||
|
return err.Error()
|
||
|
}
|
||
|
span := seek(cmp, iter, []byte(parts[0]))
|
||
|
if span != nil {
|
||
|
visible := span.Visible(seq)
|
||
|
span = &visible
|
||
|
}
|
||
|
fmt.Fprintln(&buf, span)
|
||
|
}
|
||
|
return buf.String()
|
||
|
default:
|
||
|
return fmt.Sprintf("unknown command: %s", d.Cmd)
|
||
|
}
|
||
|
})
|
||
|
}
|