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