private void GetNotes_DetectionSettings_EventsCollection(
            ContainerType containerType,
            NoteDetectionSettings settings,
            ICollection <MidiEvent> midiEvents,
            ICollection <Note> expectedNotes)
        {
            switch (containerType)
            {
            case ContainerType.EventsCollection:
            {
                var eventsCollection = new EventsCollection();
                eventsCollection.AddRange(midiEvents);

                var notes = eventsCollection.GetNotes(settings);
                MidiAsserts.AreEqual(expectedNotes, notes, "Notes are invalid.");

                var timedObjects = eventsCollection.GetObjects(ObjectType.Note, new ObjectDetectionSettings {
                        NoteDetectionSettings = settings
                    });
                MidiAsserts.AreEqual(expectedNotes, timedObjects, "Notes are invalid from GetObjects.");
            }
            break;

            case ContainerType.TrackChunk:
            {
                var trackChunk = new TrackChunk(midiEvents);

                var notes = trackChunk.GetNotes(settings);
                MidiAsserts.AreEqual(expectedNotes, notes, "Notes are invalid.");

                var timedObjects = trackChunk.GetObjects(ObjectType.Note, new ObjectDetectionSettings {
                        NoteDetectionSettings = settings
                    });
                MidiAsserts.AreEqual(expectedNotes, timedObjects, "Notes are invalid from GetObjects.");
            }
            break;

            case ContainerType.TrackChunks:
            case ContainerType.File:
            {
                GetNotes_DetectionSettings_TrackChunks(
                    containerType == ContainerType.File,
                    settings,
                    new[] { midiEvents },
                    expectedNotes);
            }
            break;
            }
        }
        private void GetChords_EventsCollection(
            ContainerType containerType,
            ICollection <MidiEvent> midiEvents,
            ICollection <Chord> expectedChords)
        {
            switch (containerType)
            {
            case ContainerType.EventsCollection:
            {
                var eventsCollection = new EventsCollection();
                eventsCollection.AddRange(midiEvents);

                var chords = eventsCollection.GetChords();
                MidiAsserts.AreEqual(expectedChords, chords, "Chords are invalid.");

                var timedObjects = eventsCollection.GetObjects(ObjectType.Chord);
                MidiAsserts.AreEqual(expectedChords, timedObjects, "Chords are invalid from GetObjects.");
            }
            break;

            case ContainerType.TrackChunk:
            {
                var trackChunk = new TrackChunk(midiEvents);

                var chords = trackChunk.GetChords();
                MidiAsserts.AreEqual(expectedChords, chords, "Chords are invalid.");

                var timedObjects = trackChunk.GetObjects(ObjectType.Chord);
                MidiAsserts.AreEqual(expectedChords, timedObjects, "Chords are invalid from GetObjects.");
            }
            break;

            case ContainerType.TrackChunks:
            case ContainerType.File:
            {
                GetChords_TrackChunks(
                    containerType == ContainerType.File,
                    new[] { midiEvents },
                    expectedChords);
            }
            break;
            }
        }