#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; }