From 84c48d7f5a91264866631070d9cd252e10c5278c Mon Sep 17 00:00:00 2001 From: Green Sky Date: Tue, 1 Oct 2024 12:05:08 +0200 Subject: [PATCH] add simple reframer tests (no errors found) --- src/CMakeLists.txt | 15 +++ src/frame_streams/test_pop_reframer.cpp | 161 ++++++++++++++++++++++++ 2 files changed, 176 insertions(+) create mode 100644 src/frame_streams/test_pop_reframer.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d4a5c375..036ab969 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -169,3 +169,18 @@ target_link_libraries(tomato PUBLIC set_target_properties(tomato PROPERTIES POSITION_INDEPENDENT_CODE ON) +######################################## + +add_executable(test_frame_stream2_pop_reframer EXCLUDE_FROM_ALL + ./frame_streams/frame_stream2.hpp + ./frame_streams/audio_stream2.hpp + ./frame_streams/locked_frame_stream.hpp + ./frame_streams/multi_source.hpp + + ./frame_streams/test_pop_reframer.cpp +) + +target_link_libraries(test_frame_stream2_pop_reframer + solanaceae_util +) + diff --git a/src/frame_streams/test_pop_reframer.cpp b/src/frame_streams/test_pop_reframer.cpp new file mode 100644 index 00000000..31fc9c4c --- /dev/null +++ b/src/frame_streams/test_pop_reframer.cpp @@ -0,0 +1,161 @@ +#include + +#include "./audio_stream_pop_reframer.hpp" +#include "./locked_frame_stream.hpp" + +#include + +int main(void) { + { // pump perfect + AudioStreamPopReFramer> stream; + stream._frame_length_ms = 10; + + AudioFrame2 f1 { + 48'000, + 1, + {}, + }; + f1.buffer = std::vector( + // perfect size + stream._frame_length_ms * f1.sample_rate * f1.channels / 1000, + 0 + ); + + { // fill with sequential value + int16_t seq = 0; + for (auto& v : std::get>(f1.buffer)) { + v = seq++; + } + } + + stream.push(f1); + + auto ret_opt = stream.pop(); + assert(ret_opt); + + auto& ret = ret_opt.value(); + assert(ret.sample_rate == f1.sample_rate); + assert(ret.channels == f1.channels); + assert(ret.getSpan().size == f1.getSpan().size); + { + int16_t seq = 0; + for (const auto v : ret.getSpan()) { + assert(v == seq++); + } + } + } + + { // pump half + AudioStreamPopReFramer> stream; + stream._frame_length_ms = 10; + + AudioFrame2 f1 { + 48'000, + 1, + {}, + }; + f1.buffer = std::vector( + // perfect size + (stream._frame_length_ms * f1.sample_rate * f1.channels / 1000) / 2, + 0 + ); + AudioFrame2 f2 { + 48'000, + 1, + {}, + }; + f2.buffer = std::vector( + // perfect size + (stream._frame_length_ms * f1.sample_rate * f1.channels / 1000) / 2, + 0 + ); + + { // fill with sequential value + int16_t seq = 0; + for (auto& v : std::get>(f1.buffer)) { + v = seq++; + } + for (auto& v : std::get>(f2.buffer)) { + v = seq++; + } + } + + stream.push(f1); + + { + auto ret_opt = stream.pop(); + assert(!ret_opt); + } + + // push the other half + stream.push(f2); + + auto ret_opt = stream.pop(); + assert(ret_opt); + + auto& ret = ret_opt.value(); + assert(ret.sample_rate == f1.sample_rate); + assert(ret.channels == f1.channels); + assert(ret.getSpan().size == stream._frame_length_ms * f1.sample_rate * f1.channels / 1000); + { + int16_t seq = 0; + for (const auto v : ret.getSpan()) { + assert(v == seq++); + } + } + } + + { // pump double + AudioStreamPopReFramer> stream; + stream._frame_length_ms = 20; + + AudioFrame2 f1 { + 48'000, + 2, + {}, + }; + f1.buffer = std::vector( + // perfect size + (stream._frame_length_ms * f1.sample_rate * f1.channels / 1000) * 2, + 0 + ); + { // fill with sequential value + int16_t seq = 0; + for (auto& v : std::get>(f1.buffer)) { + v = seq++; + } + } + + stream.push(f1); + + // pop 2x + int16_t seq = 0; + { + auto ret_opt = stream.pop(); + assert(ret_opt); + + auto& ret = ret_opt.value(); + assert(ret.sample_rate == f1.sample_rate); + assert(ret.channels == f1.channels); + assert(ret.getSpan().size == stream._frame_length_ms * f1.sample_rate * f1.channels / 1000); + for (const auto v : ret.getSpan()) { + assert(v == seq++); + } + } + + { + auto ret_opt = stream.pop(); + assert(ret_opt); + + auto& ret = ret_opt.value(); + assert(ret.sample_rate == f1.sample_rate); + assert(ret.channels == f1.channels); + assert(ret.getSpan().size == stream._frame_length_ms * f1.sample_rate * f1.channels / 1000); + for (const auto v : ret.getSpan()) { + assert(v == seq++); + } + } + } + + return 0; +}