Use a new behavior of newFakeLibusb.

Add a benchmark for subslicing.
This commit is contained in:
Sebastian Zagrodzki
2017-04-27 03:26:08 +02:00
parent d85a738414
commit 26b662893d
4 changed files with 35 additions and 23 deletions

View File

@@ -20,9 +20,8 @@ import (
) )
func TestOpenEndpoint(t *testing.T) { func TestOpenEndpoint(t *testing.T) {
origLib := libusb _, done := newFakeLibusb()
defer func() { libusb = origLib }() defer done()
libusb = newFakeLibusb()
c := NewContext() c := NewContext()
defer c.Close() defer c.Close()

View File

@@ -20,7 +20,9 @@ import (
) )
func TestEndpoint(t *testing.T) { func TestEndpoint(t *testing.T) {
defer func(i libusbIntf) { libusb = i }(libusb) lib, done := newFakeLibusb()
defer done()
for _, epData := range []struct { for _, epData := range []struct {
ei EndpointInfo ei EndpointInfo
intf InterfaceSetting intf InterfaceSetting
@@ -83,9 +85,6 @@ func TestEndpoint(t *testing.T) {
wantErr: true, wantErr: true,
}, },
} { } {
lib := newFakeLibusb()
libusb = lib
ep := newEndpoint(nil, epData.intf, epData.ei) ep := newEndpoint(nil, epData.intf, epData.ei)
go func() { go func() {
fakeT := lib.waitForSubmitted() fakeT := lib.waitForSubmitted()
@@ -150,8 +149,8 @@ func TestEndpointInfo(t *testing.T) {
func TestEndpointIn(t *testing.T) { func TestEndpointIn(t *testing.T) {
defer func(i libusbIntf) { libusb = i }(libusb) defer func(i libusbIntf) { libusb = i }(libusb)
lib := newFakeLibusb() lib, done := newFakeLibusb()
libusb = lib defer done()
ctx := NewContext() ctx := NewContext()
defer ctx.Close() defer ctx.Close()
@@ -187,8 +186,8 @@ func TestEndpointIn(t *testing.T) {
func TestEndpointOut(t *testing.T) { func TestEndpointOut(t *testing.T) {
defer func(i libusbIntf) { libusb = i }(libusb) defer func(i libusbIntf) { libusb = i }(libusb)
lib := newFakeLibusb() lib, done := newFakeLibusb()
libusb = lib defer done()
ctx := NewContext() ctx := NewContext()
defer ctx.Close() defer ctx.Close()

View File

@@ -20,8 +20,8 @@ import (
) )
func TestNewTransfer(t *testing.T) { func TestNewTransfer(t *testing.T) {
defer func(i libusbIntf) { libusb = i }(libusb) _, done := newFakeLibusb()
libusb = newFakeLibusb() defer done()
for _, tc := range []struct { for _, tc := range []struct {
desc string desc string
@@ -62,6 +62,7 @@ func TestNewTransfer(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("newUSBTransfer(): %v", err) t.Fatalf("newUSBTransfer(): %v", err)
} }
defer xfer.free()
if got, want := len(xfer.buf), tc.wantLength; got != want { if got, want := len(xfer.buf), tc.wantLength; got != want {
t.Errorf("xfer.buf: got %d bytes, want %d", got, want) t.Errorf("xfer.buf: got %d bytes, want %d", got, want)
} }
@@ -69,10 +70,8 @@ func TestNewTransfer(t *testing.T) {
} }
func TestTransferProtocol(t *testing.T) { func TestTransferProtocol(t *testing.T) {
defer func(i libusbIntf) { libusb = i }(libusb) f, done := newFakeLibusb()
defer done()
f := newFakeLibusb()
libusb = f
xfers := make([]*usbTransfer, 2) xfers := make([]*usbTransfer, 2)
var err error var err error
@@ -140,3 +139,20 @@ func TestTransferProtocol(t *testing.T) {
x.free() x.free()
} }
} }
func BenchmarkSubSlice(b *testing.B) {
x := make([]byte, 512)
start, len := 50, 50
b.Run("start:start+len", func(b *testing.B) {
for i := 0; i < b.N; i++ {
y := x
y = y[start : start+len]
}
})
b.Run("[start:][:len]", func(b *testing.B) {
for i := 0; i < b.N; i++ {
y := x
y = y[start:][:len]
}
})
}

View File

@@ -18,9 +18,8 @@ package usb
import "testing" import "testing"
func TestListDevices(t *testing.T) { func TestListDevices(t *testing.T) {
orig := libusb _, done := newFakeLibusb()
defer func() { libusb = orig }() defer done()
libusb = newFakeLibusb()
c := NewContext() c := NewContext()
defer c.Close() defer c.Close()
@@ -55,9 +54,8 @@ func TestListDevices(t *testing.T) {
} }
func TestOpenDeviceWithVidPid(t *testing.T) { func TestOpenDeviceWithVidPid(t *testing.T) {
orig := libusb _, done := newFakeLibusb()
defer func() { libusb = orig }() defer done()
libusb = newFakeLibusb()
for _, d := range []struct { for _, d := range []struct {
vid, pid ID vid, pid ID