forked from Green-Sky/tomato
add simple reframer tests (no errors found)
This commit is contained in:
parent
acbc1552eb
commit
84c48d7f5a
@ -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
|
||||
)
|
||||
|
||||
|
161
src/frame_streams/test_pop_reframer.cpp
Normal file
161
src/frame_streams/test_pop_reframer.cpp
Normal file
@ -0,0 +1,161 @@
|
||||
#include <iostream>
|
||||
|
||||
#include "./audio_stream_pop_reframer.hpp"
|
||||
#include "./locked_frame_stream.hpp"
|
||||
|
||||
#include <cassert>
|
||||
|
||||
int main(void) {
|
||||
{ // pump perfect
|
||||
AudioStreamPopReFramer<LockedFrameStream2<AudioFrame2>> stream;
|
||||
stream._frame_length_ms = 10;
|
||||
|
||||
AudioFrame2 f1 {
|
||||
48'000,
|
||||
1,
|
||||
{},
|
||||
};
|
||||
f1.buffer = std::vector<int16_t>(
|
||||
// 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<std::vector<int16_t>>(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<LockedFrameStream2<AudioFrame2>> stream;
|
||||
stream._frame_length_ms = 10;
|
||||
|
||||
AudioFrame2 f1 {
|
||||
48'000,
|
||||
1,
|
||||
{},
|
||||
};
|
||||
f1.buffer = std::vector<int16_t>(
|
||||
// perfect size
|
||||
(stream._frame_length_ms * f1.sample_rate * f1.channels / 1000) / 2,
|
||||
0
|
||||
);
|
||||
AudioFrame2 f2 {
|
||||
48'000,
|
||||
1,
|
||||
{},
|
||||
};
|
||||
f2.buffer = std::vector<int16_t>(
|
||||
// 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<std::vector<int16_t>>(f1.buffer)) {
|
||||
v = seq++;
|
||||
}
|
||||
for (auto& v : std::get<std::vector<int16_t>>(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<LockedFrameStream2<AudioFrame2>> stream;
|
||||
stream._frame_length_ms = 20;
|
||||
|
||||
AudioFrame2 f1 {
|
||||
48'000,
|
||||
2,
|
||||
{},
|
||||
};
|
||||
f1.buffer = std::vector<int16_t>(
|
||||
// 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<std::vector<int16_t>>(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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user