#include "MidiLock.h" #include "MidiSong.h" #include "MidiTrack.h" #include "asserts.h" static void test0() { MidiSongPtr song = std::make_shared(); assertEQ(song->getHighestTrackNumber(), -1); song->assertValid(); } static void test1() { MidiSongPtr song = std::make_shared(); MidiLocker l(song->lock); song->createTrack(10); song->getTrack(10)->insertEnd(0); assertEQ(song->getHighestTrackNumber(), 10); song->assertValid(); } static void test2() { MidiSongPtr song = std::make_shared(); song->createTrack(0); assertEQ(song->getHighestTrackNumber(), 0); auto track = song->getTrack(0); assert(track); for (auto ev : *track) { assert(false); // there should be no events in the track } track->assertValid(); song->assertValid(); } static void testDefSong() { // TODO: move to song::assertValid() MidiSongPtr song = MidiSong::makeTest(MidiTrack::TestContent::eightQNotes, 0); assertEQ(song->getHighestTrackNumber(), 0); // there should be one track - 0 auto track = song->getTrack(0); track->assertValid(); int notes = 0; int events = 0; for (auto ev : *track) { ++events; auto notep = safe_cast(ev.second); if (notep) { ++notes; } } assertEQ(notes, 8); assertEQ(events, 9); song->assertValid(); } void testMidiSong() { test0(); test1(); testDefSong(); assertNoMidi(); // check for leaks }