Skip to content

Commit 5a5ced4

Browse files
committed
add test for Loop and fix a bug in it
1 parent 9b35ad6 commit 5a5ced4

File tree

2 files changed

+55
-13
lines changed

2 files changed

+55
-13
lines changed

compositors.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,16 @@ func (l *loop) Stream(samples [][2]float64) (n int, ok bool) {
5454
for len(samples) > 0 {
5555
sn, sok := l.s.Stream(samples)
5656
if !sok {
57+
if l.remains > 0 {
58+
l.remains--
59+
}
5760
if l.remains == 0 {
5861
break
5962
}
6063
err := l.s.Seek(0)
6164
if err != nil {
6265
return n, true
6366
}
64-
if l.remains > 0 {
65-
l.remains--
66-
}
6767
continue
6868
}
6969
samples = samples[sn:]

compositors_test.go

+52-10
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,46 @@ import (
88
"github.com/faiface/beep"
99
)
1010

11-
// randomDataStreamer generates random samples of duration d and returns a Streamer which streams
11+
// randomDataStreamer generates random samples of duration d and returns a StreamSeeker which streams
1212
// them and the data itself.
13-
func randomDataStreamer(numSamples int) (s beep.Streamer, data [][2]float64) {
13+
func randomDataStreamer(numSamples int) (s beep.StreamSeeker, data [][2]float64) {
1414
data = make([][2]float64, numSamples)
1515
for i := range data {
1616
data[i][0] = rand.Float64()*2 - 1
1717
data[i][1] = rand.Float64()*2 - 1
1818
}
19-
return beep.StreamerFunc(func(samples [][2]float64) (n int, ok bool) {
20-
if len(data) == 0 {
21-
return 0, false
22-
}
23-
n = copy(samples, data)
24-
data = data[n:]
25-
return n, true
26-
}), data
19+
return &dataStreamer{data, 0}, data
20+
}
21+
22+
type dataStreamer struct {
23+
data [][2]float64
24+
pos int
25+
}
26+
27+
func (ds *dataStreamer) Stream(samples [][2]float64) (n int, ok bool) {
28+
if ds.pos >= len(ds.data) {
29+
return 0, false
30+
}
31+
n = copy(samples, ds.data[ds.pos:])
32+
ds.pos += n
33+
return n, true
34+
}
35+
36+
func (ds *dataStreamer) Err() error {
37+
return nil
38+
}
39+
40+
func (ds *dataStreamer) Len() int {
41+
return len(ds.data)
42+
}
43+
44+
func (ds *dataStreamer) Position() int {
45+
return ds.pos
46+
}
47+
48+
func (ds *dataStreamer) Seek(p int) error {
49+
ds.pos = p
50+
return nil
2751
}
2852

2953
// collect drains Streamer s and returns all of the samples it streamed.
@@ -56,6 +80,24 @@ func TestTake(t *testing.T) {
5680
}
5781
}
5882

83+
func TestLoop(t *testing.T) {
84+
for i := 0; i < 7; i++ {
85+
for n := 0; n < 5; n++ {
86+
s, data := randomDataStreamer(10)
87+
88+
var want [][2]float64
89+
for j := 0; j < n; j++ {
90+
want = append(want, data...)
91+
}
92+
got := collect(beep.Loop(n, s))
93+
94+
if !reflect.DeepEqual(want, got) {
95+
t.Error("Loop not working correctly")
96+
}
97+
}
98+
}
99+
}
100+
59101
func TestSeq(t *testing.T) {
60102
var (
61103
n = 7

0 commit comments

Comments
 (0)