test: Add ut_asserteq_mem
authorMario Six <mario.six@gdsys.cc>
Thu, 27 Sep 2018 07:19:32 +0000 (09:19 +0200)
committerAnatolij Gustschin <agust@denx.de>
Fri, 28 Sep 2018 16:27:01 +0000 (18:27 +0200)
Add a unit test assert-method, which compares two given memory areas for
byte-wise equality.

Signed-off-by: Mario Six <mario.six@gdsys.cc>
Reviewed-by: Simon Glass <sjg@chromium.org>
include/test/ut.h

index fce75fd12a0d970b199b4fd8186e09211aa7ed40..19bcb8c3748d7002abf10adecfb966c350bebdc4 100644 (file)
@@ -78,6 +78,24 @@ void ut_failf(struct unit_test_state *uts, const char *fname, int line,
        }                                                               \
 }
 
+/* Assert that two memory areas are equal */
+#define ut_asserteq_mem(expr1, expr2, len) {                           \
+       const u8 *val1 = (u8 *)(expr1), *val2 = (u8 *)(expr2);          \
+       const uint __len = len;                                         \
+                                                                       \
+       if (memcmp(val1, val2, __len)) {                                \
+               char __buf1[64 + 1] = "\0";                             \
+               char __buf2[64 + 1] = "\0";                             \
+               bin2hex(__buf1, val1, min(__len, (uint)32));            \
+               bin2hex(__buf2, val2, min(__len, (uint)32));            \
+               ut_failf(uts, __FILE__, __LINE__, __func__,             \
+                        #expr1 " = " #expr2,                           \
+                        "Expected \"%s\", got \"%s\"",                 \
+                        __buf1, __buf2);                               \
+               return CMD_RET_FAILURE;                                 \
+       }                                                               \
+}
+
 /* Assert that two pointers are equal */
 #define ut_asserteq_ptr(expr1, expr2) {                                        \
        const void *val1 = (expr1), *val2 = (expr2);                    \