From 6989022b8f320cc3621ad51d4e118ae97617d5a6 Mon Sep 17 00:00:00 2001 From: James Churchill <115545454+jamesachurchill@users.noreply.github.com> Date: Fri, 26 Jun 2026 07:55:50 +1000 Subject: [PATCH] tests: cover audio buffer decoding --- tests/CMakeLists.txt | 10 ++++++ tests/test-read-audio-data-buffer.cpp | 51 +++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 tests/test-read-audio-data-buffer.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 74a5b142948..43b7e0d32be 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -96,6 +96,16 @@ target_link_libraries(${UTF8_TEST} PRIVATE common) add_test(NAME ${UTF8_TEST} COMMAND ${UTF8_TEST}) set_tests_properties(${UTF8_TEST} PROPERTIES LABELS "unit") +# Audio byte-buffer decode regression test +set(AUDIO_BUFFER_TEST test-read-audio-data-buffer) +add_executable(${AUDIO_BUFFER_TEST} ${AUDIO_BUFFER_TEST}.cpp) +target_include_directories(${AUDIO_BUFFER_TEST} PRIVATE ../examples) +target_link_libraries(${AUDIO_BUFFER_TEST} PRIVATE common) +target_compile_definitions(${AUDIO_BUFFER_TEST} PRIVATE + SAMPLE_PATH="${PROJECT_SOURCE_DIR}/samples/jfk.wav") +add_test(NAME ${AUDIO_BUFFER_TEST} COMMAND ${AUDIO_BUFFER_TEST}) +set_tests_properties(${AUDIO_BUFFER_TEST} PROPERTIES LABELS "unit") + # VAD test tests VAD in isolation set(VAD_TEST test-vad) add_executable(${VAD_TEST} ${VAD_TEST}.cpp) diff --git a/tests/test-read-audio-data-buffer.cpp b/tests/test-read-audio-data-buffer.cpp new file mode 100644 index 00000000000..e5795bf1151 --- /dev/null +++ b/tests/test-read-audio-data-buffer.cpp @@ -0,0 +1,51 @@ +#include "common-whisper.h" + +#include +#include +#include +#include +#include +#include + +#ifdef NDEBUG +#undef NDEBUG +#endif +#include + +static std::vector read_file_bytes(const std::string & path) { + std::ifstream input(path, std::ios::binary); + assert(input.good()); + return std::vector( + std::istreambuf_iterator(input), + std::istreambuf_iterator()); +} + +static void assert_pcm_nearly_equal(const std::vector & expected, const std::vector & actual) { + assert(expected.size() == actual.size()); + for (size_t i = 0; i < expected.size(); ++i) { + assert(std::fabs(expected[i] - actual[i]) < 1e-6f); + } +} + +int main() { + const std::string sample_path = SAMPLE_PATH; + const std::vector wav_data = read_file_bytes(sample_path); + assert(!wav_data.empty()); + + std::vector pcm_from_file; + std::vector> stereo_from_file; + assert(read_audio_data(sample_path, pcm_from_file, stereo_from_file, false)); + assert(!pcm_from_file.empty()); + assert(stereo_from_file.empty()); + + std::vector pcm_from_memory; + std::vector> stereo_from_memory; + assert(read_audio_data(wav_data.data(), wav_data.size(), pcm_from_memory, stereo_from_memory, false)); + assert(!pcm_from_memory.empty()); + assert(stereo_from_memory.empty()); + + assert_pcm_nearly_equal(pcm_from_file, pcm_from_memory); + + printf("Decoded %zu bytes from memory into %zu PCM samples\n", wav_data.size(), pcm_from_memory.size()); + return 0; +}