LAL  7.5.0.1-89842e6
VectorSequenceFactoriesTest.c
Go to the documentation of this file.
1 /**
2  * \file
3  * \ingroup SeqFactories_h
4  *
5  * \brief A program to test create/destroy vector sequence routines.
6  *
7  * ### Usage ###
8  *
9  * \code
10  * VectorSequenceFactoriesTest [options]
11  * Options:
12  * -h print help
13  * -q quiet: run silently
14  * -v verbose: print extra information
15  * -d level set lalDebugLevel to level
16  * \endcode
17  *
18  * ### Exit codes ###
19  *
20  * <table><tr><th>Code</th><th>Explanation</th></tr>
21  * <tr><td>0</td><td>Success, normal exit.</td></tr>
22  * <tr><td>1</td><td>Subroutine failed.</td></tr>
23  * </table>
24  *
25  * ### Algorithm ###
26  *
27  *
28  * ### Uses ###
29  *
30  * \code
31  * lalDebugLevel
32  * <datatype>CreateVectorSequence()
33  * <datatype>DestroyVectorSequence()
34  * \endcode
35  *
36  * ### Notes ###
37  *
38  */
39 
40 /** \cond DONT_DOXYGEN */
41 #include <config.h>
42 
43 #include <stdlib.h>
44 #include <stdio.h>
45 #include <string.h>
46 
47 #include <lal/LALStdlib.h>
48 #include <lal/LALgetopt.h>
49 #include <lal/SeqFactories.h>
50 #include <lal/LALString.h>
51 
52 #define CODES_(x) #x
53 #define CODES(x) CODES_(x)
54 
55 int verbose = 0;
56 
57 static void
58 Usage (const char *program, int exitflag);
59 
60 static void
61 ParseOptions (int argc, char *argv[]);
62 
63 static void
64 TestStatus (LALStatus *status, const char *expectedCodes, int exitCode);
65 
66 #define TYPECODE Z
67 #define TYPE COMPLEX16
68 #include "VectorSequenceFactoriesTest_source.c"
69 #undef TYPECODE
70 #undef TYPE
71 
72 #define TYPECODE C
73 #define TYPE COMPLEX8
74 #include "VectorSequenceFactoriesTest_source.c"
75 #undef TYPECODE
76 #undef TYPE
77 
78 #define TYPECODE D
79 #define TYPE REAL8
80 #include "VectorSequenceFactoriesTest_source.c"
81 #undef TYPECODE
82 #undef TYPE
83 
84 #define TYPECODE S
85 #define TYPE REAL4
86 #include "VectorSequenceFactoriesTest_source.c"
87 #undef TYPECODE
88 #undef TYPE
89 
90 #define TYPECODE I2
91 #define TYPE INT2
92 #include "VectorSequenceFactoriesTest_source.c"
93 #undef TYPECODE
94 #undef TYPE
95 
96 #define TYPECODE I4
97 #define TYPE INT4
98 #include "VectorSequenceFactoriesTest_source.c"
99 #undef TYPECODE
100 #undef TYPE
101 
102 #define TYPECODE I8
103 #define TYPE INT8
104 #include "VectorSequenceFactoriesTest_source.c"
105 #undef TYPECODE
106 #undef TYPE
107 
108 #define TYPECODE U2
109 #define TYPE UINT2
110 #include "VectorSequenceFactoriesTest_source.c"
111 #undef TYPECODE
112 #undef TYPE
113 
114 #define TYPECODE U4
115 #define TYPE UINT4
116 #include "VectorSequenceFactoriesTest_source.c"
117 #undef TYPECODE
118 #undef TYPE
119 
120 #define TYPECODE U8
121 #define TYPE UINT8
122 #include "VectorSequenceFactoriesTest_source.c"
123 #undef TYPECODE
124 #undef TYPE
125 
126 #define TYPECODE CHAR
127 #define TYPE CHAR
128 #include "VectorSequenceFactoriesTest_source.c"
129 #undef TYPECODE
130 #undef TYPE
131 
132 #define TYPE REAL4
133 #include "VectorSequenceFactoriesTest_source.c"
134 #undef TYPE
135 
136 int main( int argc, char *argv[] )
137 {
138 
139  ParseOptions( argc, argv );
140 
141  VectorSequenceFactoriesTest();
142  ZVectorSequenceFactoriesTest();
143  CVectorSequenceFactoriesTest();
144  DVectorSequenceFactoriesTest();
145  SVectorSequenceFactoriesTest();
146  I2VectorSequenceFactoriesTest();
147  I4VectorSequenceFactoriesTest();
148  I8VectorSequenceFactoriesTest();
149  U2VectorSequenceFactoriesTest();
150  U4VectorSequenceFactoriesTest();
151  U8VectorSequenceFactoriesTest();
152  CHARVectorSequenceFactoriesTest();
153 
154  return 0;
155 }
156 
157 
158 /*
159  * TestStatus ()
160  *
161  * Routine to check that the status code status->statusCode agrees with one of
162  * the codes specified in the space-delimited string ignored; if not,
163  * exit to the system with code exitcode.
164  *
165  */
166 static void
167 TestStatus (LALStatus *status, const char *ignored, int exitcode)
168 {
169  char str[64];
170  char *tok;
171 
172  if (verbose)
173  {
175  }
176 
177  if (XLALStringCopy(str, ignored, sizeof(str)))
178  {
179  if ((tok = strtok (str, " ")))
180  {
181  do
182  {
183  if (status->statusCode == atoi (tok))
184  {
185  return;
186  }
187  }
188  while ((tok = strtok (NULL, " ")));
189  }
190  else
191  {
192  if (status->statusCode == atoi (str))
193  {
194  return;
195  }
196  }
197  }
198 
199  fprintf (stderr, "\nExiting to system with code %d\n", exitcode);
200  exit (exitcode);
201 }
202 
203 /*
204  * Usage ()
205  *
206  * Prints a usage message for program program and exits with code exitcode.
207  *
208  */
209 static void
210 Usage (const char *program, int exitcode)
211 {
212  fprintf (stderr, "Usage: %s [options]\n", program);
213  fprintf (stderr, "Options:\n");
214  fprintf (stderr, " -h print this message\n");
215  fprintf (stderr, " -q quiet: run silently\n");
216  fprintf (stderr, " -v verbose: print extra information\n");
217  fprintf (stderr, " -d level set lalDebugLevel to level\n");
218  exit (exitcode);
219 }
220 
221 
222 /*
223  * ParseOptions ()
224  *
225  * Parses the argc - 1 option strings in argv[].
226  *
227  */
228 static void
229 ParseOptions (int argc, char *argv[])
230 {
231  FILE *fp;
232 
233  while (1)
234  {
235  int c = -1;
236 
237  c = LALgetopt (argc, argv, "hqvd:");
238  if (c == -1)
239  {
240  break;
241  }
242 
243  switch (c)
244  {
245  case 'd': /* set debug level */
246  break;
247 
248  case 'v': /* verbose */
249  ++verbose;
250  break;
251 
252  case 'q': /* quiet: run silently (ignore error messages) */
253  fp = freopen ("/dev/null", "w", stderr);
254  if (fp == NULL)
255  {
256  fprintf(stderr, "Error: Unable to open /dev/null\n");
257  exit(1);
258  }
259  fp = freopen ("/dev/null", "w", stdout);
260  if (fp == NULL)
261  {
262  fprintf(stderr, "Error: Unable to open /dev/null\n");
263  exit(1);
264  }
265  break;
266 
267  case 'h':
268  Usage (argv[0], 0);
269  break;
270 
271  default:
272  Usage (argv[0], 1);
273  }
274 
275  }
276 
277  if (LALoptind < argc)
278  {
279  Usage (argv[0], 1);
280  }
281 
282  return;
283 }
284 
285 /** \endcond */
const char * program
void REPORTSTATUS(LALStatus *status)
Definition: LALError.c:322
int LALgetopt(int argc, char *const *argv, const char *optstring)
Definition: LALgetopt.c:172
int LALoptind
Definition: LALgetopt.c:79
#define fprintf
static void Usage(const char *program, int exitcode)
Definition: XLALChisqTest.c:70
static void ParseOptions(int argc, char *argv[])
Definition: XLALChisqTest.c:88
int main(int argc, char *argv[])
Definition: cache.c:25
size_t XLALStringCopy(char *dst, const char *src, size_t size)
Copy sources string src to destination string dst.
Definition: LALString.c:104
LAL status structure, see The LALStatus structure for more details.
Definition: LALDatatypes.h:947
int verbose
Definition: tconvert.c:103
FILE * fp
Definition: tconvert.c:105