func TestBars(t *testing.T) {
	c := pitch.New(4, 0)
	cs := pitch.New(4, 1)
	qn := time.NewDuration(1, 4)
	hn := time.NewDuration(1, 2)
	none := Untagged

	voice := NewLine(none,
		Note{c, qn, none},
		Note{cs, hn, none},
		Rest{hn, none},
		Note{c, qn, none},
	)
	bars := Bars(time.Signature(3, 4), time.Zero(), voice)

	if len(bars) != 2 {
		t.Errorf("Expected %d bars received %d", 2, len(bars))
	}

	bar1 := Bar{1, []Event{
		Event{voice.elements[0], time.Zero()},
		Event{voice.elements[1], time.NewPosition(1, 4)},
	}}

	bar2 := Bar{2, []Event{
		Event{voice.elements[2], time.Zero()},
		Event{voice.elements[3], time.NewPosition(1, 4)},
	}}

	checkBar(bars[0], bar1, t)
	checkBar(bars[1], bar2, t)
}
func TestLine(t *testing.T) {
	r1 := Rest{qn, Untagged}
	r2 := Rest{hn, Untagged}

	a := Line{[]Element{r1, r2, r1}, Attributes{}}
	b := Line{[]Element{r1, r2, r1}, Attributes{}}
	c := Line{[]Element{a, b}, Attributes{}}

	e := c.Events(time.Zero())
	if l := len(e); l != 6 {
		t.Errorf("Expected 6 events, received %v", l)
	}

	checkRational(e[0].Position, time.Zero(), t)
	checkRational(e[1].Position, time.NewPosition(1, 4), t)
	checkRational(e[2].Position, time.NewPosition(3, 4), t)
	checkRational(e[3].Position, time.NewPosition(1, 1), t)
	checkRational(e[4].Position, time.NewPosition(5, 4), t)
	checkRational(e[5].Position, time.NewPosition(7, 4), t)
}