annotate extern/libdt/dt.h @ 413:222045c513ec

misc: fix some warnings
author David Demelier <markand@malikania.fr>
date Fri, 07 Oct 2022 15:25:32 +0200
parents 1bf7d6669f0a
children b0579ae033ed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
410
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * dt.h -- minimalist C testing library
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2022 David Demelier <markand@malikania.fr>
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef DT_H
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define DT_H
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <inttypes.h>
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <math.h>
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <stdint.h>
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <stdio.h>
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include <string.h>
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
27
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 static size_t dt_ntests;
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 static size_t dt_nchecks;
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 static size_t dt_nfailures;
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #ifndef DT_DOUBLE_TOLERANCE
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #define DT_DOUBLE_TOLERANCE 0.001
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 #endif
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 #define DT_ASSERT(x) \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 do { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 ++ dt_nchecks; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 if (!(x)) { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 ++ dt_nfailures; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 printf("%s:%d: assertion '" #x "' failed\n", __FILE__, __LINE__); \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 } \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 } while (0)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
46
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 #define DT_EQ(x, y, type, f) \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 do { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 const type tx = x; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 const type ty = y; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 ++ dt_nchecks; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 if (tx != ty) { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 ++ dt_nfailures; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 printf("%s:%d: assertion " #x " == " #y " failed (" f " != " f ")\n", \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 __FILE__, __LINE__, tx, ty); \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 } \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 } while (0)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 #define DT_EQ_PTR(x, y) \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 do { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 const void *tx = x; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 const void *ty = y; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 ++ dt_nchecks; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 if (tx != ty) { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 ++ dt_nfailures; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 printf("%s:%d: assertion " #x " == " #y " failed (%p != %p)\n", \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 __FILE__, __LINE__, tx, ty); \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 } \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 } while (0)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
76
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 #define DT_EQ_STR(x, y) \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 do { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 ++ dt_nchecks; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 if (strcmp(x, y) != 0) { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 ++ dt_nfailures; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 printf("%s:%d: assertion " #x " == " #y " failed (%s != %s)\n", \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 __FILE__, __LINE__, (x), (y)); \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 } \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 } while (0)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
88
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 #define DT_EQ_DOUBLE(x, y) \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 do { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 const double tx = x; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 const double ty = y; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 ++ dt_nchecks; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 if (fabs(tx - ty) > DT_DOUBLE_TOLERANCE) { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 ++ dt_nfailures; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 printf("%s:%d: assertion " #x " == " #y " failed (%f != %f)\n", \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 __FILE__, __LINE__, tx, ty); \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 } \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 } while (0)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
103
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 #define DT_RUN(f, ...) \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 do { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 const size_t nchecks = dt_nchecks; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 const size_t nfailures = dt_nfailures; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 ++ dt_ntests; \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 printf("== test " #f " ==\n"); \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 f(__VA_ARGS__); \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 printf("\n%zu checks, %zu failures\n\n", \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 dt_nchecks - nchecks, dt_nfailures - nfailures); \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 } while (0)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
117
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 #define DT_SUMMARY() \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 do { \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 printf("summary: %zu tests, %zu checks, %zu failures\n", \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 dt_ntests, dt_nchecks, dt_nfailures); \
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 } while (0)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
123
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 /* Aliases for basic types. */
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 #define DT_EQ_CHAR(x, y) DT_EQ(x, y, char, "%c")
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 #define DT_EQ_SHORT(x, y) DT_EQ(x, y, short, "%hd")
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 #define DT_EQ_USHORT(x, y) DT_EQ(x, y, unsigned short, "%hu")
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 #define DT_EQ_INT(x, y) DT_EQ(x, y, int, "%d")
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 #define DT_EQ_UINT(x, y) DT_EQ(x, y, unsigned int, "%u")
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 #define DT_EQ_LONG(x, y) DT_EQ(x, y, long, "%ld")
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 #define DT_EQ_ULONG(x, y) DT_EQ(x, y, unsigned long, "%lu")
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 #define DT_EQ_LLONG(x, y) DT_EQ(x, y, long long, "%lld")
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 #define DT_EQ_ULLONG(x, y) DT_EQ(x, y, unsigned long long, "%llu")
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 #define DT_EQ_INTMAX(x, y) DT_EQ(x, y, intmax_t, "%jd")
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 #define DT_EQ_UINTMAX(x, y) DT_EQ(x, y, uintmax_t, "%ju")
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
136
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 /* Aliases for fixed size integers. */
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 #define DT_EQ_INT8(x, y) DT_EQ(x, y, int8_t, PRId8)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 #define DT_EQ_UINT8(x, y) DT_EQ(x, y, uint8_t int, PRIu8)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 #define DT_EQ_INT16(x, y) DT_EQ(x, y, int16_t, PRId16)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 #define DT_EQ_UINT16(x, y) DT_EQ(x, y, uint16_t int, PRIu16)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 #define DT_EQ_INT32(x, y) DT_EQ(x, y, int32_t, PRId32)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 #define DT_EQ_UINT32(x, y) DT_EQ(x, y, uint32_t int, PRIu32)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 #define DT_EQ_INT64(x, y) DT_EQ(x, y, int64_t, PRId64)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 #define DT_EQ_UINT64(x, y) DT_EQ(x, y, uint64_t int, PRIu64)
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
146
1bf7d6669f0a tests: switch to libdt
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 #endif /* !DT_H */