@@ -8,22 +8,46 @@ import (
8
8
"github.com/faiface/beep"
9
9
)
10
10
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
12
12
// 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 ) {
14
14
data = make ([][2 ]float64 , numSamples )
15
15
for i := range data {
16
16
data [i ][0 ] = rand .Float64 ()* 2 - 1
17
17
data [i ][1 ] = rand .Float64 ()* 2 - 1
18
18
}
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
27
51
}
28
52
29
53
// collect drains Streamer s and returns all of the samples it streamed.
@@ -56,6 +80,24 @@ func TestTake(t *testing.T) {
56
80
}
57
81
}
58
82
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
+
59
101
func TestSeq (t * testing.T ) {
60
102
var (
61
103
n = 7
0 commit comments