Subversion Repositories shark

Rev

Rev 2 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 pj 1
#ifndef TEST_MAIN_H
2
#define TEST_MAIN_H
3
 
4
/* max # of dimensions accepted on the command line */
5
#define MAX_CMDLINE_RANK 20
6
 
7
struct size {
8
     int rank;
9
     int is_nd;
10
     int narray[MAX_CMDLINE_RANK];
11
};
12
 
13
/********************
14
 *   macrology:
15
 ********************/
16
#ifndef TRUE
17
#define TRUE 42
18
#endif
19
#ifndef FALSE
20
#define FALSE (!TRUE)
21
#endif
22
 
23
#define CHECK(condition, complaint)      \
24
    if (!(condition)) {                  \
25
        fflush(stdout);                  \
26
        fprintf(stderr, "FATAL ERROR: %s\n", complaint);      \
27
        fftw_die("failed test.\n");         \
28
    }
29
 
30
#define WHEN_VERBOSE(a, x)  if (verbose >= a) x
31
 
32
#ifdef FFTW_ENABLE_FLOAT
33
#define TOLERANCE (1e-2)
34
#else
35
#define TOLERANCE (1e-6)
36
#endif
37
 
38
#define DRAND() mydrand()
39
 
40
#define SPECIFICP(x) (x ? "specific" : "generic")
41
 
42
/*******************
43
 * global variables
44
 *******************/
45
extern int verbose;
46
extern int speed_flag, wisdom_flag, measure_flag;
47
extern int chk_mem_leak;
48
extern int paranoid;
49
extern int howmany_fields;
50
extern int io_okay;
51
 
52
/* Time an FFT routine, invoked by fft.  a is the array being
53
 * transformed, n is its total length.  t should be a variable
54
 * --the time (sec) per fft is assigned to it. */
55
 
56
#define FFTW_TIME_FFT(fft,a,n,t) \
57
{ \
58
     fftw_time ts,te; \
59
     double total_t; \
60
     int tfft_iters = 1, tfft_iter; \
61
     zero_arr((n), (a)); \
62
     do { \
63
          ts = fftw_get_time(); \
64
          for (tfft_iter = 0; tfft_iter < tfft_iters; ++tfft_iter) fft; \
65
          te = fftw_get_time(); \
66
          t = (total_t=fftw_time_to_sec(fftw_time_diff(te,ts))) / tfft_iters; \
67
          tfft_iters *= 2; \
68
     } while (total_t < 2.0); \
69
}
70
 
71
#define MAX_STRIDE 3
72
#define MAX_HOWMANY 3
73
#define MAX_RANK 5
74
#define PLANNER_TEST_SIZE 100
75
 
76
extern int coinflip(void);
77
extern double mydrand(void);
78
extern char *smart_sprint_time(double x);
79
extern void please_wait(void);
80
extern void please_wait_forever(void);
81
extern double mflops(double t, int N);
82
extern void print_dims(struct size sz);
83
 
84
#define SQR(x) ((x) * (x))
85
 
86
extern double compute_error_complex(fftw_complex * A, int astride,
87
                                    fftw_complex * B, int bstride, int n);
88
 
89
extern fftw_direction random_dir(void);
90
 
91
/*** the following symbols should be defined in fftw_test.c/rfftw_test.c ***/
92
extern char fftw_prefix[];
93
extern void test_speed_aux(int n, fftw_direction dir, int flags, int specific);
94
extern void test_speed_nd_aux(struct size sz, fftw_direction dir,
95
                              int flags, int specific);
96
extern void test_correctness(int n);
97
extern void testnd_correctness(struct size sz, fftw_direction dir,
98
                               int alt_api, int specific, int force_buf);
99
extern void test_planner(int rank);
100
 
101
extern void test_init(int *argc, char **argv);
102
extern void test_finish(void);
103
extern void enter_paranoid_mode(void);
104
 
105
extern int get_option(int argc, char **argv,
106
                      char *argval, int argval_maxlen);
107
extern int default_get_option(int argc, char **argv,
108
                              char *argval, int argval_maxlen);
109
 
110
#endif                          /* TEST_MAIN_H */