From 0ad5c845d2c5fb709cc4eb4ef7f9309684f75934 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Sun, 18 Jan 2015 00:47:59 -0600 Subject: structinit test: show which byte differs --- tests/structinit/structinit.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/tests/structinit/structinit.c b/tests/structinit/structinit.c index 0e00ab5a0..620743b90 100644 --- a/tests/structinit/structinit.c +++ b/tests/structinit/structinit.c @@ -25,11 +25,8 @@ do { \ structname structname##_func_latest; \ int structname##_curr_ver = structver - 1; \ cl_git_pass(funcinitname(&structname##_func_latest, structver)); \ - cl_check_( \ - memcmp(&structname##_macro_latest, &structname##_func_latest, \ - sizeof(structname)) == 0, \ - "Macro-based and function-based initializer for " STRINGIFY(structname) \ - " are not equivalent."); \ + options_cmp(&structname##_macro_latest, &structname##_func_latest, \ + sizeof(structname), STRINGIFY(structname)); \ \ while (structname##_curr_ver > 0) \ { \ @@ -39,6 +36,24 @@ do { \ }\ } while(0) +static void options_cmp(void *one, void *two, size_t size, const char *name) +{ + size_t i; + + for (i = 0; i < size; i++) { + if (((char *)one)[i] != ((char *)two)[i]) { + char desc[1024]; + + p_snprintf(desc, 1024, "Difference in %s at byte %d: macro=%u / func=%u", + name, i, ((char *)one)[i], ((char *)two)[i]); + clar__fail(__FILE__, __LINE__, + "Difference between macro and function options initializer", + desc, 0); + return; + } + } +} + void test_structinit_structinit__compare(void) { /* blame */ -- cgit v1.2.1