Add translation for plog (using TRANSLATE-WITH-FLONUM-OP)
[maxima.git] / share / numeric / rtest_rfft.mac
blob82bffee3bd91aa95c815bb5ab8bef1f56350b034
1 /* Test real_fft routines */
3 closeto(e,tol):=block([numer:true,abse],abse:abs(e),if(abse<=tol) then true else abse);
4 closeto(e,tol):=block([numer:true,abse],abse:abs(e),if(abse<=tol) then true else abse);
6 (compare_real_fft(tol, x) :=
7   block([rft: real_fft(x),
8          ft: fft(x),
9          maperror: false,
10          maxdiff],
11     maxdiff: lreduce('max, abs(rft - ft)),
12     closeto(maxdiff, tol)),
13  0);
16 (compare_inverse_real_fft(tol, x) :=
17   block([rft: inverse_real_fft(real_fft(x)),
18          maxdiff],
19     maxdiff: lreduce('max, abs(x - rft)),
20     closeto(maxdiff, tol)),
21  0);
25 /* verify that real_fft does not modify its argument */
27 (foo0 : [1, 2, 4, 8], 0);
30 (kill (foo), foo : foo0, real_fft (foo), foo);
31 ''foo0;
33 (foo : make_array (any, 4), fillarray (foo, foo0), real_fft (foo), listarray (foo));
34 ''foo0;
36 (kill (foo), array (foo, 3), fillarray (foo, foo0), real_fft (foo), listarray (foo));
37 ''foo0;
39 /* Verify basic computation */
41 real_fft([]);
42 [];
44 real_fft([123]);
45 [123.0];
47 real_fft([1,2]);
48 [1.5, -0.5];
50 errcatch(real_fft([1,2,3]));
51 [];
53 compare_real_fft(0, makelist(k, k, 1, 4));
54 true;
56 compare_real_fft(1.2413e-16, makelist(k, k, 1, 16));
57 true;
59 compare_real_fft(9.8712e-14, makelist(k, k, 1, 1024));
60 true;
62 compare_real_fft(3.8703e-13, makelist(k, k, 1, 4096));
63 true;
65 inverse_real_fft([]);
66 [];
68 inverse_real_fft([123]);
69 [123.0];
71 inverse_real_fft([1.5 ,-0.5]);
72 [1.0, 2.0];
74 compare_inverse_real_fft(0, makelist(k, k, 1, 4));
75 true;
77 compare_inverse_real_fft(1.7764e-15, makelist(k, k, 1, 16));
78 true;
80 compare_inverse_real_fft(3.9791e-13, makelist(k, k, 1, 1024));
81 true;
83 compare_inverse_real_fft(2.2738e-12, makelist(k, k, 1, 4096));
84 true;
86 /* verify that bf_real_fft does not modify its argument */
88 (foo0 : [1, 2, 4, 8], 0);
91 (kill (foo), foo : foo0, bf_real_fft (foo), foo);
92 ''foo0;
94 (foo : make_array (any, 4), fillarray (foo, foo0), bf_real_fft (foo), listarray (foo));
95 ''foo0;
97 (kill (foo), array (foo, 3), fillarray (foo, foo0), bf_real_fft (foo), listarray (foo));
98 ''foo0;
100 /* Verify basic computation */
102 bf_real_fft([]);
105 bf_real_fft([123]);
106 [123b0];
108 bf_real_fft([1,2]);
109 [1.5b0, -0.5b0];
111 errcatch(bf_real_fft([1,2,3]));
114 (compare_bf_real_fft(tol, x) :=
115   block([rft: bf_real_fft(x),
116          ft: bf_fft(x),
117          maperror: false,
118          maxdiff],
119     maxdiff: lreduce('max, abs(rft - ft)),
120     closeto(maxdiff, tol)),
121  0);
124 (compare_bf_inverse_real_fft(tol, x) :=
125   block([rft: bf_inverse_real_fft(bf_real_fft(x)),
126          maxdiff],
127     maxdiff: lreduce('max, abs(x - rft)),
128     closeto(maxdiff, tol)),
129  0);
132 compare_bf_real_fft(0, makelist(k, k, 1, 4));
133 true;
135 compare_bf_real_fft(2.7756b-17, makelist(k, k, 1, 16));
136 true;
138 compare_bf_real_fft(5.7034b-15, makelist(k, k, 1, 1024));
139 true;
141 compare_bf_real_fft(2.4145b-14, makelist(k, k, 1, 4096));
142 true;
144 bf_inverse_real_fft([]);
147 bf_inverse_real_fft([1.5 ,-0.5]);
148 [1b0, 2b0];
150 compare_bf_inverse_real_fft(0, makelist(k, k, 1, 4));
151 true;
153 compare_bf_inverse_real_fft(3.3088b-24, makelist(k, k, 1, 16));
154 true;
156 compare_bf_inverse_real_fft(8.4704b-22, makelist(k, k, 1, 1024));
157 true;
159 compare_bf_inverse_real_fft(5.0822b-21, makelist(k, k, 1, 4096));
160 true;
162 (errcatch(real_fft([1,2,3])), error);
163 ["real_fft: size of input must be a power of 2, not ~M",3];
165 (errcatch(inverse_real_fft([1,2,3,4])), error);
166 ["inverse_real_fft: input length must be one more than a power of two, not ~M",4];
168 (errcatch(bf_real_fft([1,2,3])), error);
169 ["bf_fft: size of input must be a power of 2, not ~M",3];
171 (errcatch(bf_inverse_real_fft([1,2,3,4])), error);
172 ["bf_inverse_real_fft: input length must be one more than a power of two, not ~M",4];