diff --git a/modules/juce_audio_basics/midi/juce_MidiBuffer.cpp b/modules/juce_audio_basics/midi/juce_MidiBuffer.cpp index cde16912f2..28f8f36456 100644 --- a/modules/juce_audio_basics/midi/juce_MidiBuffer.cpp +++ b/modules/juce_audio_basics/midi/juce_MidiBuffer.cpp @@ -116,7 +116,7 @@ void MidiBuffer::clear (int startSample, int numSamples) auto start = MidiBufferHelpers::findEventAfter (data.begin(), data.end(), startSample - 1); auto end = MidiBufferHelpers::findEventAfter (start, data.end(), startSample + numSamples - 1); - data.removeRange ((int) (start - data.begin()), (int) (end - data.begin())); + data.removeRange ((int) (start - data.begin()), (int) (end - start)); } void MidiBuffer::addEvent (const MidiMessage& m, int sampleNumber) @@ -236,4 +236,73 @@ bool MidiBuffer::Iterator::getNextEvent (MidiMessage& result, int& samplePositio return true; } +//============================================================================== +//============================================================================== +#if JUCE_UNIT_TESTS + +struct MidiBufferTest : public UnitTest +{ + MidiBufferTest() + : UnitTest ("MidiBuffer", UnitTestCategories::midi) + {} + + void runTest() override + { + beginTest ("Clear messages"); + { + const auto message = MidiMessage::noteOn (1, 64, 0.5f); + + const auto testBuffer = [&] + { + MidiBuffer buffer; + buffer.addEvent (message, 0); + buffer.addEvent (message, 10); + buffer.addEvent (message, 20); + buffer.addEvent (message, 30); + return buffer; + }(); + + { + auto buffer = testBuffer; + buffer.clear (10, 0); + expectEquals (buffer.getNumEvents(), 4); + } + + { + auto buffer = testBuffer; + buffer.clear (10, 1); + expectEquals (buffer.getNumEvents(), 3); + } + + { + auto buffer = testBuffer; + buffer.clear (10, 10); + expectEquals (buffer.getNumEvents(), 3); + } + + { + auto buffer = testBuffer; + buffer.clear (10, 20); + expectEquals (buffer.getNumEvents(), 2); + } + + { + auto buffer = testBuffer; + buffer.clear (10, 30); + expectEquals (buffer.getNumEvents(), 1); + } + + { + auto buffer = testBuffer; + buffer.clear (10, 300); + expectEquals (buffer.getNumEvents(), 1); + } + } + } +}; + +static MidiBufferTest midiBufferTest; + +#endif + } // namespace juce