1/* This is part of the netCDF package.
2   Copyright 2005 University Corporation for Atmospheric Research/Unidata
3   See COPYRIGHT file for conditions of use.
4
5   Common includes, defines, etc., for test code in the libsrc4 and
6   nc_test4 directories.
7*/
8
9#ifndef _ERR_MACROS_H
10#define _ERR_MACROS_H
11
12#include <config.h>
13#include <assert.h>
14#include <stdio.h>
15#include <string.h>
16#include <stdlib.h>
17
18/* Err is used to keep track of errors within each set of tests,
19 * total_err is the number of errors in the entire test program, which
20 * generally cosists of several sets of tests. */
21static int total_err = 0, err = 0;
22
23#if 0
24/* This is handy for print statements. */
25static char *format_name[] = {"", "classic", "64-bit offset", "netCDF-4",
26       "netCDF-4 classic model"};
27#endif
28
29/* This macro prints an error message with line number and name of
30 * test program. */
31#define ERR do { \
32fflush(stdout); /* Make sure our stdout is synced with stderr. */ \
33err++; \
34fprintf(stderr, "Sorry! Unexpected result, %s, line: %d\n", \
35 __FILE____LINE__);     \
36return 2;                                                   \
37} while (0)
38
39/* This macro prints an error message with line number and name of
40 * test program, and then exits the program. */
41
42#define ERR_RET do { \
43fflush(stdout); /* Make sure our stdout is synced with stderr. */ \
44fprintf(stderr, "Sorry! Unexpected result, %s, line: %d\n", \
45 __FILE____LINE__);     \
46return 2;                                                   \
47} while (0)
48
49#define ERR_GOTO do { \
50fflush(stdout); /* Make sure our stdout is synced with stderr. */ \
51fprintf(stderr, "Sorry! Unexpected result, %s, line: %d\n", \
52 __FILE____LINE__);     \
53goto error;                                                 \
54} while (0)
55
56int ERR_report(int stat, const char* file, int line)
57{
58    fflush(stdout);
59    fprintf(stderr, "Sorry! Unexpected result, %s, line: %d; status=%d\n",
60 file,line,stat);
61    fflush(stdout);
62    return 1;
63}
64
65#define ERRSTAT(stat) {err+=ERR_report(stat,__FILE__,__LINE__);}
66
67
68/* After a set of tests, report the number of errors, and increment
69 * total_err. */
70#define SUMMARIZE_ERR do { \
71   if (err) \
72   { \
73      printf("%d failures\n", err); \
74      total_err += err; \
75      err = 0; \
76   } \
77   else \
78      printf("ok.\n"); \
79} while (0)
80
81/* If extra memory debugging is not in use (as it usually isn't),
82 * define away the nc_exit function, which may be in some tests. */
83#ifndef EXTRA_MEM_DEBUG
84#define nc_exit()
85#endif
86
87/* This macro prints out our total number of errors, if any, and exits
88 * with a 0 if there are not, or a 2 if there were errors. Make will
89 * stop if a non-zero value is returned from a test program. */
90#define FINAL_RESULTS do { \
91   if (total_err) \
92   { \
93      printf("%d errors detected! Sorry!\n", total_err); \
94      return 2; \
95   } \
96   printf("*** Tests successful!\n"); \
97   return 0; \
98} while (0)
99
100#endif /* _ERR_MACROS_H */


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed