Test net.Buffers{}
Этот коммит содержится в:
родитель
539495ef45
коммит
cfe6b9765f
1 изменённых файлов: 132 добавлений и 0 удалений
132
src/net/writev_test.go
Обычный файл
132
src/net/writev_test.go
Обычный файл
|
@ -0,0 +1,132 @@
|
|||
// The following is copied from Go 1.17 official implementation and
|
||||
// modified to accommodate TinyGo.
|
||||
|
||||
// Copyright 2016 The Go 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 net
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestBuffers_read(t *testing.T) {
|
||||
const story = "once upon a time in Gopherland ... "
|
||||
buffers := Buffers{
|
||||
[]byte("once "),
|
||||
[]byte("upon "),
|
||||
[]byte("a "),
|
||||
[]byte("time "),
|
||||
[]byte("in "),
|
||||
[]byte("Gopherland ... "),
|
||||
}
|
||||
got, err := io.ReadAll(&buffers)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if string(got) != story {
|
||||
t.Errorf("read %q; want %q", got, story)
|
||||
}
|
||||
if len(buffers) != 0 {
|
||||
t.Errorf("len(buffers) = %d; want 0", len(buffers))
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuffers_consume(t *testing.T) {
|
||||
tests := []struct {
|
||||
in Buffers
|
||||
consume int64
|
||||
want Buffers
|
||||
}{
|
||||
{
|
||||
in: Buffers{[]byte("foo"), []byte("bar")},
|
||||
consume: 0,
|
||||
want: Buffers{[]byte("foo"), []byte("bar")},
|
||||
},
|
||||
{
|
||||
in: Buffers{[]byte("foo"), []byte("bar")},
|
||||
consume: 2,
|
||||
want: Buffers{[]byte("o"), []byte("bar")},
|
||||
},
|
||||
{
|
||||
in: Buffers{[]byte("foo"), []byte("bar")},
|
||||
consume: 3,
|
||||
want: Buffers{[]byte("bar")},
|
||||
},
|
||||
{
|
||||
in: Buffers{[]byte("foo"), []byte("bar")},
|
||||
consume: 4,
|
||||
want: Buffers{[]byte("ar")},
|
||||
},
|
||||
{
|
||||
in: Buffers{nil, nil, nil, []byte("bar")},
|
||||
consume: 1,
|
||||
want: Buffers{[]byte("ar")},
|
||||
},
|
||||
{
|
||||
in: Buffers{nil, nil, nil, []byte("foo")},
|
||||
consume: 0,
|
||||
want: Buffers{[]byte("foo")},
|
||||
},
|
||||
{
|
||||
in: Buffers{nil, nil, nil},
|
||||
consume: 0,
|
||||
want: Buffers{},
|
||||
},
|
||||
}
|
||||
for i, tt := range tests {
|
||||
in := tt.in
|
||||
in.consume(tt.consume)
|
||||
if !reflect.DeepEqual(in, tt.want) {
|
||||
t.Errorf("%d. after consume(%d) = %+v, want %+v", i, tt.consume, in, tt.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuffers_WriteTo(t *testing.T) {
|
||||
for _, name := range []string{"WriteTo", "Copy"} {
|
||||
for _, size := range []int{0, 10, 1023, 1024, 1025} {
|
||||
t.Run(fmt.Sprintf("%s/%d", name, size), func(t *testing.T) {
|
||||
testBuffer_writeTo(t, size, name == "Copy")
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testBuffer_writeTo(t *testing.T, chunks int, useCopy bool) {
|
||||
var want bytes.Buffer
|
||||
for i := 0; i < chunks; i++ {
|
||||
want.WriteByte(byte(i))
|
||||
}
|
||||
|
||||
var b bytes.Buffer
|
||||
buffers := make(Buffers, chunks)
|
||||
for i := range buffers {
|
||||
buffers[i] = want.Bytes()[i : i+1]
|
||||
}
|
||||
var n int64
|
||||
var err error
|
||||
if useCopy {
|
||||
n, err = io.Copy(&b, &buffers)
|
||||
} else {
|
||||
n, err = buffers.WriteTo(&b)
|
||||
}
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(buffers) != 0 {
|
||||
t.Fatal(fmt.Errorf("len(buffers) = %d; want 0", len(buffers)))
|
||||
}
|
||||
if n != int64(want.Len()) {
|
||||
t.Fatal(fmt.Errorf("Buffers.WriteTo returned %d; want %d", n, want.Len()))
|
||||
}
|
||||
all, err := io.ReadAll(&b)
|
||||
if !bytes.Equal(all, want.Bytes()) || err != nil {
|
||||
t.Fatal(fmt.Errorf("read %q, %v; want %q, nil", all, err, want.Bytes()))
|
||||
}
|
||||
}
|
Загрузка…
Создание таблицы
Сослаться в новой задаче