CTEST. A lightweight test for C and C++  0.0.1
asserts.h
Go to the documentation of this file.
1 #include <stdint.h>
2 
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 
48 #define C_TEST_TRUE (int)(1==1)
49 
54 #define C_TEST_FALSE (int)(1!=1)
55 
56 #ifndef CTEST_DOC_SKIP
57 void _c_test_ignore();
58 void _c_test_ignore_end();
59 #endif
60 
65 #define C_TEST_BEGIN_IGNORE _c_test_ignore();
66 
71 #define C_TEST_END_IGNORE _c_test_ignore_end();
72 
73 #ifndef CTEST_DOC_SKIP
74 #define END_TITLE "\e[0m"
75 #define INITIAL_TITLE "\e[1;3m"
76 #define ERROR_CODE "\e[31;1m"
77 #define SUCCESS_CODE "\e[32;1m"
78 #define WARNING_CODE "\e[33;1m"
79 #define INFO_CODE "\e[34;1m"
80 
81 void write_title(const char *, const char *);
82 void write_title_fmt(const char *, const char *, ...);
83 #endif
84 
99 #define TITLE_MSG(msg) write_title(msg, INITIAL_TITLE);
100 
115 #define ERROR_MSG(msg) write_title(msg, ERROR_CODE);
116 
131 #define SUCCESS_MSG(msg) write_title(msg, SUCCESS_CODE);
132 
147 #define WARN_MSG(msg) write_title(msg, WARNING_CODE);
148 
163 #define INFO_MSG(msg) write_title(msg, INFO_CODE);
164 
182 #define TITLE_MSG_FMT(...) write_title_fmt(INITIAL_TITLE, __VA_ARGS__);
183 
201 #define ERROR_MSG_FMT(...) write_title_fmt(ERROR_CODE, __VA_ARGS__);
202 
220 #define WARN_MSG_FMT(...) write_title_fmt(WARNING_CODE, __VA_ARGS__);
221 
239 #define INFO_MSG_FMT(...) write_title_fmt(INFO_CODE, __VA_ARGS__);
240 
258 #define SUCCESS_MSG_FMT(...) write_title_fmt(SUCCESS_CODE, __VA_ARGS__);
259 
260 #ifndef CTEST_DOC_SKIP
261 uint64_t *get_va_end_signature();
262 uint64_t *get_vas_end_signature();
263 
264 #define VA_END_SIGNATURE get_va_end_signature()
265 #define VAS_END_SIGNATURE get_vas_end_signature()
266 
267 typedef void (*header_on_cb)(void *);
268 typedef void (*cb_fn)(void *);
269 
270 void *set_varg_callback(uint32_t, cb_fn, ...);
271 
272 void assert_true(int, ...);
273 void assert_false(int, ...);
274 void assert_equal_int(int, int, ...);
275 void assert_not_equal_int(int, int, ...);
276 void assert_equal_longint(long long int, long long int, ...);
277 void assert_not_equal_longint(long long int, long long int, ...);
278 void assert_equal_unsigned_longint(unsigned long long int, unsigned long long int, ...);
279 void assert_not_equal_unsigned_longint(unsigned long long int, unsigned long long int, ...);
280 void assert_equal_double(double, double, double, ...);
281 void assert_not_equal_double(double, double, double, ...);
282 void assert_equal_byte(
283  void *,
284  void *,
285  size_t,
286  ...
287 );
288 void assert_not_equal_byte(
289  void *,
290  void *,
291  size_t,
292  ...
293 );
294 void assert_equal_string(const char *, const char *, ...);
295 void assert_not_equal_string(const char *, const char *, ...);
296 void assert_equal_string_ignore_case(const char *, const char *, ...);
297 void assert_not_equal_string_ignore_case(const char *, const char *, ...);
298 void assert_null(void *, ...);
299 void assert_not_null(void *, ...);
300 void assert_equal_u8(uint8_t, uint8_t, ...);
301 void assert_not_equal_u8(uint8_t, uint8_t, ...);
302 void assert_equal_s8(int8_t, int8_t, ...);
303 void assert_not_equal_s8(int8_t, int8_t, ...);
304 void assert_equal_u16(uint16_t, uint16_t, ...);
305 void assert_not_equal_u16(uint16_t, uint16_t, ...);
306 void assert_equal_s16(int16_t, int16_t, ...);
307 void assert_not_equal_s16(int16_t, int16_t, ...);
308 void assert_equal_u32(uint32_t, uint32_t, ...);
309 void assert_not_equal_u32(uint32_t, uint32_t, ...);
310 void assert_equal_s32(int32_t, int32_t, ...);
311 void assert_not_equal_s32(int32_t, int32_t, ...);
312 void assert_equal_u64(uint64_t, uint64_t, ...);
313 void assert_not_equal_u64(uint64_t, uint64_t, ...);
314 void assert_equal_s64(int64_t, int64_t, ...);
315 void assert_not_equal_s64(int64_t, int64_t, ...);
316 void assert_fail(void *, ...);
317 #endif
318 
358 void on_add_test(header_on_cb);
359 
366 void rm_on_add_test();
367 
407 void on_begin_test(header_on_cb);
408 
415 void rm_begin_test();
416 
456 void on_test(header_on_cb);
457 
464 void rm_on_test();
465 
505 void on_end_test(header_on_cb);
506 
513 void rm_on_end_test();
514 
558 void on_abort(header_on_cb);
559 
566 void rm_on_abort();
567 
572 void end_tests();
573 
574 #ifndef CTEST_DOC_SKIP
575 void *vargs_setter(int, ...);
576 void *set_varg(uint32_t, const char *, ...);
577 
578 #define C_TEST_TYPE_VARGS_MSG (uint32_t)(0x10000000)
579 #define C_TEST_TYPE_VARGS_CALLBACK (uint32_t)(0x20000000|C_TEST_TYPE_VARGS_MSG)
580 
581 #define C_TEST_VARGS_TITLE (uint32_t)(C_TEST_TYPE_VARGS_MSG|0x002E4992)
582 #define C_TEST_VARGS_INFO (uint32_t)(C_TEST_TYPE_VARGS_MSG|0x012E4992)
583 #define C_TEST_VARGS_WARNING (uint32_t)(C_TEST_TYPE_VARGS_MSG|0x022E4992)
584 #define C_TEST_VARGS_ERROR (uint32_t)(C_TEST_TYPE_VARGS_MSG|0x032E4992)
585 #define C_TEST_VARGS_SUCCESS (uint32_t)(C_TEST_TYPE_VARGS_MSG|0x042E4992)
586 
587 #define C_TEST_VARGS_ON_SUCCESS_CALLBACK (uint32_t)(C_TEST_TYPE_VARGS_CALLBACK|0x052E4992)
588 #define C_TEST_VARGS_ON_ERROR_CALLBACK (uint32_t)(C_TEST_TYPE_VARGS_CALLBACK|0x062E4992)
589 #endif
590 
613 #define CTEST_SETTER(...) vargs_setter(-1, __VA_ARGS__, NULL, VA_END_SIGNATURE)
614 
632 #define CTEST_TITLE(...) set_varg(C_TEST_VARGS_TITLE, __VA_ARGS__)
633 
651 #define CTEST_INFO(...) set_varg(C_TEST_VARGS_INFO, __VA_ARGS__)
652 
670 #define CTEST_WARN(...) set_varg(C_TEST_VARGS_WARNING, __VA_ARGS__)
671 #define CTEST_ON_ERROR(...) set_varg(C_TEST_VARGS_ERROR, __VA_ARGS__)
672 #define CTEST_ON_SUCCESS(...) set_varg(C_TEST_VARGS_SUCCESS, __VA_ARGS__)
673 #define CTEST_ON_SUCCESS_CB(...) set_varg_callback(C_TEST_VARGS_ON_SUCCESS_CALLBACK, __VA_ARGS__, NULL, VAS_END_SIGNATURE)
674 #define CTEST_ON_ERROR_CB(...) set_varg_callback(C_TEST_VARGS_ON_ERROR_CALLBACK, __VA_ARGS__, NULL, VAS_END_SIGNATURE)
675 
684 #define C_ASSERT_FALSE(...) assert_false(__VA_ARGS__, VAS_END_SIGNATURE);
685 
694 #define C_ASSERT_TRUE(...) assert_true(__VA_ARGS__, VAS_END_SIGNATURE);
695 
705 #define C_ASSERT_EQUAL_INT(expected, ...) assert_equal_int(expected, __VA_ARGS__, VAS_END_SIGNATURE);
706 
716 #define C_ASSERT_NOT_EQUAL_INT(unexpected, ...) assert_not_equal_int(unexpected, __VA_ARGS__, VAS_END_SIGNATURE);
717 
727 #define C_ASSERT_EQUAL_LONG_INT(expected, ...) assert_equal_longint(expected, __VA_ARGS__, VAS_END_SIGNATURE);
728 
738 #define C_ASSERT_NOT_EQUAL_LONG_INT(expected, ...) assert_not_equal_longint(expected, __VA_ARGS__, VAS_END_SIGNATURE);
739 
749 #define C_ASSERT_EQUAL_UNSIGNED_LONG_INT(expected, ...) assert_equal_unsigned_longint(expected, __VA_ARGS__, VAS_END_SIGNATURE);
750 
760 #define C_ASSERT_NOT_EQUAL_UNSIGNED_LONG_INT(expected, ...) assert_not_equal_unsigned_longint(expected, __VA_ARGS__, VAS_END_SIGNATURE);
761 
772 #define C_ASSERT_EQUAL_DOUBLE(expected, result, ...) assert_equal_double(expected, result, __VA_ARGS__, VAS_END_SIGNATURE);
773 
784 #define C_ASSERT_NOT_EQUAL_DOUBLE(expected, result, ...) assert_not_equal_double(expected, result, __VA_ARGS__, VAS_END_SIGNATURE);
785 
796 #define C_ASSERT_EQUAL_BYTE(expected, result, ...) assert_equal_byte(expected, result, __VA_ARGS__, VAS_END_SIGNATURE);
797 
808 #define C_ASSERT_NOT_EQUAL_BYTE(unexpected, result, ...) assert_not_equal_byte(unexpected, result, __VA_ARGS__, VAS_END_SIGNATURE);
809 
818 #define C_ASSERT_NULL(...) assert_null(__VA_ARGS__, VAS_END_SIGNATURE);
819 
828 #define C_ASSERT_NOT_NULL(...) assert_not_null(__VA_ARGS__, VAS_END_SIGNATURE);
829 
839 #define C_ASSERT_EQUAL_STRING(expected, ...) assert_equal_string(expected, __VA_ARGS__, VAS_END_SIGNATURE);
840 
850 #define C_ASSERT_NOT_EQUAL_STRING(expected, ...) assert_not_equal_string(expected, __VA_ARGS__, VAS_END_SIGNATURE);
851 
861 #define C_ASSERT_EQUAL_STRING_IGNORE_CASE(expected, ...) assert_equal_string_ignore_case(expected, __VA_ARGS__, VAS_END_SIGNATURE);
862 
872 #define C_ASSERT_NOT_EQUAL_STRING_IGNORE_CASE(expected, ...) assert_not_equal_string_ignore_case(expected, __VA_ARGS__, VAS_END_SIGNATURE);
873 
883 #define C_ASSERT_EQUAL_U8(expected, ...) assert_equal_u8(expected, __VA_ARGS__, VAS_END_SIGNATURE);
884 
894 #define C_ASSERT_NOT_EQUAL_U8(expected, ...) assert_not_equal_u8(expected, __VA_ARGS__, VAS_END_SIGNATURE);
895 
905 #define C_ASSERT_EQUAL_S8(expected, ...) assert_equal_s8(expected, __VA_ARGS__, VAS_END_SIGNATURE);
906 
916 #define C_ASSERT_NOT_EQUAL_S8(expected, ...) assert_not_equal_s8(expected, __VA_ARGS__, VAS_END_SIGNATURE);
917 
927 #define C_ASSERT_EQUAL_U16(expected, ...) assert_equal_u16(expected, __VA_ARGS__, VAS_END_SIGNATURE);
928 
938 #define C_ASSERT_NOT_EQUAL_U16(expected, ...) assert_not_equal_u16(expected, __VA_ARGS__, VAS_END_SIGNATURE);
939 
949 #define C_ASSERT_EQUAL_S16(expected, ...) assert_equal_s16(expected, __VA_ARGS__, VAS_END_SIGNATURE);
950 
960 #define C_ASSERT_NOT_EQUAL_S16(expected, ...) assert_not_equal_s16(expected, __VA_ARGS__, VAS_END_SIGNATURE);
961 
971 #define C_ASSERT_EQUAL_U32(expected, ...) assert_equal_u32(expected, __VA_ARGS__, VAS_END_SIGNATURE);
972 
982 #define C_ASSERT_NOT_EQUAL_U32(expected, ...) assert_not_equal_u32(expected, __VA_ARGS__, VAS_END_SIGNATURE);
983 
993 #define C_ASSERT_EQUAL_S32(expected, ...) assert_equal_s32(expected, __VA_ARGS__, VAS_END_SIGNATURE);
994 
1004 #define C_ASSERT_NOT_EQUAL_S32(expected, ...) assert_not_equal_s32(expected, __VA_ARGS__, VAS_END_SIGNATURE);
1005 
1015 #define C_ASSERT_EQUAL_U64(expected, ...) assert_equal_u64(expected, __VA_ARGS__, VAS_END_SIGNATURE);
1016 
1026 #define C_ASSERT_NOT_EQUAL_U64(expected, ...) assert_not_equal_u64(expected, __VA_ARGS__, VAS_END_SIGNATURE);
1027 
1037 #define C_ASSERT_EQUAL_S64(expected, ...) assert_equal_s64(expected, __VA_ARGS__, VAS_END_SIGNATURE);
1038 
1048 #define C_ASSERT_NOT_EQUAL_S64(expected, ...) assert_not_equal_s64(expected, __VA_ARGS__, VAS_END_SIGNATURE);
1049 
1078 #define C_ASSERT_FAIL(...) assert_fail(__VA_ARGS__, VAS_END_SIGNATURE);
1079 
1080 #ifndef CTEST_DOC_SKIP
1081 #ifdef DEBUG_TEST
1082 // TEMPORARY FOR TESTS
1083 
1084  int load_test_vargs_for_test(void **, ...);
1085  int load_test_vargs_for_test_v2(void **, ...);
1086  int free_vargs_for_test(void *);
1087  char *ctest_setter_has_title(void *);
1088  char *ctest_setter_has_info(void *);
1089  char *ctest_setter_has_warn(void *);
1090  char *ctest_setter_has_onerror(void *);
1091  char *ctest_setter_has_onsuccess(void *);
1092  void show_message_text();
1093 #endif
1094 #endif
1095 
1096 #ifdef __cplusplus
1097 }
1098 #endif
1099 
1100 
void on_add_test(header_on_cb)
Call function callback on adding test event.
void end_tests()
This function is called in every tests.
void on_end_test(header_on_cb)
Call function callback if at the end of all tests (if success)
void rm_begin_test()
Removes callback pointer from global on_begin_test context.
void rm_on_test()
Removes callback pointer from global on_test context.
void rm_on_add_test()
Removes callback pointer from global rm_on_add_test context.
void on_abort(header_on_cb)
Call function callback if any test fails.
void rm_on_end_test()
Removes callback pointer from global rm_on_end_test context.
void rm_on_abort()
Removes callback pointer from global on_abort context.
void on_test(header_on_cb)
Call function callback on each test event.
void on_begin_test(header_on_cb)
Call function callback on each beginning test event.