libGimbal 0.1.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_POINTER(actual, expected)
 
#define GBL_TEST_ERROR(actual, precise, epsilon, cmp)
 
#define GBL_TEST_CALL
 
#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 149 of file gimbal_test_macros.h.

149#define GBL_TEST_COMPARE(actual, expected) GBL_CTX_VERIFY_EXPRESSION(GBL_TEST_COMPARE_CMP_(actual, expected), \
150 GBL_TEST_COMPARE_FMT_(actual), \
151 actual, expected)

◆ GBL_TEST_COMPARE_INT

#define GBL_TEST_COMPARE_INT ( actual,
expected )

Definition at line 153 of file gimbal_test_macros.h.

153#define GBL_TEST_COMPARE_INT(actual, expected) GBL_CTX_VERIFY_EXPRESSION(actual == expected, \
154 "Values differed [expected: %d, actual: %d]", \
155 actual, expected)

◆ GBL_TEST_COMPARE_UINT

#define GBL_TEST_COMPARE_UINT ( actual,
expected )

Definition at line 157 of file gimbal_test_macros.h.

157#define GBL_TEST_COMPARE_UINT(actual, expected) GBL_CTX_VERIFY_EXPRESSION(actual == expected, \
158 "Values differed [expected: %u, actual: %u]", \
159 actual, expected)

◆ GBL_TEST_COMPARE_STRING

#define GBL_TEST_COMPARE_STRING ( actual,
expected )

Definition at line 161 of file gimbal_test_macros.h.

161#define GBL_TEST_COMPARE_STRING(actual, expected) GBL_CTX_VERIFY_EXPRESSION(strcmp(actual, expected) == 0, \
162 "Values differed [expected: %s, actual: %s]", \
163 actual, expected)

◆ GBL_TEST_COMPARE_FLOAT

#define GBL_TEST_COMPARE_FLOAT ( actual,
expected )

Definition at line 165 of file gimbal_test_macros.h.

165#define GBL_TEST_COMPARE_FLOAT(actual, expected) GBL_CTX_VERIFY_EXPRESSION(actual == expected, \
166 "Values differed [expected: %f, actual: %f]", \
167 actual, expected)

◆ GBL_TEST_COMPARE_POINTER

#define GBL_TEST_COMPARE_POINTER ( actual,
expected )

Definition at line 169 of file gimbal_test_macros.h.

169#define GBL_TEST_COMPARE_POINTER(actual, expected) GBL_CTX_VERIFY_EXPRESSION(actual == expected, \
170 "Values differed [exptected: %p, actual: %p]", \
171 actual, expected)

◆ GBL_TEST_ERROR

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

Definition at line 179 of file gimbal_test_macros.h.

179#define GBL_TEST_ERROR(actual, precise, epsilon, cmp) \
180 GBL_STMT_START { \
181 double relative = gblRelativeError((actual), (precise)); \
182 double absolute = gblAbsoluteError((actual), (precise)); \
183 if(((cmp) == GBL_TEST_ERROR_ABSOLUTE && absolute > (epsilon)) || \
184 ((cmp) == GBL_TEST_ERROR_RELATIVE && relative > (epsilon)) || \
185 (absolute > (epsilon) && relative > (epsilon))) \
186 GBL_TEST_FAIL("(actual == %.9f) != (expected == %.9f)\n" \
187 "\t ERROR: Rel == %.9f, Abs == %.9f, Max == %.9f", \
188 (actual), (precise), relative, absolute, (epsilon)); \
189 } GBL_STMT_END

◆ GBL_TEST_CALL

#define GBL_TEST_CALL

Definition at line 192 of file gimbal_test_macros.h.

◆ GBL_TEST_SKIP

#define GBL_TEST_SKIP ( reason)

Definition at line 194 of file gimbal_test_macros.h.

194#define GBL_TEST_SKIP(reason) GBL_CTX_VERIFY(GBL_FALSE, \
195 GBL_RESULT_SKIPPED, \
196 reason)

◆ GBL_TEST_FAIL

#define GBL_TEST_FAIL ( ...)

Definition at line 198 of file gimbal_test_macros.h.

198#define GBL_TEST_FAIL(...) GBL_CTX_VERIFY(GBL_FALSE, \
199 GBL_RESULT_ERROR, \
200 __VA_ARGS__)

◆ GBL_TEST_EXPECT_ERROR

#define GBL_TEST_EXPECT_ERROR ( )

Definition at line 202 of file gimbal_test_macros.h.

202#define GBL_TEST_EXPECT_ERROR() \
203 GBL_STMT_START { \
204 GBL_CTX_VERIFY(!GBL_CONFIG_ASSERT_ERROR_ENABLED, \
205 GBL_RESULT_SKIPPED, \
206 "Skipping test case due to GBL_CONFIG_ASSERT_ERROR_ENABLED."); \
207 GblTestScenario* pScenario = GBL_TEST_SCENARIO(GBL_CTX_CONTEXT()); \
208 if(pScenario) GblTestScenario_expectError(pScenario); \
209 } GBL_STMT_END

◆ GBL_SELF_TYPE_NAME

#define GBL_SELF_TYPE_NAME

Definition at line 213 of file gimbal_test_macros.h.

◆ GBL_TEST_SUITE_CONTEXT_NAME

#define GBL_TEST_SUITE_CONTEXT_NAME

Definition at line 217 of file gimbal_test_macros.h.

◆ GBL_SELF_TYPE_PRIVATE_NAME

#define GBL_SELF_TYPE_PRIVATE_NAME

Definition at line 221 of file gimbal_test_macros.h.

◆ GBL_SELF_TYPE_PRIVATE

#define GBL_SELF_TYPE_PRIVATE

Definition at line 225 of file gimbal_test_macros.h.

◆ GBL_TEST_CASE

#define GBL_TEST_CASE ( name)

Definition at line 228 of file gimbal_test_macros.h.

228#define GBL_TEST_CASE(name) \
229 static GBL_RESULT GBL_GLUE(GBL_GLUE(GBL_GLUE(GBL_SELF_TYPE, _), name), _) \
230 (GblTestSuite* GBL_SELF_TYPE_NAME, \
231 GblContext* GBL_TEST_SUITE_CONTEXT_NAME) { \
232 GBL_CTX_BEGIN(GBL_TEST_SUITE_CONTEXT_NAME); \
233 GBL_SELF_TYPE_PRIVATE* GBL_SELF_TYPE_PRIVATE_NAME = \
234 (GBL_SELF_TYPE_PRIVATE*) \
235 GBL_PRIVATE(GBL_SELF_TYPE, pSelf); \
236 GBL_UNUSED(GBL_SELF_TYPE_NAME, \
237 GBL_TEST_SUITE_CONTEXT_NAME, \
238 GBL_SELF_TYPE_PRIVATE_NAME);

◆ GBL_TEST_CASE_END

#define GBL_TEST_CASE_END

Definition at line 240 of file gimbal_test_macros.h.

240#define GBL_TEST_CASE_END \
241 GBL_CTX_END(); }

◆ GBL_TEST_FIXTURE_TYPE

#define GBL_TEST_FIXTURE_TYPE

Definition at line 243 of file gimbal_test_macros.h.

243#define GBL_TEST_FIXTURE_TYPE \
244 GBL_SELF_TYPE_PRIVATE

◆ GBL_TEST_FIXTURE

#define GBL_TEST_FIXTURE

Definition at line 246 of file gimbal_test_macros.h.

246#define GBL_TEST_FIXTURE \
247 struct GBL_TEST_FIXTURE_TYPE; \
248 typedef struct GBL_TEST_FIXTURE_TYPE GblTestFixture; \
249 GBL_DECLARE_STRUCT(GBL_TEST_FIXTURE_TYPE)

◆ GBL_TEST_REGISTER

#define GBL_TEST_REGISTER ( ...)

Definition at line 255 of file gimbal_test_macros.h.

255# define GBL_TEST_REGISTER(...) \
256 GBL_TEST_REGISTER_(__VA_ARGS__)

◆ GBL_TEST_REGISTER_

#define GBL_TEST_REGISTER_ ( ...)

Definition at line 259 of file gimbal_test_macros.h.

259#define GBL_TEST_REGISTER_(...) \
260 GBL_EXPORT GblType GBL_GLUE(GBL_GLUE(GBL_SELF_TYPE, _), type)(void) GBL_NOEXCEPT { \
261 static GblType type = GBL_INVALID_TYPE; \
262 const static GblTestCase cases[] = { \
263 GBL_TUPLE_FOREACH(GBL_TEST_CASE_PAIR, GBL_GLUE(GBL_SELF_TYPE,_), (__VA_ARGS__)) \
264 { NULL, NULL } \
265 }; \
266 const static GblTestSuiteVTable vTable = { \
267 .pFnSuiteInit = GBL_GLUE(GBL_GLUE(GBL_GLUE(GBL_SELF_TYPE, _), init), _), \
268 .pFnSuiteFinal = GBL_GLUE(GBL_GLUE(GBL_GLUE(GBL_SELF_TYPE, _), final), _), \
269 .pCases = cases \
270 }; \
271 if(type == GBL_INVALID_TYPE) { \
272 GBL_CTX_BEGIN(NULL); \
273 type = GblTestSuite_register(GblQuark_internStatic(GBL_STRINGIFY(GBL_SELF_TYPE)), \
274 &vTable, \
275 sizeof(GBL_SELF_TYPE), \
276 sizeof(GBL_SELF_TYPE_PRIVATE), \
277 GBL_TYPE_FLAGS_NONE); \
278 GBL_CTX_VERIFY_LAST_RECORD(); \
279 GBL_CTX_END_BLOCK();\
280 } \
281 return type; \
282}

◆ GBL_TEST_CASE_PAIR

#define GBL_TEST_CASE_PAIR ( suiteName,
caseName )

Definition at line 284 of file gimbal_test_macros.h.

284#define GBL_TEST_CASE_PAIR(suiteName, caseName) \
285 { GBL_STRINGIFY(caseName), GBL_GLUE(GBL_GLUE(suiteName, caseName), _) },

◆ GBL_TEST_INIT

#define GBL_TEST_INIT ( )

Definition at line 287 of file gimbal_test_macros.h.

◆ GBL_TEST_FINAL

#define GBL_TEST_FINAL ( )

Definition at line 288 of file gimbal_test_macros.h.

◆ GBL_TEST_INIT_NONE

#define GBL_TEST_INIT_NONE

Definition at line 289 of file gimbal_test_macros.h.

289#define GBL_TEST_INIT_NONE \
290 GBL_TEST_INIT() \
291 GBL_TEST_CASE_END

◆ GBL_TEST_FINAL_NONE

#define GBL_TEST_FINAL_NONE

Definition at line 292 of file gimbal_test_macros.h.

292#define GBL_TEST_FINAL_NONE \
293 GBL_TEST_FINAL() \
294 GBL_TEST_CASE_END

◆ GBL_TEST_FIXTURE_NONE

#define GBL_TEST_FIXTURE_NONE

Definition at line 295 of file gimbal_test_macros.h.

295#define GBL_TEST_FIXTURE_NONE \
296 GBL_TEST_FIXTURE { uintptr_t compat; };

◆ GBL_TEST_INIT_END

#define GBL_TEST_INIT_END

Definition at line 297 of file gimbal_test_macros.h.

◆ GBL_TEST_FINAL_END

#define GBL_TEST_FINAL_END

Definition at line 298 of file gimbal_test_macros.h.

Enumeration Type Documentation

◆ GBL_TEST_ERROR_COMPARISON

enum GBL_TEST_ERROR_COMPARISON

Definition at line 173 of file gimbal_test_macros.h.

173 {
174 GBL_TEST_ERROR_ABSOLUTE,
175 GBL_TEST_ERROR_RELATIVE,
176 GBL_TEST_ERROR_FUZZY
177} GBL_TEST_ERROR_COMPARISON;