public void TestClone() { var manualMidi = new MidiEventCollection(1, 200); var noteEvent1 = new NoteOnEvent(0, 1, 1, 1, 1); const string trackName1 = "name"; var trackNameEvent1 = new TextEvent(trackName1, MetaEventType.SequenceTrackName, 0); var endTrackEvent1 = new MetaEvent(MetaEventType.EndTrack, 0, noteEvent1.OffEvent.AbsoluteTime); var track1 = manualMidi.AddTrack(); track1.Add(trackNameEvent1); track1.Add(noteEvent1); track1.Add(noteEvent1.OffEvent); track1.Add(endTrackEvent1); var noteEvent2 = new NoteOnEvent(0, 1, 1, 1, 1); const string trackName2 = "name"; var trackNameEvent2 = new TextEvent(trackName2, MetaEventType.SequenceTrackName, 0); var endTrackEvent2 = new MetaEvent(MetaEventType.EndTrack, 0, noteEvent2.OffEvent.AbsoluteTime); var track2 = manualMidi.AddTrack(); track2.Add(trackNameEvent2); track2.Add(noteEvent2); track2.Add(noteEvent2.OffEvent); track2.Add(endTrackEvent2); var clone = manualMidi.Clone(); MidiAssert.Equal(manualMidi, clone); for (var t = 0; t < manualMidi.Tracks; t++) { var manualTrack = manualMidi[t]; var extensionTrack = clone[t]; for (var e = 1; e < manualTrack.Count - 1; e++) { Assert.That(extensionTrack[e], Is.Not.SameAs(manualTrack[e])); } } }