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