24#include <lal/LALVCSInfo.h>
25#include <lal/LALConstants.h>
26#include <lal/XLALError.h>
27#include <lal/AVFactories.h>
28#include <lal/LogPrintf.h>
29#include <lal/UserInput.h>
31#include <lal/VectorMath.h>
34#include <vectorops/VectorMath_internal.h>
37#define frand() (rand() / (REAL4)RAND_MAX)
38#define Relerr(dx,x) (fabsf(x)>0 ? fabsf((dx)/(x)) : fabsf(dx) )
39#define Relerrd(dx,x) (fabs(x)>0 ? fabs((dx)/(x)) : fabs(dx) )
40#define cRelerr(dx,x) (cabsf(x)>0 ? cabsf((dx)/(x)) : fabsf(dx) )
43#define TESTBENCH_VECTORMATH_S2I(name,in) \
45 XLAL_CHECK ( XLALVector##name##REAL4_GEN( xOutRefI4->data, in, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
46 tic = XLALGetCPUTime(); \
47 for (UINT4 l=0; l < Nruns; l ++ ) { \
48 XLAL_CHECK ( XLALVector##name##REAL4( xOutI4->data, in, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
50 toc = XLALGetCPUTime(); \
51 for ( UINT4 i = 0; i < Ntrials; i ++ ) \
53 XLAL_CHECK ( xOutI4->data[i] == xOutRefI4->data[i], XLAL_ETOL, "%s: found element #%u (%i) differs from reference (%i)", #name, i, xOutI4->data[i], xOutRefI4->data[i] ); \
55 XLALPrintInfo ( "%-32s: %4.0f Mops/sec\n", XLALVector##name##REAL4_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6 ); \
59#define TESTBENCH_VECTORMATH_S2s(name,in) \
61 REAL4 sOutRef, sOut; \
62 XLAL_CHECK ( XLALVector##name##REAL4_GEN( &sOutRef, in, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
63 tic = XLALGetCPUTime(); \
64 for (UINT4 l=0; l < Nruns; l ++ ) { \
65 XLAL_CHECK ( XLALVector##name##REAL4( &sOut, in, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
67 toc = XLALGetCPUTime(); \
68 maxErr = fabsf( sOut - sOutRef ); \
69 maxRelerr = Relerr( maxErr, sOutRef ); \
70 XLALPrintInfo ( "%-32s: %4.0f Mops/sec [maxErr = %7.2g (tol=%7.2g), maxRelerr = %7.2g (tol=%7.2g)]\n", \
71 XLALVector##name##REAL4_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6, maxErr, (abstol), maxRelerr, (reltol) ); \
72 XLAL_CHECK ( (maxErr <= (abstol)), XLAL_ETOL, "%s: absolute error (%g) exceeds tolerance (%g)\n", #name "REAL4", maxErr, abstol ); \
73 XLAL_CHECK ( (maxRelerr <= (reltol)), XLAL_ETOL, "%s: relative error (%g) exceeds tolerance (%g)\n", #name "REAL4", maxRelerr, reltol ); \
77#define TESTBENCH_VECTORMATH_S2S(name,in) \
79 XLAL_CHECK ( XLALVector##name##REAL4_GEN( xOutRef, in, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
80 tic = XLALGetCPUTime(); \
81 for (UINT4 l=0; l < Nruns; l ++ ) { \
82 XLAL_CHECK ( XLALVector##name##REAL4( xOut, in, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
84 toc = XLALGetCPUTime(); \
85 maxErr = maxRelerr = 0; \
86 for ( UINT4 i = 0; i < Ntrials; i ++ ) \
88 REAL4 err = fabsf ( xOut[i] - xOutRef[i] ); \
89 REAL4 relerr = Relerr ( err, xOutRef[i] ); \
90 maxErr = fmaxf ( err, maxErr ); \
91 maxRelerr = fmaxf ( relerr, maxRelerr ); \
93 XLALPrintInfo ( "%-32s: %4.0f Mops/sec [maxErr = %7.2g (tol=%7.2g), maxRelerr = %7.2g (tol=%7.2g)]\n", \
94 XLALVector##name##REAL4_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6, maxErr, (abstol), maxRelerr, (reltol) ); \
95 XLAL_CHECK ( (maxErr <= (abstol)), XLAL_ETOL, "%s: absolute error (%g) exceeds tolerance (%g)\n", #name "REAL4", maxErr, abstol ); \
96 XLAL_CHECK ( (maxRelerr <= (reltol)), XLAL_ETOL, "%s: relative error (%g) exceeds tolerance (%g)\n", #name "REAL4", maxRelerr, reltol ); \
100#define TESTBENCH_VECTORMATH_S2SS(name,in) \
102 XLAL_CHECK ( XLALVector##name##REAL4_GEN( xOutRef, xOutRef2, xIn, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
103 tic = XLALGetCPUTime(); \
104 for (UINT4 l=0; l < Nruns; l ++ ) { \
105 XLAL_CHECK ( XLALVector##name##REAL4( xOut, xOut2, xIn, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
107 toc = XLALGetCPUTime(); \
108 maxErr = maxRelerr = 0; \
109 for ( UINT4 i = 0; i < Ntrials; i ++ ) { \
110 REAL4 err1 = fabsf ( xOut[i] - xOutRef[i] ); \
111 REAL4 err2 = fabsf ( xOut2[i] - xOutRef2[i] ); \
112 REAL4 relerr1 = Relerr ( err1, xOutRef[i] ); \
113 REAL4 relerr2 = Relerr ( err2, xOutRef2[i] ); \
114 maxErr = fmaxf ( err1, maxErr ); \
115 maxErr = fmaxf ( err2, maxErr ); \
116 maxRelerr = fmaxf ( relerr1, maxRelerr ); \
117 maxRelerr = fmaxf ( relerr2, maxRelerr ); \
119 XLALPrintInfo ( "%-32s: %4.0f Mops/sec [maxErr = %7.2g (tol=%7.2g), maxRelerr = %7.2g (tol=%7.2g)]\n", \
120 XLALVector##name##REAL4_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6, maxErr, (abstol), maxRelerr, reltol ); \
121 XLAL_CHECK ( (maxErr <= (abstol)), XLAL_ETOL, "%s: absolute error (%g) exceeds tolerance (%g)\n", #name "REAL4", maxErr, abstol ); \
122 XLAL_CHECK ( (maxRelerr <= (reltol)), XLAL_ETOL, "%s: relative error (%g) exceeds tolerance (%g)\n", #name "REAL4", maxRelerr, reltol ); \
126#define TESTBENCH_VECTORMATH_SS2S(name,in1,in2) \
128 XLAL_CHECK ( XLALVector##name##REAL4_GEN( xOutRef, in1, in2, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
129 tic = XLALGetCPUTime(); \
130 for (UINT4 l=0; l < Nruns; l ++ ) { \
131 XLAL_CHECK ( XLALVector##name##REAL4( xOut, in1, in2, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
133 toc = XLALGetCPUTime(); \
134 maxErr = maxRelerr = 0; \
135 for ( UINT4 i = 0; i < Ntrials; i ++ ) \
137 REAL4 err = fabsf ( xOut[i] - xOutRef[i] ); \
138 REAL4 relerr = Relerr ( err, xOutRef[i] ); \
139 maxErr = fmaxf ( err, maxErr ); \
140 maxRelerr = fmaxf ( relerr, maxRelerr ); \
142 XLALPrintInfo ( "%-32s: %4.0f Mops/sec [maxErr = %7.2g (tol=%7.2g), maxRelerr = %7.2g (tol=%7.2g)]\n", \
143 XLALVector##name##REAL4_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6, maxErr, (abstol), maxRelerr, (reltol) ); \
144 XLAL_CHECK ( (maxErr <= (abstol)), XLAL_ETOL, "%s: absolute error (%g) exceeds tolerance (%g)\n", #name "REAL4", maxErr, abstol ); \
145 XLAL_CHECK ( (maxRelerr <= (reltol)), XLAL_ETOL, "%s: relative error (%g) exceeds tolerance (%g)\n", #name "REAL4", maxRelerr, reltol ); \
149#define TESTBENCH_VECTORMATH_SSS2S(name,in1,in2,in3) \
151 XLAL_CHECK ( XLALVector##name##REAL4_GEN( xOutRef, in1, in2, in3, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
152 tic = XLALGetCPUTime(); \
153 for (UINT4 l=0; l < Nruns; l ++ ) { \
154 XLAL_CHECK ( XLALVector##name##REAL4( xOut, in1, in2, in3, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
156 toc = XLALGetCPUTime(); \
157 maxErr = maxRelerr = 0; \
158 for ( UINT4 i = 0; i < Ntrials; i ++ ) \
160 REAL4 err = fabsf ( xOut[i] - xOutRef[i] ); \
161 REAL4 relerr = Relerr ( err, xOutRef[i] ); \
162 maxErr = fmaxf ( err, maxErr ); \
163 maxRelerr = fmaxf ( relerr, maxRelerr ); \
165 XLALPrintInfo ( "%-32s: %4.0f Mops/sec [maxErr = %7.2g (tol=%7.2g), maxRelerr = %7.2g (tol=%7.2g)]\n", \
166 XLALVector##name##REAL4_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6, maxErr, (abstol), maxRelerr, (reltol) ); \
167 XLAL_CHECK ( (maxErr <= (abstol)), XLAL_ETOL, "%s: absolute error (%g) exceeds tolerance (%g)\n", #name "REAL4", maxErr, abstol ); \
168 XLAL_CHECK ( (maxRelerr <= (reltol)), XLAL_ETOL, "%s: relative error (%g) exceeds tolerance (%g)\n", #name "REAL4", maxRelerr, reltol ); \
172#define TESTBENCH_VECTORMATH_SS2uU(name,in1,in2) \
174 UINT4 xCount = 0, xCountRef = 0; \
175 XLAL_CHECK ( XLALVector##name##REAL4_GEN( &xCountRef, xOutRefU4->data, in1, in2, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
176 tic = XLALGetCPUTime(); \
177 for (UINT4 l=0; l < Nruns; l ++ ) { \
178 XLAL_CHECK ( XLALVector##name##REAL4( &xCount, xOutU4->data, in1, in2, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
179 XLAL_CHECK ( xCount == xCountRef, XLAL_ETOL, "%s: count of found elements (%u) differs from reference (%u)", #name, xCount, xCountRef ); \
181 toc = XLALGetCPUTime(); \
182 for ( UINT4 i = 0; i < xCount; i ++ ) \
184 XLAL_CHECK ( xOutU4->data[i] == xOutRefU4->data[i], XLAL_ETOL, "%s: found element #%u (%u) differs from reference (%u)", #name, i, xOutU4->data[i], xOutRefU4->data[i] ); \
186 XLALPrintInfo ( "%-32s: %4.0f Mops/sec\n", XLALVector##name##REAL4_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6 ); \
190#define TESTBENCH_VECTORMATH_D2d(name,in) \
192 REAL8 sOutRef, sOut; \
193 XLAL_CHECK ( XLALVector##name##REAL8_GEN( &sOutRef, in, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
194 tic = XLALGetCPUTime(); \
195 for (UINT4 l=0; l < Nruns; l ++ ) { \
196 XLAL_CHECK ( XLALVector##name##REAL8( &sOut, in, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
198 toc = XLALGetCPUTime(); \
199 maxErr = fabs( sOut - sOutRef ); \
200 maxRelerr = Relerrd( maxErr, sOutRef ); \
201 XLALPrintInfo ( "%-32s: %4.0f Mops/sec [maxErr = %7.2g (tol=%7.2g), maxRelerr = %7.2g (tol=%7.2g)]\n", \
202 XLALVector##name##REAL8_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6, maxErr, (abstol), maxRelerr, (reltol) ); \
203 XLAL_CHECK ( (maxErr <= (abstol)), XLAL_ETOL, "%s: absolute error (%g) exceeds tolerance (%g)\n", #name "REAL8", maxErr, abstol ); \
204 XLAL_CHECK ( (maxRelerr <= (reltol)), XLAL_ETOL, "%s: relative error (%g) exceeds tolerance (%g)\n", #name "REAL8", maxRelerr, reltol ); \
208#define TESTBENCH_VECTORMATH_DD2D(name,in1,in2) \
210 XLAL_CHECK ( XLALVector##name##REAL8_GEN( xOutRefD, in1, in2, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
211 tic = XLALGetCPUTime(); \
212 for (UINT4 l=0; l < Nruns; l ++ ) { \
213 XLAL_CHECK ( XLALVector##name##REAL8( xOutD, in1, in2, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
215 toc = XLALGetCPUTime(); \
216 maxErr = maxRelerr = 0; \
217 for ( UINT4 i = 0; i < Ntrials; i ++ ) \
219 REAL8 err = fabs ( xOutD[i] - xOutRefD[i] ); \
220 REAL8 relerr = Relerrd ( err, xOutRefD[i] ); \
221 maxErr = fmax ( err, maxErr ); \
222 maxRelerr = fmax ( relerr, maxRelerr ); \
224 XLALPrintInfo ( "%-32s: %4.0f Mops/sec [maxErr = %7.2g (tol=%7.2g), maxRelerr = %7.2g (tol=%7.2g)]\n", \
225 XLALVector##name##REAL8_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6, maxErr, (abstol), maxRelerr, (reltol) ); \
226 XLAL_CHECK ( (maxErr <= (abstol)), XLAL_ETOL, "%s: absolute error (%g) exceeds tolerance (%g)\n", #name "REAL8", maxErr, abstol ); \
227 XLAL_CHECK ( (maxRelerr <= (reltol)), XLAL_ETOL, "%s: relative error (%g) exceeds tolerance (%g)\n", #name "REAL8", maxRelerr, reltol ); \
231#define TESTBENCH_VECTORMATH_DDD2D(name,in1,in2,in3) \
233 XLAL_CHECK ( XLALVector##name##REAL8_GEN( xOutRefD, in1, in2, in3, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
234 tic = XLALGetCPUTime(); \
235 for (UINT4 l=0; l < Nruns; l ++ ) { \
236 XLAL_CHECK ( XLALVector##name##REAL8( xOutD, in1, in2, in3, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
238 toc = XLALGetCPUTime(); \
239 maxErr = maxRelerr = 0; \
240 for ( UINT4 i = 0; i < Ntrials; i ++ ) \
242 REAL8 err = fabs ( xOutD[i] - xOutRefD[i] ); \
243 REAL8 relerr = Relerrd ( err, xOutRefD[i] ); \
244 maxErr = fmax ( err, maxErr ); \
245 maxRelerr = fmax ( relerr, maxRelerr ); \
247 XLALPrintInfo ( "%-32s: %4.0f Mops/sec [maxErr = %7.2g (tol=%7.2g), maxRelerr = %7.2g (tol=%7.2g)]\n", \
248 XLALVector##name##REAL8_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6, maxErr, (abstol), maxRelerr, (reltol) ); \
249 XLAL_CHECK ( (maxErr <= (abstol)), XLAL_ETOL, "%s: absolute error (%g) exceeds tolerance (%g)\n", #name "REAL8", maxErr, abstol ); \
250 XLAL_CHECK ( (maxRelerr <= (reltol)), XLAL_ETOL, "%s: relative error (%g) exceeds tolerance (%g)\n", #name "REAL8", maxRelerr, reltol ); \
254#define TESTBENCH_VECTORMATH_CC2C(name,in1,in2) \
256 XLAL_CHECK ( XLALVector##name##COMPLEX8_GEN( xOutRefC, in1, in2, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
257 tic = XLALGetCPUTime(); \
258 for (UINT4 l=0; l < Nruns; l ++ ) { \
259 XLAL_CHECK ( XLALVector##name##COMPLEX8( xOutC, in1, in2, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
261 toc = XLALGetCPUTime(); \
262 maxErr = maxRelerr = 0; \
263 for ( UINT4 i = 0; i < Ntrials; i ++ ) \
265 REAL4 err = cabsf ( xOutC[i] - xOutRefC[i] ); \
266 REAL4 relerr = cRelerr ( err, xOutRefC[i] ); \
267 maxErr = fmaxf ( err, maxErr ); \
268 maxRelerr = fmaxf ( relerr, maxRelerr ); \
270 XLALPrintInfo ( "%-32s: %4.0f Mops/sec [maxErr = %7.2g (tol=%7.2g), maxRelerr = %7.2g (tol=%7.2g)]\n", \
271 XLALVector##name##COMPLEX8_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6, maxErr, (abstol), maxRelerr, (reltol) ); \
272 XLAL_CHECK ( (maxErr <= (abstol)), XLAL_ETOL, "%s: absolute error (%g) exceeds tolerance (%g)\n", #name "COMPLEX8", maxErr, abstol ); \
273 XLAL_CHECK ( (maxRelerr <= (reltol)), XLAL_ETOL, "%s: relative error (%g) exceeds tolerance (%g)\n", #name "COMPLEX8", maxRelerr, reltol ); \
277#define TESTBENCH_VECTORMATH_CCC2C(name,in1,in2,in3) \
279 XLAL_CHECK ( XLALVector##name##COMPLEX8_GEN( xOutRefC, in1, in2, in3, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
280 tic = XLALGetCPUTime(); \
281 for (UINT4 l=0; l < Nruns; l ++ ) { \
282 XLAL_CHECK ( XLALVector##name##COMPLEX8( xOutC, in1, in2, in3, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
284 toc = XLALGetCPUTime(); \
285 maxErr = maxRelerr = 0; \
286 for ( UINT4 i = 0; i < Ntrials; i ++ ) \
288 REAL4 err = cabsf ( xOutC[i] - xOutRefC[i] ); \
289 REAL4 relerr = cRelerr ( err, xOutRefC[i] ); \
290 maxErr = fmaxf ( err, maxErr ); \
291 maxRelerr = fmaxf ( relerr, maxRelerr ); \
293 XLALPrintInfo ( "%-32s: %4.0f Mops/sec [maxErr = %7.2g (tol=%7.2g), maxRelerr = %7.2g (tol=%7.2g)]\n", \
294 XLALVector##name##COMPLEX8_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6, maxErr, (abstol), maxRelerr, (reltol) ); \
295 XLAL_CHECK ( (maxErr <= (abstol)), XLAL_ETOL, "%s: absolute error (%g) exceeds tolerance (%g)\n", #name "COMPLEX8", maxErr, abstol ); \
296 XLAL_CHECK ( (maxRelerr <= (reltol)), XLAL_ETOL, "%s: relative error (%g) exceeds tolerance (%g)\n", #name "COMPLEX8", maxRelerr, reltol ); \
300#define TESTBENCH_VECTORMATH_D2D(name,in) \
302 XLAL_CHECK ( XLALVector##name##REAL8_GEN( xOutRefD, in, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
303 tic = XLALGetCPUTime(); \
304 for (UINT4 l=0; l < Nruns; l ++ ) { \
305 XLAL_CHECK ( XLALVector##name##REAL8( xOutD, in, Ntrials ) == XLAL_SUCCESS, XLAL_EFUNC ); \
307 toc = XLALGetCPUTime(); \
308 maxErr = maxRelerr = 0; \
309 for ( UINT4 i = 0; i < Ntrials; i ++ ) \
311 REAL8 err = fabs ( xOut[i] - xOutRef[i] ); \
312 REAL8 relerr = Relerrd ( err, xOutRef[i] ); \
313 maxErr = fmax ( err, maxErr ); \
314 maxRelerr = fmax ( relerr, maxRelerr ); \
316 XLALPrintInfo ( "%-32s: %4.0f Mops/sec [maxErr = %7.2g (tol=%7.2g), maxRelerr = %7.2g (tol=%7.2g)]\n", \
317 XLALVector##name##REAL8_name, (REAL8)Ntrials * Nruns / (toc - tic)/1e6, maxErr, (abstol), maxRelerr, (reltol) ); \
318 XLAL_CHECK ( (maxErr <= (abstol)), XLAL_ETOL, "%s: absolute error (%g) exceeds tolerance (%g)\n", #name "REAL8", maxErr, abstol ); \
319 XLAL_CHECK ( (maxRelerr <= (reltol)), XLAL_ETOL, "%s: relative error (%g) exceeds tolerance (%g)\n", #name "REAL8", maxRelerr, reltol ); \
344 XLALRegisterUvarMember( Nruns,
INT4,
'r', OPTIONAL,
"Number of repeated timing 'runs' to average over (=improves variance)" );
345 XLALRegisterUvarMember( inAlign,
INT4,
'a', OPTIONAL,
"Alignment of input vectors; default is sizeof(void*), i.e. no particular alignment" );
346 XLALRegisterUvarMember( outAlign,
INT4,
'b', OPTIONAL,
"Alignment of output vectors; default is sizeof(void*), i.e. no particular alignment" );
358 UINT4 Ntrials = 1000000 + 7;
412 REAL4 maxErr = 0, maxRelerr = 0;
413 REAL4 abstol, reltol;
415 for (
UINT4 i = 0; i < Ntrials; i ++ ) {
416 xIn[i] = 2000 * (
frand() - 0.5 );
419 abstol = 2e-7, reltol = 1e-5;
426 XLALPrintInfo (
"Testing scalar max for x in [-1000, 1000]\n");
430 XLALPrintInfo (
"Testing sin(x), cos(x) for x in [-1000, 1000]\n");
445 for (
UINT4 i = 0; i < Ntrials; i ++ ) {
446 xIn[i] = 20 * (
frand() - 0.5 );
449 abstol = 4e-3, reltol = 3e-7;
454 for (
UINT4 i = 0; i < Ntrials; i ++ ) {
455 xIn[i] = 10000.0f *
frand() + 1e-6;
457 abstol = 2e-6, reltol = 4e-7;
462 for (
UINT4 i = 0; i < Ntrials; i ++ ) {
463 xIn[i] = -10000.0f + 20000.0f *
frand() + 1e-6;
464 xIn2[i] = -10000.0f + 20000.0f *
frand() + 1e-6;
465 xInD[i] = -100000.0 + 200000.0 *
frand() + 1e-6;
466 xIn2D[i]= -100000.0 + 200000.0 *
frand() + 1e-6;
467 xInC[i] = -10000.0f + 20000.0f *
frand() + 1e-6 + ( -10000.0f + 20000.0f *
frand() + 1e-6 ) * _Complex_I;
468 xIn2C[i]= -10000.0f + 20000.0f *
frand() + 1e-6 + ( -10000.0f + 20000.0f *
frand() + 1e-6 ) * _Complex_I;
470 abstol = 2e-7, reltol = 2e-7;
472 XLALPrintInfo (
"\nTesting round(x) for x in (-10000, 10000]\n");
476 XLALPrintInfo (
"\nTesting add,multiply,shift,scale(x,y) for x,y in (-10000, 10000]\n");
503 for (
UINT4 i = 0; i < Ntrials; i ++ ) {
504 xIn[i] = -10000.0f + 20000.0f *
frand() + 1e-6;
505 xIn2[i] = -10000.0f + 20000.0f *
frand() + 1e-6;
508 XLALPrintInfo (
"\nTesting find for x,y in (-10000, 10000]\n");
void LALCheckMemoryLeaks(void)
const LALVCSInfoList lalVCSInfoList
NULL-terminated list of VCS and build information for LAL and its dependencies
int main(int argc, char *argv[])
#define TESTBENCH_VECTORMATH_CCC2C(name, in1, in2, in3)
#define TESTBENCH_VECTORMATH_D2D(name, in)
#define TESTBENCH_VECTORMATH_S2s(name, in)
#define TESTBENCH_VECTORMATH_SS2uU(name, in1, in2)
#define TESTBENCH_VECTORMATH_S2S(name, in)
#define TESTBENCH_VECTORMATH_S2I(name, in)
#define TESTBENCH_VECTORMATH_DD2D(name, in1, in2)
#define TESTBENCH_VECTORMATH_SSS2S(name, in1, in2, in3)
#define TESTBENCH_VECTORMATH_S2SS(name, in)
#define TESTBENCH_VECTORMATH_D2d(name, in)
#define TESTBENCH_VECTORMATH_SS2S(name, in1, in2)
#define TESTBENCH_VECTORMATH_DDD2D(name, in1, in2, in3)
#define TESTBENCH_VECTORMATH_CC2C(name, in1, in2)
int XLALPrintInfo(const char *fmt,...)
unsigned char BOOLEAN
Boolean logical type, see Headers LAL(Atomic)Datatypes.h for more details.
double REAL8
Double precision real floating-point number (8 bytes).
#define XLAL_INIT_DECL(var,...)
C99 MACRO to declare and zero-initialize a variable, use as "type XLAL_INIT_DECL(var);".
uint32_t UINT4
Four-byte unsigned integer.
float complex COMPLEX8
Single-precision floating-point complex number (8 bytes total)
int32_t INT4
Four-byte signed integer.
float REAL4
Single precision real floating-point number (4 bytes).
void XLALDestroyUINT4Vector(UINT4Vector *vector)
INT4Vector * XLALCreateINT4Vector(UINT4 length)
void XLALDestroyINT4Vector(INT4Vector *vector)
UINT4Vector * XLALCreateUINT4Vector(UINT4 length)
void XLALDestroyREAL4VectorAligned(REAL4VectorAligned *in)
Free a REAL4VectorAligned struct.
REAL8VectorAligned * XLALCreateREAL8VectorAligned(const UINT4 length, const UINT4 align)
Create a new REAL8VectorAligned struct with length length and alignment align.
void XLALDestroyREAL8VectorAligned(REAL8VectorAligned *in)
Free a REAL8VectorAligned struct.
REAL4VectorAligned * XLALCreateREAL4VectorAligned(const UINT4 length, const UINT4 align)
Create a new REAL4VectorAligned struct with length length and alignment align.
COMPLEX8VectorAligned * XLALCreateCOMPLEX8VectorAligned(const UINT4 length, const UINT4 align)
Create a new COMPLEX8VectorAligned struct with length length and alignment align.
void XLALDestroyCOMPLEX8VectorAligned(COMPLEX8VectorAligned *in)
Free a COMPLEX8VectorAligned struct.
#define XLAL_CHECK(assertion,...)
Macro to test an assertion and invoke a failure if it is not true in a function that returns an integ...
@ XLAL_SUCCESS
Success return value (not an error number)
@ XLAL_EFUNC
Internal function call failed bit: "or" this with existing error number.
@ XLAL_EDOM
Input domain error.
A special COMPLEX8Vector with n-byte aligned memory data array.
COMPLEX8 * data
start of aligned memory block
Vector of type INT4, see DATATYPE-Vector types for more details.
A special REAL4Vector with n-byte aligned memory data array.
REAL4 * data
start of aligned memory block
A special REAL8Vector with n-byte aligned memory data array.
REAL8 * data
start of aligned memory block
Vector of type UINT4, see DATATYPE-Vector types for more details.