Scrutiny  1.1.0
C testing framework for POSIX environments
test.h
Go to the documentation of this file.
1 
6 #pragma once
7 
8 #include <stddef.h>
9 #include <stdint.h>
10 
11 #include "definitions.h"
12 
18 void *
19 scrGroupCtx(void) SCR_EXPORT __attribute__((pure));
20 
28 void *
29 scrPatchedFunction(const char *func_name) SCR_EXPORT SCR_NONNULL(1);
30 
34 void
35 scrTestSkip(void) SCR_EXPORT SCR_NORETURN;
36 
37 #define SCR_CONTEXT_DECL const char *file_name, const char *function_name, unsigned int line_no
38 #define SCR_CONTEXT_PARAMS __FILE__, __func__, __LINE__
39 
43 void
44 _scrLog(SCR_CONTEXT_DECL, const char *format, ...) SCR_EXPORT;
45 #define scrLog(...) _scrLog(SCR_CONTEXT_PARAMS, __VA_ARGS__)
46 
47 void
48 _scrFail(SCR_CONTEXT_DECL, const char *format, ...) SCR_EXPORT SCR_PRINTF(4) SCR_NORETURN;
52 #define scrFail(...) _scrFail(SCR_CONTEXT_PARAMS, __VA_ARGS__)
53 
57 #define scrAssert(expr) \
58  do { \
59  if (!(expr)) { \
60  scrFail("Assertion failed: %s", #expr); \
61  } \
62  } while (0)
63 
64 #define SCR_ASSERT_FUNC(func, type) \
65  void _scrAssert##func(SCR_CONTEXT_DECL, type value1, const char *expr1, type value2, const char *expr2)
66 #define SCR_ASSERT_MACRO(func, expr1, expr2) \
67  _scrAssert##func(SCR_CONTEXT_PARAMS, expr1, #expr1, expr2, #expr2)
68 
69 SCR_ASSERT_FUNC(Eq, intmax_t) SCR_EXPORT;
73 #define scrAssertEq(expr1, expr2) SCR_ASSERT_MACRO(Eq, expr1, expr2)
74 
75 SCR_ASSERT_FUNC(Ne, intmax_t) SCR_EXPORT;
79 #define scrAssertNe(expr1, expr2) SCR_ASSERT_MACRO(Ne, expr1, expr2)
80 
81 SCR_ASSERT_FUNC(Lt, intmax_t) SCR_EXPORT;
85 #define scrAssertLt(expr1, expr2) SCR_ASSERT_MACRO(Lt, expr1, expr2)
86 
87 SCR_ASSERT_FUNC(Le, intmax_t) SCR_EXPORT;
91 #define scrAssertLe(expr1, expr2) SCR_ASSERT_MACRO(Le, expr1, expr2)
92 
93 SCR_ASSERT_FUNC(Gt, intmax_t) SCR_EXPORT;
97 #define scrAssertGt(expr1, expr2) SCR_ASSERT_MACRO(Gt, expr1, expr2)
98 
99 SCR_ASSERT_FUNC(Ge, intmax_t) SCR_EXPORT;
103 #define scrAssertGe(expr1, expr2) SCR_ASSERT_MACRO(Ge, expr1, expr2)
104 
105 SCR_ASSERT_FUNC(UnsignedEq, uintmax_t) SCR_EXPORT;
109 #define scrAssertUnsignedEq(expr1, expr2) SCR_ASSERT_MACRO(UnsignedEq, expr1, expr2)
110 
111 SCR_ASSERT_FUNC(UnsignedNe, uintmax_t) SCR_EXPORT;
115 #define scrAssertUnsignedNe(expr1, expr2) SCR_ASSERT_MACRO(UnsignedNe, expr1, expr2)
116 
117 SCR_ASSERT_FUNC(UnsignedLt, uintmax_t) SCR_EXPORT;
121 #define scrAssertUnsignedLt(expr1, expr2) SCR_ASSERT_MACRO(UnsignedLt, expr1, expr2)
122 
123 SCR_ASSERT_FUNC(UnsignedLe, uintmax_t) SCR_EXPORT;
127 #define scrAssertUnsignedLe(expr1, expr2) SCR_ASSERT_MACRO(UnsignedLe, expr1, expr2)
128 
129 SCR_ASSERT_FUNC(UnsignedGt, uintmax_t) SCR_EXPORT;
133 #define scrAssertUnsignedGt(expr1, expr2) SCR_ASSERT_MACRO(UnsignedGt, expr1, expr2)
134 
135 SCR_ASSERT_FUNC(UnsignedGe, uintmax_t) SCR_EXPORT;
139 #define scrAssertUnsignedGe(expr1, expr2) SCR_ASSERT_MACRO(UnsignedGe, expr1, expr2)
140 
141 SCR_ASSERT_FUNC(FloatEq, long double) SCR_EXPORT;
145 #define scrAssertFloatEq(expr1, expr2) SCR_ASSERT_MACRO(FloatEq, expr1, expr2)
146 
147 SCR_ASSERT_FUNC(FloatNe, long double) SCR_EXPORT;
151 #define scrAssertFloatNe(expr1, expr2) SCR_ASSERT_MACRO(FloatNe, expr1, expr2)
152 
153 SCR_ASSERT_FUNC(FloatLt, long double) SCR_EXPORT;
157 #define scrAssertFloatLt(expr1, expr2) SCR_ASSERT_MACRO(FloatLt, expr1, expr2)
158 
159 SCR_ASSERT_FUNC(FloatLe, long double) SCR_EXPORT;
163 #define scrAssertFloatLe(expr1, expr2) SCR_ASSERT_MACRO(FloatLe, expr1, expr2)
164 
165 SCR_ASSERT_FUNC(FloatGt, long double) SCR_EXPORT;
169 #define scrAssertFloatGt(expr1, expr2) SCR_ASSERT_MACRO(FloatGt, expr1, expr2)
170 
171 SCR_ASSERT_FUNC(FloatGe, long double) SCR_EXPORT;
175 #define scrAssertFloatGe(expr1, expr2) SCR_ASSERT_MACRO(FloatGe, expr1, expr2)
176 
177 SCR_ASSERT_FUNC(PtrEq, const void *) SCR_EXPORT;
181 #define scrAssertPtrEq(expr1, expr2) SCR_ASSERT_MACRO(PtrEq, expr1, expr2)
182 
183 SCR_ASSERT_FUNC(PtrNe, const void *) SCR_EXPORT;
187 #define scrAssertPtrNe(expr1, expr2) SCR_ASSERT_MACRO(PtrNe, expr1, expr2)
188 
189 SCR_ASSERT_FUNC(StrEq, const char *) SCR_EXPORT;
193 #define scrAssertStrEq(expr1, expr2) SCR_ASSERT_MACRO(StrEq, expr1, expr2)
194 
195 SCR_ASSERT_FUNC(StrNe, const char *) SCR_EXPORT;
199 #define scrAssertStrNe(expr1, expr2) SCR_ASSERT_MACRO(StrNe, expr1, expr2)
200 
201 SCR_ASSERT_FUNC(StrBeginsWith, const char *) SCR_EXPORT;
205 #define scrAssertStrBeginsWith(expr1, expr2) SCR_ASSERT_MACRO(StrBeginsWith, expr1, expr2)
206 
207 SCR_ASSERT_FUNC(StrNBeginsWith, const char *) SCR_EXPORT;
211 #define scrAssertStrNBeginsWith(expr1, expr2) SCR_ASSERT_MACRO(StrNBeginsWith, expr1, expr2)
212 
213 size_t
214 _scrAssertStrContains(SCR_CONTEXT_DECL, const char *value1, const char *expr1, const char *value2,
215  const char *expr2) SCR_EXPORT;
221 #define scrAssertStrContains(expr1, expr2) \
222  _scrAssertStrContains(SCR_CONTEXT_PARAMS, expr1, #expr1, expr2, #expr2)
223 
224 SCR_ASSERT_FUNC(StrNContains, const char *) SCR_EXPORT;
228 #define scrAssertStrNContains(expr1, expr2) SCR_ASSERT_MACRO(StrNContains, expr1, expr2)
229 
230 SCR_ASSERT_FUNC(CharEq, char) SCR_EXPORT;
234 #define scrAssertCharEq(expr1, expr2) SCR_ASSERT_MACRO(CharEq, expr1, expr2)
235 
236 SCR_ASSERT_FUNC(CharNe, char) SCR_EXPORT;
240 #define scrAssertCharNe(expr1, expr2) SCR_ASSERT_MACRO(CharNe, expr1, expr2)
241 
242 void
243 _scrAssertMemEq(SCR_CONTEXT_DECL, const void *ptr1, const char *expr1, const void *ptr2, const char *expr2,
244  size_t size) SCR_EXPORT;
248 #define scrAssertMemEq(expr1, expr2, size) \
249  _scrAssertMemEq(SCR_CONTEXT_PARAMS, expr1, #expr1, expr2, #expr2, size)
void * scrGroupCtx(void) SCR_EXPORT __attribute__((pure))
Gets the group context.
void _scrLog(SCR_CONTEXT_DECL, const char *format,...) SCR_EXPORT
Logs a message.
void scrTestSkip(void) SCR_EXPORT SCR_NORETURN
Skips the current test.
void * scrPatchedFunction(const char *func_name) SCR_EXPORT SCR_NONNULL(1)
Gets the real pointer to a monkeypatched function.