mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-14 04:05:17 +00:00
79 lines
1.6 KiB
Go
79 lines
1.6 KiB
Go
// Copyright 2023 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 sstable
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/cockroachdb/datadriven"
|
|
)
|
|
|
|
func writeBufferPool(w io.Writer, bp *BufferPool) {
|
|
for i := 0; i < cap(bp.pool); i++ {
|
|
if i > 0 {
|
|
fmt.Fprint(w, " ")
|
|
}
|
|
if i >= len(bp.pool) {
|
|
fmt.Fprint(w, "[ ]")
|
|
continue
|
|
}
|
|
sz := len(bp.pool[i].v.Buf())
|
|
if bp.pool[i].b == nil {
|
|
fmt.Fprintf(w, "[%4d]", sz)
|
|
} else {
|
|
fmt.Fprintf(w, "<%4d>", sz)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestBufferPool(t *testing.T) {
|
|
var bp BufferPool
|
|
var buf bytes.Buffer
|
|
handles := map[string]Buf{}
|
|
drainPool := func() {
|
|
for h, b := range handles {
|
|
b.Release()
|
|
delete(handles, h)
|
|
}
|
|
bp.Release()
|
|
}
|
|
defer drainPool()
|
|
datadriven.RunTest(t, "testdata/buffer_pool", func(t *testing.T, td *datadriven.TestData) string {
|
|
buf.Reset()
|
|
switch td.Cmd {
|
|
case "init":
|
|
if cap(bp.pool) > 0 {
|
|
drainPool()
|
|
}
|
|
var initialSize int
|
|
td.ScanArgs(t, "size", &initialSize)
|
|
bp.Init(initialSize)
|
|
writeBufferPool(&buf, &bp)
|
|
return buf.String()
|
|
case "alloc":
|
|
var n int
|
|
var handle string
|
|
td.ScanArgs(t, "n", &n)
|
|
td.ScanArgs(t, "handle", &handle)
|
|
handles[handle] = bp.Alloc(n)
|
|
writeBufferPool(&buf, &bp)
|
|
return buf.String()
|
|
case "release":
|
|
var handle string
|
|
td.ScanArgs(t, "handle", &handle)
|
|
b := handles[handle]
|
|
b.Release()
|
|
delete(handles, handle)
|
|
writeBufferPool(&buf, &bp)
|
|
return buf.String()
|
|
default:
|
|
return fmt.Sprintf("unrecognized command %q", td.Cmd)
|
|
}
|
|
})
|
|
}
|