mirror of
https://github.com/faiface/beep.git
synced 2025-12-23 23:38:45 -05:00
add test for Loop and fix a bug in it
This commit is contained in:
@@ -54,6 +54,9 @@ func (l *loop) Stream(samples [][2]float64) (n int, ok bool) {
|
||||
for len(samples) > 0 {
|
||||
sn, sok := l.s.Stream(samples)
|
||||
if !sok {
|
||||
if l.remains > 0 {
|
||||
l.remains--
|
||||
}
|
||||
if l.remains == 0 {
|
||||
break
|
||||
}
|
||||
@@ -61,9 +64,6 @@ func (l *loop) Stream(samples [][2]float64) (n int, ok bool) {
|
||||
if err != nil {
|
||||
return n, true
|
||||
}
|
||||
if l.remains > 0 {
|
||||
l.remains--
|
||||
}
|
||||
continue
|
||||
}
|
||||
samples = samples[sn:]
|
||||
|
||||
@@ -8,22 +8,46 @@ import (
|
||||
"github.com/faiface/beep"
|
||||
)
|
||||
|
||||
// randomDataStreamer generates random samples of duration d and returns a Streamer which streams
|
||||
// randomDataStreamer generates random samples of duration d and returns a StreamSeeker which streams
|
||||
// them and the data itself.
|
||||
func randomDataStreamer(numSamples int) (s beep.Streamer, data [][2]float64) {
|
||||
func randomDataStreamer(numSamples int) (s beep.StreamSeeker, data [][2]float64) {
|
||||
data = make([][2]float64, numSamples)
|
||||
for i := range data {
|
||||
data[i][0] = rand.Float64()*2 - 1
|
||||
data[i][1] = rand.Float64()*2 - 1
|
||||
}
|
||||
return beep.StreamerFunc(func(samples [][2]float64) (n int, ok bool) {
|
||||
if len(data) == 0 {
|
||||
return 0, false
|
||||
}
|
||||
n = copy(samples, data)
|
||||
data = data[n:]
|
||||
return n, true
|
||||
}), data
|
||||
return &dataStreamer{data, 0}, data
|
||||
}
|
||||
|
||||
type dataStreamer struct {
|
||||
data [][2]float64
|
||||
pos int
|
||||
}
|
||||
|
||||
func (ds *dataStreamer) Stream(samples [][2]float64) (n int, ok bool) {
|
||||
if ds.pos >= len(ds.data) {
|
||||
return 0, false
|
||||
}
|
||||
n = copy(samples, ds.data[ds.pos:])
|
||||
ds.pos += n
|
||||
return n, true
|
||||
}
|
||||
|
||||
func (ds *dataStreamer) Err() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ds *dataStreamer) Len() int {
|
||||
return len(ds.data)
|
||||
}
|
||||
|
||||
func (ds *dataStreamer) Position() int {
|
||||
return ds.pos
|
||||
}
|
||||
|
||||
func (ds *dataStreamer) Seek(p int) error {
|
||||
ds.pos = p
|
||||
return nil
|
||||
}
|
||||
|
||||
// collect drains Streamer s and returns all of the samples it streamed.
|
||||
@@ -56,6 +80,24 @@ func TestTake(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoop(t *testing.T) {
|
||||
for i := 0; i < 7; i++ {
|
||||
for n := 0; n < 5; n++ {
|
||||
s, data := randomDataStreamer(10)
|
||||
|
||||
var want [][2]float64
|
||||
for j := 0; j < n; j++ {
|
||||
want = append(want, data...)
|
||||
}
|
||||
got := collect(beep.Loop(n, s))
|
||||
|
||||
if !reflect.DeepEqual(want, got) {
|
||||
t.Error("Loop not working correctly")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSeq(t *testing.T) {
|
||||
var (
|
||||
n = 7
|
||||
|
||||
Reference in New Issue
Block a user