From 362dd3fbcf1dc96c07f93fca80375756ef6386ed Mon Sep 17 00:00:00 2001 From: Bogdan Marinescu Date: Wed, 25 Apr 2018 22:31:16 +0300 Subject: [PATCH] Bugfixes for the implementation and the compliance test In the implementation, don't always display double hex digits when printing with "%X". This is in line with the behaviour observed both in mbed OS's printf (Newlib) and Linux's printf (glibc). In the tests, always compare the baseline result with the result returned by the minimal printf implementation, instead of comparing with a constant value. --- .../TESTS/minimal-printf/compliance/main.cpp | 118 +++++++++--------- .../mbed_printf_implementation.c | 17 ++- 2 files changed, 70 insertions(+), 65 deletions(-) diff --git a/features/minimal-printf/TESTS/minimal-printf/compliance/main.cpp b/features/minimal-printf/TESTS/minimal-printf/compliance/main.cpp index ca9e82cb1b..79e33589aa 100755 --- a/features/minimal-printf/TESTS/minimal-printf/compliance/main.cpp +++ b/features/minimal-printf/TESTS/minimal-printf/compliance/main.cpp @@ -95,11 +95,11 @@ static control_t test_printf_d(const size_t call_count) #else result_minimal = mbed_printf("jd: %jd\r\n", INT32_MIN); result_baseline = printf("jd: %jd\r\n", (intmax_t) INT32_MIN); - TEST_ASSERT_EQUAL_INT(17, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("jd: %jd\r\n", INT32_MAX); result_baseline = printf("jd: %jd\r\n", (intmax_t) INT32_MAX); - TEST_ASSERT_EQUAL_INT(16, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -107,11 +107,11 @@ static control_t test_printf_d(const size_t call_count) #else result_minimal = mbed_printf("zd: %zd\r\n", INT32_MIN); result_baseline = printf("zd: %zd\r\n", (ssize_t) INT32_MIN); - TEST_ASSERT_EQUAL_INT(17, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("zd: %zd\r\n", INT32_MAX); result_baseline = printf("zd: %zd\r\n", (ssize_t) INT32_MAX); - TEST_ASSERT_EQUAL_INT(16, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -119,11 +119,11 @@ static control_t test_printf_d(const size_t call_count) #else result_minimal = mbed_printf("td: %td\r\n", PTRDIFF_MIN); result_baseline = printf("td: %td\r\n", PTRDIFF_MIN); - TEST_ASSERT_EQUAL_INT(17, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("td: %td\r\n", PTRDIFF_MAX); result_baseline = printf("td: %td\r\n", PTRDIFF_MAX); - TEST_ASSERT_EQUAL_INT(16, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif return CaseNext; @@ -181,11 +181,11 @@ static control_t test_printf_u(const size_t call_count) #else result_minimal = mbed_printf("ju: %ju\r\n", 0); result_baseline = printf("ju: %ju\r\n",(uintmax_t) 0); - TEST_ASSERT_EQUAL_INT(7, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("ju: %ju\r\n", UINTMAX_MAX); result_baseline = printf("ju: %ju\r\n", UINTMAX_MAX); - TEST_ASSERT_EQUAL_INT(7, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -193,11 +193,11 @@ static control_t test_printf_u(const size_t call_count) #else result_minimal = mbed_printf("zu: %zu\r\n", 0); result_baseline = printf("zu: %zu\r\n", 0); - TEST_ASSERT_EQUAL_INT(7, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("zu: %zu\r\n", SIZE_MAX); result_baseline = printf("zu: %zu\r\n", SIZE_MAX); - TEST_ASSERT_EQUAL_INT(16, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -205,11 +205,11 @@ static control_t test_printf_u(const size_t call_count) #else result_minimal = mbed_printf("tu: %tu\r\n", 0); result_baseline = printf("tu: %tu\r\n", 0); - TEST_ASSERT_EQUAL_INT(7, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("tu: %tu\r\n", UINTPTR_MAX); result_baseline = printf("tu: %tu\r\n", UINTPTR_MAX); - TEST_ASSERT_EQUAL_INT(26, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif return CaseNext; @@ -222,11 +222,9 @@ static control_t test_printf_x(const size_t call_count) /*************************************************************************/ /*************************************************************************/ - printf("%%x always prints even characters\r\n"); - result_minimal = mbed_printf("hhX: %hhX\r\n", 0); result_baseline = printf("hhX: %hhX\r\n", 0); - TEST_ASSERT_EQUAL_INT(9, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("hhX: %hhX\r\n", UCHAR_MAX); result_baseline = printf("hhX: %hhX\r\n", UCHAR_MAX); @@ -234,7 +232,7 @@ static control_t test_printf_x(const size_t call_count) result_minimal = mbed_printf("hX: %hX\r\n", 0); result_baseline = printf("hX: %hX\r\n", 0); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("hX: %hX\r\n", USHRT_MAX); result_baseline = printf("hX: %hX\r\n", USHRT_MAX); @@ -242,7 +240,7 @@ static control_t test_printf_x(const size_t call_count) result_minimal = mbed_printf("X: %X\r\n", 0); result_baseline = printf("X: %X\r\n", 0); - TEST_ASSERT_EQUAL_INT(7, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("X: %X\r\n", UINT_MAX); result_baseline = printf("X: %X\r\n", UINT_MAX); @@ -250,7 +248,7 @@ static control_t test_printf_x(const size_t call_count) result_minimal = mbed_printf("lX: %lX\r\n", 0); result_baseline = printf("lX: %lX\r\n", 0UL); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("lX: %lX\r\n", ULONG_MAX); result_baseline = printf("lX: %lX\r\n", ULONG_MAX); @@ -258,7 +256,7 @@ static control_t test_printf_x(const size_t call_count) result_minimal = mbed_printf("llX: %llX\r\n", 0); result_baseline = printf("llX: %llX\r\n", 0ULL); - TEST_ASSERT_EQUAL_INT(9, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("llX: %llX\r\n", ULLONG_MAX); result_baseline = printf("llX: %llX\r\n", ULLONG_MAX); @@ -269,11 +267,11 @@ static control_t test_printf_x(const size_t call_count) #else result_minimal = mbed_printf("jX: %jX\r\n", 0); result_baseline = printf("jX: %jX\r\n", (uintmax_t) 0); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("jX: %jX\r\n", UINTMAX_MAX); result_baseline = printf("jX: %jX\r\n", UINTMAX_MAX); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -281,11 +279,11 @@ static control_t test_printf_x(const size_t call_count) #else result_minimal = mbed_printf("zX: %zX\r\n", 0); result_baseline = printf("zX: %zX\r\n", 0); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("zX: %zX\r\n", SIZE_MAX); result_baseline = printf("zX: %zX\r\n", SIZE_MAX); - TEST_ASSERT_EQUAL_INT(14, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -293,11 +291,11 @@ static control_t test_printf_x(const size_t call_count) #else result_minimal = mbed_printf("tX: %tX\r\n", 0); result_baseline = printf("tX: %tX\r\n", 0); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("tX: %tX\r\n", UINTPTR_MAX); result_baseline = printf("tX: %tX\r\n", UINTPTR_MAX); - TEST_ASSERT_EQUAL_INT(22, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif return CaseNext; @@ -374,12 +372,12 @@ static control_t test_snprintf_d(const size_t call_count) result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "jd: %jd\r\n", INT32_MIN); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "jd: %jd\r\n", (intmax_t) INT32_MIN); TEST_ASSERT_EQUAL_STRING("jd: -2147483648\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(17, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "jd: %jd\r\n", INT32_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "jd: %jd\r\n", (intmax_t) INT32_MAX); TEST_ASSERT_EQUAL_STRING("jd: 2147483647\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(16, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -388,12 +386,12 @@ static control_t test_snprintf_d(const size_t call_count) result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "zd: %zd\r\n", INT32_MIN); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "zd: %zd\r\n", (ssize_t) INT32_MIN); TEST_ASSERT_EQUAL_STRING("zd: -2147483648\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(17, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "zd: %zd\r\n", INT32_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "zd: %zd\r\n", (ssize_t) INT32_MAX); TEST_ASSERT_EQUAL_STRING("zd: 2147483647\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(16, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -402,12 +400,12 @@ static control_t test_snprintf_d(const size_t call_count) result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "td: %td\r\n", PTRDIFF_MIN); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "td: %td\r\n", PTRDIFF_MIN); TEST_ASSERT_EQUAL_STRING("td: -2147483648\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(17, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "td: %td\r\n", PTRDIFF_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "td: %td\r\n", PTRDIFF_MAX); TEST_ASSERT_EQUAL_STRING("td: 2147483647\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(16, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif return CaseNext; @@ -478,12 +476,12 @@ static control_t test_snprintf_u(const size_t call_count) result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "ju: %ju\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "ju: %ju\r\n", (uintmax_t) 0); TEST_ASSERT_EQUAL_STRING("ju: 0\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(7, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "ju: %ju\r\n", UINTMAX_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "ju: %ju\r\n", UINTMAX_MAX); TEST_ASSERT_EQUAL_STRING("ju: 0\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(7, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -492,12 +490,12 @@ static control_t test_snprintf_u(const size_t call_count) result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "zu: %zu\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "zu: %zu\r\n", 0); TEST_ASSERT_EQUAL_STRING("zu: 0\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(7, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "zu: %zu\r\n", SIZE_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "zu: %zu\r\n", SIZE_MAX); TEST_ASSERT_EQUAL_STRING("zu: 4294967295\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(16, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -506,12 +504,12 @@ static control_t test_snprintf_u(const size_t call_count) result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "tu: %tu\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "tu: %tu\r\n", 0); TEST_ASSERT_EQUAL_STRING("tu: 0\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(7, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "tu: %tu\r\n", UINTPTR_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "tu: %tu\r\n", UINTPTR_MAX); TEST_ASSERT_EQUAL_STRING("tu: 18446744073709551615\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(26, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif return CaseNext; @@ -526,12 +524,10 @@ static control_t test_snprintf_x(const size_t call_count) /*************************************************************************/ /*************************************************************************/ - printf("%%x always prints even characters\r\n"); - result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "hhX: %hhX\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "hhX: %hhX\r\n", 0); - TEST_ASSERT_EQUAL_STRING("hhX: 00\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(9, result_minimal); + TEST_ASSERT_EQUAL_STRING("hhX: 0\r\n", buffer_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "hhX: %hhX\r\n", UCHAR_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "hhX: %hhX\r\n", UCHAR_MAX); @@ -540,8 +536,8 @@ static control_t test_snprintf_x(const size_t call_count) result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "hX: %hX\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "hX: %hX\r\n", 0); - TEST_ASSERT_EQUAL_STRING("hX: 00\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_STRING("hX: 0\r\n", buffer_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "hX: %hX\r\n", USHRT_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "hX: %hX\r\n", USHRT_MAX); @@ -549,8 +545,8 @@ static control_t test_snprintf_x(const size_t call_count) result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "X: %X\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "X: %X\r\n", 0); - TEST_ASSERT_EQUAL_STRING("X: 00\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(7, result_minimal); + TEST_ASSERT_EQUAL_STRING("X: 0\r\n", buffer_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "X: %X\r\n", UINT_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "X: %X\r\n", UINT_MAX); @@ -559,8 +555,8 @@ static control_t test_snprintf_x(const size_t call_count) result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "lX: %lX\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "lX: %lX\r\n", 0UL); - TEST_ASSERT_EQUAL_STRING("lX: 00\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_STRING("lX: 0\r\n", buffer_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "lX: %lX\r\n", ULONG_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "lX: %lX\r\n", ULONG_MAX); @@ -569,8 +565,8 @@ static control_t test_snprintf_x(const size_t call_count) result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "llX: %llX\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "llX: %llX\r\n", 0ULL); - TEST_ASSERT_EQUAL_STRING("llX: 00\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(9, result_minimal); + TEST_ASSERT_EQUAL_STRING("llX: 0\r\n", buffer_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "llX: %llX\r\n", ULLONG_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "llX: %llX\r\n", ULLONG_MAX); @@ -582,13 +578,13 @@ static control_t test_snprintf_x(const size_t call_count) #else result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "jX: %jX\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "jX: %jX\r\n", (uintmax_t) 0); - TEST_ASSERT_EQUAL_STRING("jX: 00\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_STRING("jX: 0\r\n", buffer_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "jX: %jX\r\n", UINTMAX_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "jX: %jX\r\n", UINTMAX_MAX); - TEST_ASSERT_EQUAL_STRING("jX: 00\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_STRING("jX: 0\r\n", buffer_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -596,13 +592,13 @@ static control_t test_snprintf_x(const size_t call_count) #else result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "zX: %zX\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "zX: %zX\r\n", 0); - TEST_ASSERT_EQUAL_STRING("zX: 00\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_STRING("zX: 0\r\n", buffer_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "zX: %zX\r\n", SIZE_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "zX: %zX\r\n", SIZE_MAX); TEST_ASSERT_EQUAL_STRING("zX: FFFFFFFF\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(14, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif #ifdef TARGET_LIKE_MBED @@ -610,13 +606,13 @@ static control_t test_snprintf_x(const size_t call_count) #else result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "tX: %tX\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "tX: %tX\r\n", 0); - TEST_ASSERT_EQUAL_STRING("tX: 00\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_STRING("tX: 0\r\n", buffer_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "tX: %tX\r\n", UINTPTR_MAX); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "tX: %tX\r\n", UINTPTR_MAX); TEST_ASSERT_EQUAL_STRING("tX: FFFFFFFFFFFFFFFF\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(22, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); #endif return CaseNext; @@ -638,7 +634,7 @@ static control_t test_printf_f(const size_t call_count) result_minimal = mbed_printf("f: %f\r\n", 0); result_baseline = printf("f: %f\r\n", 0); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_printf("f: %f\r\n", pi); result_baseline = printf("f: %f\r\n", pi); @@ -667,7 +663,7 @@ static control_t test_snprintf_f(const size_t call_count) result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "f: %f\r\n", 0); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "f: %f\r\n", 0); TEST_ASSERT_EQUAL_STRING("f: 0.0\r\n", buffer_minimal); - TEST_ASSERT_EQUAL_INT(8, result_minimal); + TEST_ASSERT_EQUAL_INT(result_baseline, result_minimal); result_minimal = mbed_snprintf(buffer_minimal, sizeof(buffer_minimal), "f: %f\r\n", pi); result_baseline = snprintf(buffer_baseline, sizeof(buffer_baseline), "f: %f\r\n", pi); diff --git a/features/minimal-printf/mbed_printf_implementation.c b/features/minimal-printf/mbed_printf_implementation.c index 7a63c12cfd..404815fa0b 100644 --- a/features/minimal-printf/mbed_printf_implementation.c +++ b/features/minimal-printf/mbed_printf_implementation.c @@ -18,6 +18,8 @@ #include #include +#include +#include /***************************/ /* MBED */ @@ -272,16 +274,23 @@ static void mbed_minimal_formatted_string_hexadecimal(char* buffer, size_t lengt /* write to buffer or stdout */ if (buffer) { - buffer[*result] = int2hex[nibble_one]; - buffer[*result + 1] = int2hex[nibble_two]; + if (nibble_one != 0) { + buffer[*result] = int2hex[nibble_one]; + *result += 1; + } + buffer[*result] = int2hex[nibble_two]; + *result += 1; } else { - MBED_PRINT_CHARACTER(int2hex[nibble_one]); + if (nibble_one != 0) { + MBED_PRINT_CHARACTER(int2hex[nibble_one]); + *result += 1; + } MBED_PRINT_CHARACTER(int2hex[nibble_two]); + *result += 1; } - *result += 2; } } }