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:
parent
00049d8b3a
commit
bff4cde055
1 changed files with 27 additions and 24 deletions
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue