Files
cKit/Context/c_FFT.t.c
T
2026-09-07 19:33:37 +08:00

46 lines
1.6 KiB
C

#include "c_Test.h"
#include "c_FFT.h"
TEST_CASE(test_fft_forward_and_inverse_precision) {
c_size_t N = 8;
c_FFT_t fft;
c_err_t err = c_FFT_Init(&fft, N, NULL);
ASSERT_INT_EQ(C_SUCCESS, err);
/* Allocate and initialize a test complex input signal (e.g., a simple square pulse) */
c_Complex_t signal[8] = {
{1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0},
{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}
};
/* Backup the original signal vector values for accuracy verification tests later */
double original_real[8];
for (c_size_t i = 0; i < N; ++i) original_real[i] = signal[i].real;
/* 1. Execute Forward Fourier Transformation */
err = c_FFT_Execute(&fft, signal, C_FALSE);
ASSERT_INT_EQ(C_SUCCESS, err);
/* The DC component (index 0) must equal the sum of all elements = 4.0 */
ASSERT_DOUBLE_EQ_MSG(4.0, signal[0].real, "Forward FFT DC component calculation wrong");
/* 2. Execute Inverse Fourier Transformation to reconstruct the original signal */
err = c_FFT_Execute(&fft, signal, C_TRUE);
ASSERT_INT_EQ(C_SUCCESS, err);
/* Confirm that the output matches the original input wave precisely within allowed errors */
for (c_size_t i = 0; i < N; ++i) {
ASSERT_DOUBLE_EQ_MSG(original_real[i], signal[i].real, "FFT-IFFT signal precision mismatch");
ASSERT_DOUBLE_EQ_MSG(0.0, signal[i].imag, "Residual imaginary noise caught in reconstructed signal");
}
c_FFT_Destroy(&fft);
}
int main(void) {
TEST_START(FastFourierTransform_Engine_Suite);
RUN_TEST(test_fft_forward_and_inverse_precision);
TEST_REPORT();
RETURN_TEST_STATUS;
}