@@ -52,5 +52,55 @@ class NoteEventSequenceTests: XCTestCase {
5252 XCTAssertEqual ( seq. notes [ 1 ] . noteOn. data1, 62 )
5353 }
5454
55+ func testNoteOffAlwaysBeforeNoteOnInBeatTimeOrdered( ) {
56+ let noteOn = SequenceEvent ( status: noteOnByte, data1: 60 , data2: 0 , beat: 0 )
57+ let noteOff = SequenceEvent ( status: noteOffByte, data1: 60 , data2: 0 , beat: 0 )
58+ let otherNoteOn = SequenceEvent ( status: noteOnByte, data1: 61 , data2: 0 , beat: 0 )
59+
60+ let sequences = [
61+ [ noteOn, noteOff, otherNoteOn] ,
62+ [ noteOn, otherNoteOn, noteOff] ,
63+ [ noteOff, noteOn , otherNoteOn] ,
64+ [ noteOff, otherNoteOn, noteOn] ,
65+ [ otherNoteOn, noteOn, noteOff] ,
66+ [ otherNoteOn, noteOff, noteOn]
67+ ]
68+
69+ for sequence in sequences {
70+ let ordered = sequence. beatTimeOrdered ( )
71+ XCTAssertLessThan ( ordered. firstIndex ( of: noteOff) !, ordered. firstIndex ( of: noteOn) !)
72+ }
73+ }
74+
75+ func testEarlierNoteBeforeInBeatTimeOrderedForSameNoteSameStatus( ) {
76+ let earlier = SequenceEvent ( status: noteOnByte, data1: 60 , data2: 0 , beat: 0 )
77+ let later = SequenceEvent ( status: noteOnByte, data1: 60 , data2: 0 , beat: 1 )
78+
79+ let sequences = [
80+ [ earlier, later] ,
81+ [ later, earlier] ,
82+ ]
83+
84+ for sequence in sequences {
85+ let ordered = sequence. beatTimeOrdered ( )
86+ XCTAssertLessThan ( ordered. firstIndex ( of: earlier) !, ordered. firstIndex ( of: later) !)
87+ }
88+ }
89+
90+ func testEarlierNoteBeforeInBeatTimeOrderedForSameNoteDifferentStatus( ) {
91+ let earlier = SequenceEvent ( status: noteOnByte, data1: 60 , data2: 0 , beat: 0 )
92+ let later = SequenceEvent ( status: noteOffByte, data1: 60 , data2: 0 , beat: 1 )
93+
94+ let sequences = [
95+ [ earlier, later] ,
96+ [ later, earlier] ,
97+ ]
98+
99+ for sequence in sequences {
100+ let ordered = sequence. beatTimeOrdered ( )
101+ XCTAssertLessThan ( ordered. firstIndex ( of: earlier) !, ordered. firstIndex ( of: later) !)
102+ }
103+ }
104+
55105}
56106#endif
0 commit comments