Skip to content

Commit

Permalink
Merge pull request #10843 from davidchocholaty/refactor_ring_delay_bu…
Browse files Browse the repository at this point in the history
…ffer_test

RingDelayBufferTest: refactor includes and span creation
  • Loading branch information
Swiftb0y authored Sep 1, 2022
2 parents 3f3a831 + 9044dd8 commit b9a2577
Showing 1 changed file with 36 additions and 25 deletions.
61 changes: 36 additions & 25 deletions src/test/ringdelaybuffer_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include <span>

#include "test/mixxxtest.h"
#include "util/sample.h"
#include "util/samplebuffer.h"
#include "util/span.h"
#include "util/types.h"
Expand Down Expand Up @@ -49,35 +48,38 @@ TEST_F(RingDelayBufferTest, ReadWriteNoDelayTest) {

mixxx::SampleBuffer output(numSamples);

std::span<CSAMPLE> outputSpan = output.span();
auto inputBufferSpan = mixxx::spanutil::spanFromPtrLen(inputBuffer, numSamples);

EXPECT_EQ(m_pRingDelayBuffer->write(
mixxx::spanutil::spanFromPtrLen(inputBuffer, numSamples)),
inputBufferSpan),
numSamples);
EXPECT_EQ(m_pRingDelayBuffer->read(
output.span(), 0),
outputSpan, 0),
numSamples);

AssertIdenticalBufferEquals(output.span(),
AssertIdenticalBufferEquals(outputSpan,
mixxx::spanutil::spanFromPtrLen(firstExpectedResult, numSamples));

EXPECT_EQ(m_pRingDelayBuffer->write(
mixxx::spanutil::spanFromPtrLen(inputBufferHalf, numSamplesHalf)),
numSamplesHalf);
EXPECT_EQ(m_pRingDelayBuffer->read(
output.span(), 0),
outputSpan, 0),
numSamples);

AssertIdenticalBufferEquals(output.span(),
AssertIdenticalBufferEquals(outputSpan,
mixxx::spanutil::spanFromPtrLen(secondExpectedResult, numSamples));

// Write and read over one ring.
EXPECT_EQ(m_pRingDelayBuffer->write(
mixxx::spanutil::spanFromPtrLen(inputBuffer, numSamples)),
inputBufferSpan),
numSamples);
EXPECT_EQ(m_pRingDelayBuffer->read(
output.span(), 0),
outputSpan, 0),
numSamples);

AssertIdenticalBufferEquals(output.span(),
AssertIdenticalBufferEquals(outputSpan,
mixxx::spanutil::spanFromPtrLen(thirdExpectedResult, numSamples));
}

Expand All @@ -92,36 +94,39 @@ TEST_F(RingDelayBufferTest, ReadWriteDelayTest) {

mixxx::SampleBuffer output(numSamples);

std::span<CSAMPLE> outputSpan = output.span();
auto inputBufferSpan = mixxx::spanutil::spanFromPtrLen(inputBuffer, numSamples);

// Read without delay.
EXPECT_EQ(m_pRingDelayBuffer->write(
mixxx::spanutil::spanFromPtrLen(inputBuffer, numSamples)),
inputBufferSpan),
numSamples);
EXPECT_EQ(m_pRingDelayBuffer->read(
output.span(), 0),
outputSpan, 0),
numSamples);

AssertIdenticalBufferEquals(output.span(),
AssertIdenticalBufferEquals(outputSpan,
mixxx::spanutil::spanFromPtrLen(firstExpectedResult, numSamples));

// Read with delay.
EXPECT_EQ(m_pRingDelayBuffer->read(
output.span(), firstDelaySize),
outputSpan, firstDelaySize),
numSamples);

AssertIdenticalBufferEquals(output.span(),
AssertIdenticalBufferEquals(outputSpan,
mixxx::spanutil::spanFromPtrLen(secondExpectedResult, numSamples));

// Fill the second half of the delay buffer with the first input data.
EXPECT_EQ(m_pRingDelayBuffer->write(
mixxx::spanutil::spanFromPtrLen(inputBuffer, numSamples)),
inputBufferSpan),
numSamples);

// Read with delay (not circle around).
EXPECT_EQ(m_pRingDelayBuffer->read(
output.span(), secondDelaySize),
outputSpan, secondDelaySize),
numSamples);

AssertIdenticalBufferEquals(output.span(),
AssertIdenticalBufferEquals(outputSpan,
mixxx::spanutil::spanFromPtrLen(thirdExpectedResult, numSamples));
}

Expand All @@ -134,17 +139,20 @@ static void BM_WriteReadWholeBufferNoDelay(benchmark::State& state) {
mixxx::SampleBuffer input(numSamples);
mixxx::SampleBuffer output(numSamples);

std::span<CSAMPLE> inputSpan = input.span();
std::span<CSAMPLE> outputSpan = output.span();

input.fill(0.0f);

for (auto _ : state) {
state.PauseTiming();
m_ringDelayBuffer.clear();
state.ResumeTiming();

m_ringDelayBuffer.write(input.span());
m_ringDelayBuffer.read(output.span(), 0);
m_ringDelayBuffer.write(input.span());
m_ringDelayBuffer.read(output.span(), 0);
m_ringDelayBuffer.write(inputSpan);
m_ringDelayBuffer.read(outputSpan, 0);
m_ringDelayBuffer.write(inputSpan);
m_ringDelayBuffer.read(outputSpan, 0);
}
}
BENCHMARK(BM_WriteReadWholeBufferNoDelay)->Range(64, 4 << 10);
Expand All @@ -159,17 +167,20 @@ static void BM_WriteReadWholeBufferDelay(benchmark::State& state) {
mixxx::SampleBuffer input(numSamples);
mixxx::SampleBuffer output(numSamples);

std::span<CSAMPLE> inputSpan = input.span();
std::span<CSAMPLE> outputSpan = output.span();

input.fill(0.0f);

for (auto _ : state) {
state.PauseTiming();
m_ringDelayBuffer.clear();
state.ResumeTiming();

m_ringDelayBuffer.write(input.span());
m_ringDelayBuffer.read(output.span(), delaySize);
m_ringDelayBuffer.write(input.span());
m_ringDelayBuffer.read(output.span(), delaySize);
m_ringDelayBuffer.write(inputSpan);
m_ringDelayBuffer.read(outputSpan, delaySize);
m_ringDelayBuffer.write(inputSpan);
m_ringDelayBuffer.read(outputSpan, delaySize);
}
}
BENCHMARK(BM_WriteReadWholeBufferDelay)->Range(64, 4 << 10);
Expand Down

0 comments on commit b9a2577

Please sign in to comment.