From e0e52953570caea66096cda08dc814f34735f7af Mon Sep 17 00:00:00 2001 From: steven-na Date: Wed, 5 Aug 2026 16:03:11 -0700 Subject: Fixed byte/element inconsistencies --- tests/dft.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'tests') diff --git a/tests/dft.c b/tests/dft.c index 5a581bd..9c406f5 100644 --- a/tests/dft.c +++ b/tests/dft.c @@ -218,6 +218,24 @@ Test(dft, stft_segments_match_direct_transform) { smrt_arena_destroy(arena); } +Test(dft, stft_handles_unaligned_sample_count_with_wav_load_style_buffer) { + smrt_arena_t *arena = smrt_arena_create(KiB(64), KiB(4), false); + + u64 sample_count = 13, sample_rate = 16, window_size = 8, hop_size = 4; + + // Mirrors how wav_load/load_wav_file size their sample buffer: byte-aligned to + // STFT_SAMPLE_ALIGN_BYTES(window_size) and zero-initialized, not element-aligned. + f64 *samples = smrt_arena_push(arena, ALIGN_UP_POW2(sample_count * sizeof(f64), STFT_SAMPLE_ALIGN_BYTES(window_size)), true); + for (u64 i = 0; i < sample_count; i++) samples[i] = (f64)(i + 1); + + stft_data_t stft = short_time_fourier_transform(arena, window_size, hop_size, samples, sample_count, sample_rate); + + cr_assert_eq(stft.segment_count, 3); + cr_assert_neq(stft.segments, NULL); + + smrt_arena_destroy(arena); +} + Test(dft, fast_fourier_transform_matches_direct_transform) { smrt_arena_t *arena = smrt_arena_create(KiB(16), KiB(4), false); -- cgit v1.2.3