mirror of https://github.com/q191201771/lal.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.8 KiB
Go
64 lines
1.8 KiB
Go
// Copyright 2021, Chef. All rights reserved.
|
|
// https://github.com/q191201771/lal
|
|
//
|
|
// Use of this source code is governed by a MIT-style license
|
|
// that can be found in the License file.
|
|
//
|
|
// Author: Chef (191201771@qq.com)
|
|
|
|
package base
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/q191201771/naza/pkg/assert"
|
|
)
|
|
|
|
func TestBufWriter(t *testing.T) {
|
|
var buf bytes.Buffer
|
|
w := NewWriterFuncSize(func(p []byte) {
|
|
_, _ = buf.Write(p)
|
|
}, 4096)
|
|
wb, _ := w.(*bufWriter)
|
|
|
|
w.Write(bytes.Repeat([]byte{0x1}, 5000))
|
|
assert.Equal(t, 4096-0, wb.available())
|
|
assert.Equal(t, bytes.Repeat([]byte{0x1}, 5000), buf.Bytes())
|
|
buf.Reset()
|
|
|
|
w.Write(bytes.Repeat([]byte{0x2}, 1024))
|
|
assert.Equal(t, 4096-1024, wb.available())
|
|
assert.Equal(t, 0, buf.Len())
|
|
w.Write(bytes.Repeat([]byte{0x3}, 1024))
|
|
assert.Equal(t, 4096-2048, wb.available())
|
|
assert.Equal(t, 0, buf.Len())
|
|
|
|
w.Write(bytes.Repeat([]byte{0x4}, 4096))
|
|
assert.Equal(t, 4096-2048, wb.available())
|
|
assert.Equal(t, 4096, buf.Len())
|
|
assert.Equal(t, bytes.Repeat([]byte{0x2}, 1024), buf.Bytes()[:1024])
|
|
assert.Equal(t, bytes.Repeat([]byte{0x3}, 1024), buf.Bytes()[1024:2048])
|
|
assert.Equal(t, bytes.Repeat([]byte{0x4}, 2048), buf.Bytes()[2048:])
|
|
buf.Reset()
|
|
|
|
w.Write(bytes.Repeat([]byte{0x5}, 8192))
|
|
assert.Equal(t, 4096-0, wb.available())
|
|
assert.Equal(t, 2048+8192, buf.Len())
|
|
assert.Equal(t, bytes.Repeat([]byte{0x4}, 2048), buf.Bytes()[:2048])
|
|
assert.Equal(t, bytes.Repeat([]byte{0x5}, 8192), buf.Bytes()[2048:])
|
|
buf.Reset()
|
|
|
|
w.Flush()
|
|
assert.Equal(t, 4096-0, wb.available())
|
|
assert.Equal(t, 0, buf.Len())
|
|
|
|
w.Write(bytes.Repeat([]byte{0x6}, 1024))
|
|
assert.Equal(t, 4096-1024, wb.available())
|
|
assert.Equal(t, 0, buf.Len())
|
|
w.Flush()
|
|
assert.Equal(t, 4096-0, wb.available())
|
|
assert.Equal(t, 1024, buf.Len())
|
|
assert.Equal(t, bytes.Repeat([]byte{0x6}, 1024), buf.Bytes()[:1024])
|
|
}
|