From b0e7c9dba3888458714e54fffab39371ca1d523e Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Thu, 11 Jun 2020 03:36:49 +0200 Subject: [PATCH] Add test for AudioBuffer padding --- tests/AudioBufferT.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/tests/AudioBufferT.cpp b/tests/AudioBufferT.cpp index ff483b13..f1665a89 100644 --- a/tests/AudioBufferT.cpp +++ b/tests/AudioBufferT.cpp @@ -83,3 +83,38 @@ TEST_CASE("[AudioSpan] Constructions") sfz::AudioSpan manualSpan2 { {buffer.getSpan(0), buffer.getSpan(1) } }; sfz::AudioSpan manualConstSpan2 { { buffer.getConstSpan(0), buffer.getConstSpan(1) } }; } + +TEST_CASE("[AudioBuffer] Padding") +{ + constexpr size_t channels = 2; + constexpr size_t numFrames = 7777; + constexpr unsigned alignment = 32; + constexpr size_t padLeft = 13; + constexpr size_t padRight = 51; + + sfz::AudioBuffer padded { channels, numFrames }; + + // ensure padding to be extended to respect alignment + constexpr size_t extendedPadLeft = padded.PaddingLeft; + REQUIRE(extendedPadLeft == 32); + + // ensure access functions to return consistent addresses with offset + for (size_t c = 0; c < channels; ++c) { + REQUIRE(padded.getSpan(c).data() == &padded.getSample(c, 0)); + REQUIRE(padded.getConstSpan(c).data() == &padded.getSample(c, 0)); + REQUIRE(padded.getSpan(c).data() == padded.channelReader(c)); + REQUIRE(padded.getSpan(c).data() == padded.channelWriter(c)); + REQUIRE(padded.getSpan(c).end() == padded.channelReaderEnd(c)); + REQUIRE(padded.getSpan(c).end() == padded.channelWriterEnd(c)); + } + + padded.clear(); + + // ensure all padding areas to be accessible and zero after clearing + for (size_t c = 0; c < channels; ++c) { + absl::Span leftSpan { padded.getSpan(0).data() - extendedPadLeft, extendedPadLeft }; + absl::Span rightSpan { padded.getSpan(0).end(), padRight }; + REQUIRE(std::all_of(leftSpan.begin(), leftSpan.end(), [](float value) { return value == 0.0f; })); + REQUIRE(std::all_of(rightSpan.begin(), rightSpan.end(), [](float value) { return value == 0.0f; })); + } +}