-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathposition_test.go
60 lines (57 loc) · 2.22 KB
/
position_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package midi
import (
"reflect"
"testing"
)
func Test_TickPosition(t *testing.T) {
tests := []struct {
name string
absTicks uint64
ppq uint16
want Position
}{
{name: "One quantized", absTicks: 0, ppq: 96, want: Position{Bar: 0, Beat: 0, Div: 0, Ticks: 0}},
{name: "One unquantized", absTicks: 35, ppq: 96, want: Position{Bar: 0, Beat: 0, Div: 1, Ticks: 11}},
{name: "75", absTicks: 75, ppq: 96, want: Position{Bar: 0, Beat: 0, Div: 3, Ticks: 3}},
{name: "ppq", absTicks: 96, ppq: 96, want: Position{Bar: 0, Beat: 1, Div: 0, Ticks: 0}},
{name: "250", absTicks: 250, ppq: 96, want: Position{Bar: 0, Beat: 2, Div: 2, Ticks: 10}},
{name: "high ppq", absTicks: 1250, ppq: 480, want: Position{Bar: 0, Beat: 2, Div: 2, Ticks: 50}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := TickPosition(tt.absTicks, tt.ppq); !reflect.DeepEqual(got, tt.want) {
t.Errorf("TickPosition() = %v, want %v", got, tt.want)
}
ev := &Event{AbsTicks: tt.absTicks}
if got := ev.Position(tt.ppq); !reflect.DeepEqual(got, tt.want) {
t.Errorf("Event.Position() = %v, want %v", got, tt.want)
}
})
}
var ev *Event
if got := ev.Position(96); !reflect.DeepEqual(got, Position{}) {
t.Errorf("Event.Position() of a nil element expected a blank position but got %v", got)
}
}
func TestPosition_ToTicks(t *testing.T) {
tests := []struct {
name string
absTicks uint64
ppq uint16
pos Position
}{
{name: "One quantized", absTicks: 0, ppq: 96, pos: Position{Bar: 0, Beat: 0, Div: 0, Ticks: 0}},
{name: "One unquantized", absTicks: 35, ppq: 96, pos: Position{Bar: 0, Beat: 0, Div: 1, Ticks: 11}},
{name: "75", absTicks: 75, ppq: 96, pos: Position{Bar: 0, Beat: 0, Div: 3, Ticks: 3}},
{name: "ppq", absTicks: 96, ppq: 96, pos: Position{Bar: 0, Beat: 1, Div: 0, Ticks: 0}},
{name: "250", absTicks: 250, ppq: 96, pos: Position{Bar: 0, Beat: 2, Div: 2, Ticks: 10}},
{name: "high ppq", absTicks: 1250, ppq: 480, pos: Position{Bar: 0, Beat: 2, Div: 2, Ticks: 50}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := tt.pos.ToTicks(tt.ppq); !reflect.DeepEqual(got, tt.absTicks) {
t.Errorf("ToTicks() = %v, want %v", got, tt.absTicks)
}
})
}
}