sbuf: linter fixes
This commit is contained in:
@@ -228,6 +228,8 @@ linters:
|
|||||||
# Such cases aren't reported by default.
|
# Such cases aren't reported by default.
|
||||||
# Default: false
|
# Default: false
|
||||||
check-type-assertions: true
|
check-type-assertions: true
|
||||||
|
exclude-functions:
|
||||||
|
- (*git.wntrmute.dev/kyle/goutils/sbuf.Buffer).Write
|
||||||
|
|
||||||
exhaustive:
|
exhaustive:
|
||||||
# Program elements to check for exhaustiveness.
|
# Program elements to check for exhaustiveness.
|
||||||
|
|||||||
21
sbuf/sbuf.go
21
sbuf/sbuf.go
@@ -15,7 +15,7 @@ func zero(in []byte, n int) {
|
|||||||
stop = len(in)
|
stop = len(in)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < stop; i++ {
|
for i := range stop {
|
||||||
in[i] ^= in[i]
|
in[i] ^= in[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -37,7 +37,10 @@ func NewBuffer(n int) *Buffer {
|
|||||||
// original data will be wiped.
|
// original data will be wiped.
|
||||||
func NewBufferFrom(p []byte) *Buffer {
|
func NewBufferFrom(p []byte) *Buffer {
|
||||||
buf := NewBuffer(len(p))
|
buf := NewBuffer(len(p))
|
||||||
buf.Write(p)
|
_, err := buf.Write(p)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
zero(p, len(p))
|
zero(p, len(p))
|
||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
@@ -54,10 +57,7 @@ func (buf *Buffer) Read(p []byte) (int, error) {
|
|||||||
return 0, io.EOF
|
return 0, io.EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
copyLength := len(p)
|
copyLength := min(len(p), len(buf.buf))
|
||||||
if copyLength > len(buf.buf) {
|
|
||||||
copyLength = len(buf.buf)
|
|
||||||
}
|
|
||||||
|
|
||||||
copy(p, buf.buf)
|
copy(p, buf.buf)
|
||||||
zero(buf.buf, len(p))
|
zero(buf.buf, len(p))
|
||||||
@@ -91,10 +91,7 @@ func (buf *Buffer) Write(p []byte) (int, error) {
|
|||||||
r := len(buf.buf) + len(p)
|
r := len(buf.buf) + len(p)
|
||||||
if cap(buf.buf) < r {
|
if cap(buf.buf) < r {
|
||||||
l := r
|
l := r
|
||||||
for {
|
for l <= r {
|
||||||
if l > r {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
l *= 2
|
l *= 2
|
||||||
}
|
}
|
||||||
buf.grow(l - cap(buf.buf))
|
buf.grow(l - cap(buf.buf))
|
||||||
@@ -107,7 +104,7 @@ func (buf *Buffer) Write(p []byte) (int, error) {
|
|||||||
func (buf *Buffer) WriteByte(c byte) error {
|
func (buf *Buffer) WriteByte(c byte) error {
|
||||||
r := len(buf.buf) + 1
|
r := len(buf.buf) + 1
|
||||||
if cap(buf.buf) < r {
|
if cap(buf.buf) < r {
|
||||||
l := r * 2
|
l := r << 1
|
||||||
buf.grow(l - cap(buf.buf))
|
buf.grow(l - cap(buf.buf))
|
||||||
}
|
}
|
||||||
buf.buf = append(buf.buf, c)
|
buf.buf = append(buf.buf, c)
|
||||||
@@ -138,7 +135,7 @@ func (buf *Buffer) Bytes() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
p := make([]byte, buf.Len())
|
p := make([]byte, buf.Len())
|
||||||
buf.Read(p)
|
_, _ = buf.Read(p)
|
||||||
buf.Close()
|
buf.Close()
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
package sbuf
|
package sbuf_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"git.wntrmute.dev/kyle/goutils/sbuf"
|
||||||
"golang.org/x/crypto/nacl/box"
|
"golang.org/x/crypto/nacl/box"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
buf = &Buffer{}
|
buf = &sbuf.Buffer{}
|
||||||
testMessage1 = []byte("round and round and round we go, where we stop, no one knows")
|
testMessage1 = []byte("round and round and round we go, where we stop, no one knows")
|
||||||
testMessage2 = []byte("the deconstruction of falling stars")
|
testMessage2 = []byte("the deconstruction of falling stars")
|
||||||
)
|
)
|
||||||
@@ -113,23 +114,23 @@ func TestShortRead(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNewBuffer(t *testing.T) {
|
func TestNewBuffer(t *testing.T) {
|
||||||
buf := NewBuffer(32)
|
testBuffer := sbuf.NewBuffer(32)
|
||||||
if len(buf.buf) != 0 {
|
if testBuffer.Len() != 0 {
|
||||||
t.Fatalf("expected new buffer length to be 0, have %d",
|
t.Fatalf("expected new buffer length to be 0, have %d",
|
||||||
len(buf.buf))
|
testBuffer.Len())
|
||||||
}
|
}
|
||||||
|
|
||||||
if cap(buf.buf) != 32 {
|
if testBuffer.Cap() != 32 {
|
||||||
t.Fatalf("expected new buffer capacity to be 0, have %d",
|
t.Fatalf("expected new buffer capacity to be 0, have %d",
|
||||||
cap(buf.buf))
|
testBuffer.Cap())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewBufferFrom(t *testing.T) {
|
func TestNewBufferFrom(t *testing.T) {
|
||||||
p := make([]byte, len(testMessage1))
|
p := make([]byte, len(testMessage1))
|
||||||
copy(p, testMessage1)
|
copy(p, testMessage1)
|
||||||
buf := NewBufferFrom(p)
|
testBuffer := sbuf.NewBufferFrom(p)
|
||||||
if !bytes.Equal(buf.buf, testMessage1) {
|
if !bytes.Equal(testBuffer.Bytes(), testMessage1) {
|
||||||
t.Fatal("new buffer wasn't constructed properly")
|
t.Fatal("new buffer wasn't constructed properly")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -137,10 +138,10 @@ func TestNewBufferFrom(t *testing.T) {
|
|||||||
func TestBytes(t *testing.T) {
|
func TestBytes(t *testing.T) {
|
||||||
p := make([]byte, len(testMessage1))
|
p := make([]byte, len(testMessage1))
|
||||||
copy(p, testMessage1)
|
copy(p, testMessage1)
|
||||||
buf := NewBufferFrom(p)
|
testBuffer := sbuf.NewBufferFrom(p)
|
||||||
|
|
||||||
out := buf.Bytes()
|
out := testBuffer.Bytes()
|
||||||
if buf.buf != nil {
|
if testBuffer.Len() != 0 {
|
||||||
t.Fatal("buffer was not closed")
|
t.Fatal("buffer was not closed")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,21 +149,21 @@ func TestBytes(t *testing.T) {
|
|||||||
t.Fatal("buffer did not return the right data")
|
t.Fatal("buffer did not return the right data")
|
||||||
}
|
}
|
||||||
|
|
||||||
out = buf.Bytes()
|
out = testBuffer.Bytes()
|
||||||
if out != nil {
|
if out != nil {
|
||||||
t.Fatal("a closed buffer should return nil for Bytes")
|
t.Fatal("a closed buffer should return nil for Bytes")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRWByte(t *testing.T) {
|
func TestRWByte(t *testing.T) {
|
||||||
buf := NewBuffer(0)
|
testBuffer := sbuf.NewBuffer(0)
|
||||||
c := byte(42)
|
c := byte(42)
|
||||||
err := buf.WriteByte(c)
|
err := testBuffer.WriteByte(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("%v", err)
|
t.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err = buf.ReadByte()
|
c, err = testBuffer.ReadByte()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("%v", err)
|
t.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
@@ -171,22 +172,21 @@ func TestRWByte(t *testing.T) {
|
|||||||
t.Fatalf("Expected 42, have %d", c)
|
t.Fatalf("Expected 42, have %d", c)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = buf.ReadByte()
|
_, err = testBuffer.ReadByte()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("Expected EOF")
|
t.Fatal("Expected EOF")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkRead(b *testing.B) {
|
func BenchmarkRead(b *testing.B) {
|
||||||
b.N = 2000
|
|
||||||
pub, priv, err := box.GenerateKey(rand.Reader)
|
pub, priv, err := box.GenerateKey(rand.Reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("%v", err)
|
b.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
b.ReportAllocs()
|
b.ReportAllocs()
|
||||||
|
|
||||||
for i := 0; i < b.N; i++ {
|
for b.Loop() {
|
||||||
_, err := buf.Write(priv[:])
|
_, err = buf.Write(priv[:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("%v", err)
|
b.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
@@ -204,11 +204,11 @@ func BenchmarkFixed(b *testing.B) {
|
|||||||
b.Fatalf("%v", err)
|
b.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
buf = NewBuffer(64 * b.N)
|
buf = sbuf.NewBuffer(64 * b.N)
|
||||||
b.ReportAllocs()
|
b.ReportAllocs()
|
||||||
|
|
||||||
for i := 0; i < b.N; i++ {
|
for b.Loop() {
|
||||||
_, err := buf.Write(priv[:])
|
_, err = buf.Write(priv[:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("%v", err)
|
b.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user