1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

BufferingAudioFormatReader: Improve robustness of the unit tests

This commit is contained in:
Anthony Nicholls 2023-08-23 14:17:23 +01:00
parent 00049d8b3a
commit bff4cde055

View file

@ -245,10 +245,10 @@ public:
void runTest() override void runTest() override
{ {
TimeSliceThread timeSlice ("TestBackgroundThread"); TimeSliceThread thread ("TestBackgroundThread");
timeSlice.startThread (Thread::Priority::normal); thread.startThread (Thread::Priority::normal);
beginTest ("Timeout"); beginTest ("Reading samples from a blocked reader should produce silence");
{ {
struct BlockingReader : public TestAudioFormatReader struct BlockingReader : public TestAudioFormatReader
{ {
@ -263,47 +263,50 @@ public:
int64 startSampleInFile, int64 startSampleInFile,
int numSamples) override int numSamples) override
{ {
Thread::sleep (100); unblock.wait();
return TestAudioFormatReader::readSamples (destChannels, numDestChannels, startOffsetInDestBuffer, startSampleInFile, numSamples); return TestAudioFormatReader::readSamples (destChannels, numDestChannels, startOffsetInDestBuffer, startSampleInFile, numSamples);
} }
WaitableEvent unblock;
}; };
Random random { getRandom() }; Random random { getRandom() };
constexpr auto bufferSize = 1024;
const auto blockingBuffer = generateTestBuffer (random, 1024); const auto source = generateTestBuffer (random, bufferSize);
expect (! isSilent (blockingBuffer)); expect (! isSilent (source));
BufferingAudioReader bufferingReader (new BlockingReader (&blockingBuffer), timeSlice, 64); auto* blockingReader = new BlockingReader (&source);
bufferingReader.setReadTimeout (10); BufferingAudioReader reader (blockingReader, thread, bufferSize);
const auto originalBuffer = generateTestBuffer (random, 1024); auto destination = generateTestBuffer (random, bufferSize);
expect (! isSilent (originalBuffer)); expect (! isSilent (destination));
expect (originalBuffer != blockingBuffer);
auto readBuffer = originalBuffer; read (reader, destination);
expect (readBuffer == originalBuffer); expect (isSilent (destination));
read (bufferingReader, readBuffer); blockingReader->unblock.signal();
expect (readBuffer != originalBuffer);
expect (isSilent (readBuffer));
} }
beginTest ("Read samples"); beginTest ("Reading samples from a reader should produce the same samples as its source");
{ {
Random random { getRandom() }; Random random { getRandom() };
for (auto i = 4; i < 18; ++i) for (auto i = 4; i < 18; ++i)
{ {
const auto backgroundBufferSize = 1 << i; const auto bufferSize = 1 << i;
const auto buffer = generateTestBuffer (random, backgroundBufferSize); const auto source = generateTestBuffer (random, bufferSize);
expect (! isSilent (source));
BufferingAudioReader bufferingReader (new TestAudioFormatReader (&buffer), timeSlice, backgroundBufferSize); BufferingAudioReader reader (new TestAudioFormatReader (&source), thread, bufferSize);
bufferingReader.setReadTimeout (-1); reader.setReadTimeout (-1);
AudioBuffer<float> readBuffer { buffer.getNumChannels(), buffer.getNumSamples() }; auto destination = generateTestBuffer (random, bufferSize);
read (bufferingReader, readBuffer); expect (! isSilent (destination));
expect (source != destination);
expect (buffer == readBuffer); read (reader, destination);
expect (source == destination);
} }
} }
} }