You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.5KB

  1. #include "MidiLock.h"
  2. #include "MidiSong.h"
  3. #include "MidiTrack.h"
  4. #include "asserts.h"
  5. static void test0()
  6. {
  7. MidiSongPtr song = std::make_shared<MidiSong>();
  8. assertEQ(song->getHighestTrackNumber(), -1);
  9. song->assertValid();
  10. }
  11. static void test1()
  12. {
  13. MidiSongPtr song = std::make_shared<MidiSong>();
  14. MidiLocker l(song->lock);
  15. song->createTrack(10);
  16. song->getTrack(10)->insertEnd(0);
  17. assertEQ(song->getHighestTrackNumber(), 10);
  18. song->assertValid();
  19. }
  20. static void test2()
  21. {
  22. MidiSongPtr song = std::make_shared<MidiSong>();
  23. song->createTrack(0);
  24. assertEQ(song->getHighestTrackNumber(), 0);
  25. auto track = song->getTrack(0);
  26. assert(track);
  27. for (auto ev : *track) {
  28. assert(false); // there should be no events in the track
  29. }
  30. track->assertValid();
  31. song->assertValid();
  32. }
  33. static void testDefSong()
  34. {
  35. // TODO: move to song::assertValid()
  36. MidiSongPtr song = MidiSong::makeTest(MidiTrack::TestContent::eightQNotes, 0);
  37. assertEQ(song->getHighestTrackNumber(), 0); // there should be one track - 0
  38. auto track = song->getTrack(0);
  39. track->assertValid();
  40. int notes = 0;
  41. int events = 0;
  42. for (auto ev : *track) {
  43. ++events;
  44. auto notep = safe_cast<MidiNoteEvent>(ev.second);
  45. if (notep) {
  46. ++notes;
  47. }
  48. }
  49. assertEQ(notes, 8);
  50. assertEQ(events, 9);
  51. song->assertValid();
  52. }
  53. void testMidiSong()
  54. {
  55. test0();
  56. test1();
  57. testDefSong();
  58. assertNoMidi(); // check for leaks
  59. }