stario/que_benchmark_test.go
starainrt c8facb5a03
stario: 提升 Go 1.20 基线与交互/队列稳定性
- 提升 go.mod 基线到 Go 1.20,并补齐对应测试
  - 修正 Passwd / PasswdResponseSignal 语义,Ctrl+C 默认退出当前流程
  - 优化 raw terminal redraw、Restore 与 StopUntil 的边界行为
  - 新增 StarPipe、FrameReader/FrameWriter、ReadFullContext/WriteFullContext/CopyContext、IsTerminal/ReadPasswordContext
  - 收口 StarQueue / StarBuffer 语义,删除 EndWrite,统一 Close / Abort 行为
  - 补齐 signal、timeout、queue、terminal、pipe、buffer 的回归测试与 race 覆盖
2026-04-15 14:35:19 +08:00

81 lines
1.8 KiB
Go

package stario
import (
"io"
"testing"
)
func BenchmarkQueueBuildMessage64KiB(b *testing.B) {
que := NewQueue()
payload := make([]byte, 64*1024)
b.ReportAllocs()
b.SetBytes(int64(len(payload)))
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = que.BuildMessage(payload)
}
}
func BenchmarkQueueWriteFrame64KiB(b *testing.B) {
que := NewQueue()
payload := make([]byte, 64*1024)
b.ReportAllocs()
b.SetBytes(int64(len(payload)))
b.ResetTimer()
for i := 0; i < b.N; i++ {
if err := que.WriteFrame(io.Discard, payload); err != nil {
b.Fatalf("WriteFrame failed: %v", err)
}
}
}
func BenchmarkQueueWriteFrameBuffers64KiB(b *testing.B) {
que := NewQueue()
payload := make([]byte, 64*1024)
b.ReportAllocs()
b.SetBytes(int64(len(payload)))
b.ResetTimer()
for i := 0; i < b.N; i++ {
if err := que.WriteFrameBuffers(io.Discard, payload); err != nil {
b.Fatalf("WriteFrameBuffers failed: %v", err)
}
}
}
func BenchmarkQueueWriteFramesBuffers4x64KiB(b *testing.B) {
que := NewQueue()
payloads := [][]byte{
make([]byte, 64*1024),
make([]byte, 64*1024),
make([]byte, 64*1024),
make([]byte, 64*1024),
}
b.ReportAllocs()
b.SetBytes(int64(len(payloads) * len(payloads[0])))
b.ResetTimer()
for i := 0; i < b.N; i++ {
if err := que.WriteFramesBuffers(io.Discard, payloads...); err != nil {
b.Fatalf("WriteFramesBuffers failed: %v", err)
}
}
}
func BenchmarkQueueParseRestoreHello(b *testing.B) {
que := NewQueueWithCount(1)
frame := que.BuildMessage([]byte("hello"))
if len(frame) == 0 {
b.Fatal("BuildMessage returned empty frame")
}
b.ReportAllocs()
b.SetBytes(int64(len(frame)))
b.ResetTimer()
for i := 0; i < b.N; i++ {
if err := que.ParseMessage(frame, "bench"); err != nil {
b.Fatal(err)
}
if _, err := que.Restore(); err != nil {
b.Fatal(err)
}
}
}