1 #include <stdlib.h>
2 #include <fftw3.h>
3 
4 #define NUM_TESTS
5 
generate_reference_data(int n,fftw_complex * in,fftw_complex * out)6 void generate_reference_data(int n, fftw_complex* in, fftw_complex* out){
7   int i;
8   fftw_plan p;
9 
10   for (i = 0; i < n; i++){
11     in[i][0] = 2 * rand() / ((double)RAND_MAX + 1) - 1;
12     in[i][1] = 2 * rand() / ((double)RAND_MAX + 1) - 1;
13   }
14 
15   p = fftw_plan_dft_1d(n, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
16   fftw_execute(p);
17   fftw_destroy_plan(p);
18 }
19 
save_reference_data(int n,fftw_complex * in,fftw_complex * out)20 void save_reference_data(int n, fftw_complex* in, fftw_complex* out){
21   char s[100];
22   FILE* f;
23 
24   sprintf(s, "fftw%d.in", n);
25   f = fopen(s, "wb");
26   fwrite(in, sizeof(fftw_complex), n, f);
27   fclose(f);
28 
29   sprintf(s, "fftw%d.out", n);
30   f = fopen(s, "wb");
31   fwrite(out, sizeof(fftw_complex), n, f);
32   fclose(f);
33 }
34 
main(int argc,char ** argv)35 int main(int argc, char **argv){
36   if (argc != 2){
37     printf("Missing expected list of sizes");
38     exit(0);
39   }
40   fftw_complex *in, *out;
41   fftw_plan p;
42 
43   int n;
44 
45   FILE* f;
46   f = fopen(argv[1], "r");
47   while(!feof(f)){
48     fscanf(f, "%i\n", &n);
49     printf("Generating reference data for n = %i\n", n);
50     in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * n);
51     out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * n);
52     generate_reference_data(n, in, out);
53     save_reference_data(n, in, out);
54     fftw_free(in);
55     fftw_free(out);
56   }
57 
58 
59   fclose(f);
60 }
61