check_mem.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. #ifndef CHECK_MEM_H
  2. #define CHECK_MEM_H
  3. #if CHECK_MAJOR_VERSION == 0 && CHECK_MINOR_VERSION < 11
  4. #define _ck_assert_mem(X, Y, L, OP) \
  5. do { \
  6. const char* _ck_x = (const char*)(void*)(X); \
  7. const char* _ck_y = (const char*)(void*)(Y); \
  8. size_t _ck_l = (L); \
  9. char _ck_x_str[129]; \
  10. char _ck_y_str[129]; \
  11. static char _ck_hexdigits[] = "0123456789abcdef"; \
  12. size_t _ck_i; \
  13. for(_ck_i = 0; _ck_i < ((_ck_l > 64) ? 64 : _ck_l); _ck_i++) { \
  14. _ck_x_str[_ck_i * 2] = _ck_hexdigits[(_ck_x[_ck_i] >> 4) & 0xF]; \
  15. _ck_y_str[_ck_i * 2] = _ck_hexdigits[(_ck_y[_ck_i] >> 4) & 0xF]; \
  16. _ck_x_str[_ck_i * 2 + 1] = _ck_hexdigits[_ck_x[_ck_i] & 0xF]; \
  17. _ck_y_str[_ck_i * 2 + 1] = _ck_hexdigits[_ck_y[_ck_i] & 0xF]; \
  18. } \
  19. _ck_x_str[_ck_i * 2] = 0; \
  20. _ck_y_str[_ck_i * 2] = 0; \
  21. ck_assert_msg( \
  22. 0 OP memcmp(_ck_y, _ck_x, _ck_l), \
  23. "Assertion '" #X #OP #Y "' failed: " #X "==\"%s\", " #Y "==\"%s\"", \
  24. _ck_x_str, \
  25. _ck_y_str); \
  26. } while(0)
  27. #define ck_assert_mem_eq(X, Y, L) _ck_assert_mem(X, Y, L, ==)
  28. #define ck_assert_mem_ne(X, Y, L) _ck_assert_mem(X, Y, L, !=)
  29. #endif
  30. #endif