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. */ |
---|
21 | static int total_err = 0, err = 0; |
---|
22 | |
---|
23 | #if 0 |
---|
24 | /* This is handy for print statements. */ |
---|
25 | static 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 { \ |
---|
32 | fflush(stdout); /* Make sure our stdout is synced with stderr. */ \ |
---|
33 | err++; \ |
---|
34 | fprintf(stderr, "Sorry! Unexpected result, %s, line: %d\n", \ |
---|
35 | __FILE__, __LINE__); \ |
---|
36 | return 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 { \ |
---|
43 | fflush(stdout); /* Make sure our stdout is synced with stderr. */ \ |
---|
44 | fprintf(stderr, "Sorry! Unexpected result, %s, line: %d\n", \ |
---|
45 | __FILE__, __LINE__); \ |
---|
46 | return 2; \ |
---|
47 | } while (0) |
---|
48 | |
---|
49 | /* After a set of tests, report the number of errors, and increment |
---|
50 | * total_err. */ |
---|
51 | #define SUMMARIZE_ERR do { \ |
---|
52 | if (err) \ |
---|
53 | { \ |
---|
54 | printf("%d failures\n", err); \ |
---|
55 | total_err += err; \ |
---|
56 | err = 0; \ |
---|
57 | } \ |
---|
58 | else \ |
---|
59 | printf("ok.\n"); \ |
---|
60 | } while (0) |
---|
61 | |
---|
62 | /* If extra memory debugging is not in use (as it usually isn't), |
---|
63 | * define away the nc_exit function, which may be in some tests. */ |
---|
64 | #ifndef EXTRA_MEM_DEBUG |
---|
65 | #define nc_exit() |
---|
66 | #endif |
---|
67 | |
---|
68 | /* This macro prints out our total number of errors, if any, and exits |
---|
69 | * with a 0 if there are not, or a 2 if there were errors. Make will |
---|
70 | * stop if a non-zero value is returned from a test program. */ |
---|
71 | #define FINAL_RESULTS do { \ |
---|
72 | if (total_err) \ |
---|
73 | { \ |
---|
74 | printf("%d errors detected! Sorry!\n", total_err); \ |
---|
75 | return 2; \ |
---|
76 | } \ |
---|
77 | printf("*** Tests successful!\n"); \ |
---|
78 | return 0; \ |
---|
79 | } while (0) |
---|
80 | |
---|
81 | #endif /* _ERR_MACROS_H */ |
---|