libGimbal 0.2.0
C17-Based Extended Standard Library and Cross-Language Runtime Framework
Loading...
Searching...
No Matches
gimbal_test_macros.h File Reference

Go to the source code of this file.

Macros

#define GBL_TEST_VERIFY(expr)
 
#define GBL_TEST_COMPARE(actual, expected)
 
#define GBL_TEST_COMPARE_INT(actual, expected)
 
#define GBL_TEST_COMPARE_UINT(actual, expected)
 
#define GBL_TEST_COMPARE_STRING(actual, expected)
 
#define GBL_TEST_COMPARE_FLOAT(actual, expected)
 
#define GBL_TEST_COMPARE_DOUBLE(actual, expected)
 
#define GBL_TEST_COMPARE_POINTER(actual, expected)
 
#define GBL_TEST_ERROR(actual, precise, epsilon, cmp)
 
#define GBL_TEST_CALL
 
#define GBL_TEST_CUSTOM(...)
 
#define GBL_TEST_CUSTOM_(name, enumType, expression, ...)
 
#define GBL_TEST_SKIP(reason)
 
#define GBL_TEST_FAIL(...)
 
#define GBL_TEST_EXPECT_ERROR()
 
#define GBL_SELF_TYPE_NAME
 
#define GBL_TEST_SUITE_CONTEXT_NAME
 
#define GBL_SELF_TYPE_PRIVATE_NAME
 
#define GBL_SELF_TYPE_PRIVATE
 
#define GBL_TEST_CASE(name)
 
#define GBL_TEST_CASE_END
 
#define GBL_TEST_FIXTURE_TYPE
 
#define GBL_TEST_FIXTURE
 
#define GBL_TEST_REGISTER(...)
 
#define GBL_TEST_REGISTER_(...)
 
#define GBL_TEST_CASE_PAIR(suiteName, caseName)
 
#define GBL_TEST_INIT()
 
#define GBL_TEST_FINAL()
 
#define GBL_TEST_INIT_NONE
 
#define GBL_TEST_FINAL_NONE
 
#define GBL_TEST_FIXTURE_NONE
 
#define GBL_TEST_INIT_END
 
#define GBL_TEST_FINAL_END
 

Enumerations

enum  GBL_TEST_ERROR_COMPARISON
 

Detailed Description

Unit testing macro utilities.

Todo
  • need to make an actual exported set of C functions as the top-level entry-point into GBL_TEST_COMPARE(), so that language bindings without macros can use the test framework.
Author
Falco Girgis

Definition in file gimbal_test_macros.h.

Macro Definition Documentation

◆ GBL_TEST_VERIFY

#define GBL_TEST_VERIFY ( expr)

Definition at line 25 of file gimbal_test_macros.h.

◆ GBL_TEST_COMPARE

#define GBL_TEST_COMPARE ( actual,
expected )

Definition at line 154 of file gimbal_test_macros.h.

154#define GBL_TEST_COMPARE(actual, expected) GBL_CTX_VERIFY_EXPRESSION(GBL_TEST_COMPARE_CMP_(actual, expected), \
155 GBL_TEST_COMPARE_FMT_(actual), \
156 actual, expected)

◆ GBL_TEST_COMPARE_INT

#define GBL_TEST_COMPARE_INT ( actual,
expected )

Definition at line 158 of file gimbal_test_macros.h.

158#define GBL_TEST_COMPARE_INT(actual, expected) GBL_CTX_VERIFY_EXPRESSION(actual == expected, \
159 "Values differed [expected: %d, actual: %d]", \
160 actual, expected)

◆ GBL_TEST_COMPARE_UINT

#define GBL_TEST_COMPARE_UINT ( actual,
expected )

Definition at line 162 of file gimbal_test_macros.h.

162#define GBL_TEST_COMPARE_UINT(actual, expected) GBL_CTX_VERIFY_EXPRESSION(actual == expected, \
163 "Values differed [expected: %u, actual: %u]", \
164 actual, expected)

◆ GBL_TEST_COMPARE_STRING

#define GBL_TEST_COMPARE_STRING ( actual,
expected )

Definition at line 166 of file gimbal_test_macros.h.

166#define GBL_TEST_COMPARE_STRING(actual, expected) GBL_CTX_VERIFY_EXPRESSION(strcmp(actual, expected) == 0, \
167 "Values differed [expected: %s, actual: %s]", \
168 actual, expected)

◆ GBL_TEST_COMPARE_FLOAT

#define GBL_TEST_COMPARE_FLOAT ( actual,
expected )

Definition at line 170 of file gimbal_test_macros.h.

170#define GBL_TEST_COMPARE_FLOAT(actual, expected) GBL_CTX_VERIFY_EXPRESSION(fabsf((actual) - (expected)) < FLT_EPSILON, \
171 "Values differed [expected: %f, actual: %f]", \
172 actual, expected)

◆ GBL_TEST_COMPARE_DOUBLE

#define GBL_TEST_COMPARE_DOUBLE ( actual,
expected )

Definition at line 174 of file gimbal_test_macros.h.

174#define GBL_TEST_COMPARE_DOUBLE(actual, expected) GBL_CTX_VERIFY_EXPRESSION(fabs((actual) - (expected)) < DBL_EPSILON, \
175 "Values differed [expected: %f, actual: %f]", \
176 actual, expected)

◆ GBL_TEST_COMPARE_POINTER

#define GBL_TEST_COMPARE_POINTER ( actual,
expected )

Definition at line 178 of file gimbal_test_macros.h.

178#define GBL_TEST_COMPARE_POINTER(actual, expected) GBL_CTX_VERIFY_EXPRESSION(actual == expected, \
179 "Values differed [exptected: %p, actual: %p]", \
180 actual, expected)

◆ GBL_TEST_ERROR

#define GBL_TEST_ERROR ( actual,
precise,
epsilon,
cmp )

Definition at line 188 of file gimbal_test_macros.h.

188#define GBL_TEST_ERROR(actual, precise, epsilon, cmp) \
189 GBL_STMT_START { \
190 double relative = gblRelativeError((actual), (precise)); \
191 double absolute = gblAbsoluteError((actual), (precise)); \
192 if(((cmp) == GBL_TEST_ERROR_ABSOLUTE && absolute > (epsilon)) || \
193 ((cmp) == GBL_TEST_ERROR_RELATIVE && relative > (epsilon)) || \
194 (absolute > (epsilon) && relative > (epsilon))) \
195 GBL_TEST_FAIL("(actual == %.9f) != (expected == %.9f)\n" \
196 "\t ERROR: Rel == %.9f, Abs == %.9f, Max == %.9f", \
197 (actual), (precise), relative, absolute, (epsilon)); \
198 } GBL_STMT_END

◆ GBL_TEST_CALL

#define GBL_TEST_CALL

Definition at line 201 of file gimbal_test_macros.h.

◆ GBL_TEST_CUSTOM

#define GBL_TEST_CUSTOM ( ...)

Reports an enum value to a registered result group, with an optional formatted message.

Definition at line 204 of file gimbal_test_macros.h.

◆ GBL_TEST_CUSTOM_

#define GBL_TEST_CUSTOM_ ( name,
enumType,
expression,
... )

Definition at line 206 of file gimbal_test_macros.h.

206#define GBL_TEST_CUSTOM_(name, enumType, expression, ...) \
207 GBL_STMT_START { \
208 const GblEnum gblTestCustomValue_ = (expression); \
209 GBL_CTX_VERIFY_CALL(GblTestScenario_reportResult( \
210 GBL_TEST_SCENARIO(GBL_CTX_CONTEXT()), (name), (enumType), \
211 gblTestCustomValue_, __VA_ARGS__)); \
212 } GBL_STMT_END

◆ GBL_TEST_SKIP

#define GBL_TEST_SKIP ( reason)

Definition at line 214 of file gimbal_test_macros.h.

214#define GBL_TEST_SKIP(reason) GBL_CTX_VERIFY(GBL_FALSE, \
215 GBL_RESULT_SKIPPED, \
216 reason)

◆ GBL_TEST_FAIL

#define GBL_TEST_FAIL ( ...)

Definition at line 218 of file gimbal_test_macros.h.

218#define GBL_TEST_FAIL(...) GBL_CTX_VERIFY(GBL_FALSE, \
219 GBL_RESULT_ERROR, \
220 __VA_ARGS__)

◆ GBL_TEST_EXPECT_ERROR

#define GBL_TEST_EXPECT_ERROR ( )

Definition at line 222 of file gimbal_test_macros.h.

222#define GBL_TEST_EXPECT_ERROR() \
223 GBL_STMT_START { \
224 GBL_CTX_VERIFY(!GBL_CONFIG_ASSERT_ERROR_ENABLED, \
225 GBL_RESULT_SKIPPED, \
226 "Skipping test case due to GBL_CONFIG_ASSERT_ERROR_ENABLED."); \
227 GblTestScenario* pScenario = GBL_TEST_SCENARIO(GBL_CTX_CONTEXT()); \
228 if(pScenario) GblTestScenario_expectError(pScenario); \
229 } GBL_STMT_END

◆ GBL_SELF_TYPE_NAME

#define GBL_SELF_TYPE_NAME

Definition at line 233 of file gimbal_test_macros.h.

◆ GBL_TEST_SUITE_CONTEXT_NAME

#define GBL_TEST_SUITE_CONTEXT_NAME

Definition at line 237 of file gimbal_test_macros.h.

◆ GBL_SELF_TYPE_PRIVATE_NAME

#define GBL_SELF_TYPE_PRIVATE_NAME

Definition at line 241 of file gimbal_test_macros.h.

◆ GBL_SELF_TYPE_PRIVATE

#define GBL_SELF_TYPE_PRIVATE

Definition at line 245 of file gimbal_test_macros.h.

◆ GBL_TEST_CASE

#define GBL_TEST_CASE ( name)

Definition at line 248 of file gimbal_test_macros.h.

248#define GBL_TEST_CASE(name) \
249 static GBL_RESULT GBL_GLUE(GBL_GLUE(GBL_GLUE(GBL_SELF_TYPE, _), name), _) \
250 (GblTestSuite* GBL_SELF_TYPE_NAME, \
251 GblContext* GBL_TEST_SUITE_CONTEXT_NAME) { \
252 GBL_CTX_BEGIN(GBL_TEST_SUITE_CONTEXT_NAME); \
253 GBL_SELF_TYPE_PRIVATE* GBL_SELF_TYPE_PRIVATE_NAME = \
254 (GBL_SELF_TYPE_PRIVATE*) \
255 GBL_PRIVATE(GBL_SELF_TYPE, pSelf); \
256 GBL_UNUSED(GBL_SELF_TYPE_NAME, \
257 GBL_TEST_SUITE_CONTEXT_NAME, \
258 GBL_SELF_TYPE_PRIVATE_NAME);

◆ GBL_TEST_CASE_END

#define GBL_TEST_CASE_END

Definition at line 260 of file gimbal_test_macros.h.

260#define GBL_TEST_CASE_END \
261 GBL_CTX_END(); }

◆ GBL_TEST_FIXTURE_TYPE

#define GBL_TEST_FIXTURE_TYPE

Definition at line 263 of file gimbal_test_macros.h.

263#define GBL_TEST_FIXTURE_TYPE \
264 GBL_SELF_TYPE_PRIVATE

◆ GBL_TEST_FIXTURE

#define GBL_TEST_FIXTURE

Definition at line 266 of file gimbal_test_macros.h.

266#define GBL_TEST_FIXTURE \
267 struct GBL_TEST_FIXTURE_TYPE; \
268 typedef struct GBL_TEST_FIXTURE_TYPE GblTestFixture; \
269 GBL_DECLARE_STRUCT(GBL_TEST_FIXTURE_TYPE)

◆ GBL_TEST_REGISTER

#define GBL_TEST_REGISTER ( ...)

Definition at line 275 of file gimbal_test_macros.h.

275# define GBL_TEST_REGISTER(...) \
276 GBL_TEST_REGISTER_(__VA_ARGS__)

◆ GBL_TEST_REGISTER_

#define GBL_TEST_REGISTER_ ( ...)

Definition at line 279 of file gimbal_test_macros.h.

279#define GBL_TEST_REGISTER_(...) \
280 GBL_EXPORT GblType GBL_GLUE(GBL_GLUE(GBL_SELF_TYPE, _), type)(void) GBL_NOEXCEPT { \
281 static GblType type = GBL_INVALID_TYPE; \
282 const static GblTestCase cases[] = { \
283 GBL_TUPLE_FOREACH(GBL_TEST_CASE_PAIR, GBL_GLUE(GBL_SELF_TYPE,_), (__VA_ARGS__)) \
284 { NULL, NULL } \
285 }; \
286 const static GblTestSuiteVTable vTable = { \
287 .pFnSuiteInit = GBL_GLUE(GBL_GLUE(GBL_GLUE(GBL_SELF_TYPE, _), init), _), \
288 .pFnSuiteFinal = GBL_GLUE(GBL_GLUE(GBL_GLUE(GBL_SELF_TYPE, _), final), _), \
289 .pCases = cases \
290 }; \
291 if(type == GBL_INVALID_TYPE) { \
292 GBL_CTX_BEGIN(NULL); \
293 type = GblTestSuite_register(GblQuark_internStatic(GBL_STRINGIFY(GBL_SELF_TYPE)), \
294 &vTable, \
295 sizeof(GBL_SELF_TYPE), \
296 sizeof(GBL_SELF_TYPE_PRIVATE), \
297 GBL_TYPE_FLAGS_NONE); \
298 GBL_CTX_VERIFY_LAST_RECORD(); \
299 GBL_CTX_END_BLOCK();\
300 } \
301 return type; \
302}

◆ GBL_TEST_CASE_PAIR

#define GBL_TEST_CASE_PAIR ( suiteName,
caseName )

Definition at line 304 of file gimbal_test_macros.h.

304#define GBL_TEST_CASE_PAIR(suiteName, caseName) \
305 { GBL_STRINGIFY(caseName), GBL_GLUE(GBL_GLUE(suiteName, caseName), _) },

◆ GBL_TEST_INIT

#define GBL_TEST_INIT ( )

Definition at line 307 of file gimbal_test_macros.h.

◆ GBL_TEST_FINAL

#define GBL_TEST_FINAL ( )

Definition at line 308 of file gimbal_test_macros.h.

◆ GBL_TEST_INIT_NONE

#define GBL_TEST_INIT_NONE

Definition at line 309 of file gimbal_test_macros.h.

309#define GBL_TEST_INIT_NONE \
310 GBL_TEST_INIT() \
311 GBL_TEST_CASE_END

◆ GBL_TEST_FINAL_NONE

#define GBL_TEST_FINAL_NONE

Definition at line 312 of file gimbal_test_macros.h.

312#define GBL_TEST_FINAL_NONE \
313 GBL_TEST_FINAL() \
314 GBL_TEST_CASE_END

◆ GBL_TEST_FIXTURE_NONE

#define GBL_TEST_FIXTURE_NONE

Definition at line 315 of file gimbal_test_macros.h.

315#define GBL_TEST_FIXTURE_NONE \
316 GBL_TEST_FIXTURE { uintptr_t compat; };

◆ GBL_TEST_INIT_END

#define GBL_TEST_INIT_END

Definition at line 317 of file gimbal_test_macros.h.

◆ GBL_TEST_FINAL_END

#define GBL_TEST_FINAL_END

Definition at line 318 of file gimbal_test_macros.h.

Enumeration Type Documentation

◆ GBL_TEST_ERROR_COMPARISON

enum GBL_TEST_ERROR_COMPARISON

Definition at line 182 of file gimbal_test_macros.h.

182 {
183 GBL_TEST_ERROR_ABSOLUTE,
184 GBL_TEST_ERROR_RELATIVE,
185 GBL_TEST_ERROR_FUZZY
186} GBL_TEST_ERROR_COMPARISON;