From a5b33dcab2e6218e9e17f36a26520fd1dabc58bb Mon Sep 17 00:00:00 2001 From: xleroy Date: Fri, 8 Sep 2006 15:43:41 +0000 Subject: MAJ des tests C git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@86 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e --- test/c/fft.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'test/c/fft.c') diff --git a/test/c/fft.c b/test/c/fft.c index 9edf427b..1ab7b15a 100644 --- a/test/c/fft.c +++ b/test/c/fft.c @@ -4,6 +4,8 @@ */ #include +#include +#include #ifndef PI #define PI 3.14159265358979323846 @@ -139,4 +141,51 @@ int dfft(double x[], double y[], int np) return(n); } +/* Test harness */ +double * xr, * xi; + +int main(int argc, char ** argv) +{ + int n, np, npm, n2, i, j; + double enp, t, y, z, zr, zi, zm, a; + double * pxr, * pxi; + + if (argc >= 2) n = atoi(argv[1]); else n = 12; + np = 1 << n; + enp = np; + npm = np / 2 - 1; + t = PI / enp; + xr = calloc(np, sizeof(double)); + xi = calloc(np, sizeof(double)); + pxr = xr; + pxi = xi; + *pxr = (enp - 1.0) * 0.5; + *pxi = 0.0; + n2 = np / 2; + *(pxr+n2) = -0.5; + *(pxi+n2) = 0.0; + for (i = 1; i <= npm; i++) { + j = np - i; + *(pxr+i) = -0.5; + *(pxr+j) = -0.5; + z = t * (double)i; + y = -0.5*(cos(z)/sin(z)); + *(pxi+i) = y; + *(pxi+j) = -y; + } + dfft(xr,xi,np); + zr = 0.0; + zi = 0.0; + npm = np-1; + for (i = 0; i <= npm; i++ ) { + a = fabs(pxr[i] - i); + if (zr < a) zr = a; + a = fabs(pxi[i]); + if (zi < a) zi = a; + } + zm = zr; + if (zr < zi) zm = zi; + printf("%d points, error %g\n", np, zm); + return 0; +} -- cgit