From 446ff0d6cc58de3380ce39f506cb858ca2d2947f Mon Sep 17 00:00:00 2001 From: Alanscut Date: Wed, 27 Nov 2019 11:08:35 +0800 Subject: [PATCH] fix issue#327 --- tests/print_number.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/tests/print_number.c b/tests/print_number.c index f2385f3..3fbf9cb 100644 --- a/tests/print_number.c +++ b/tests/print_number.c @@ -27,6 +27,8 @@ static void assert_print_number(const char *expected, double input) { unsigned char printed[1024]; + unsigned char new_buffer[26]; + unsigned int i = 0; cJSON item[1]; printbuffer buffer = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } }; buffer.buffer = printed; @@ -34,11 +36,29 @@ static void assert_print_number(const char *expected, double input) buffer.offset = 0; buffer.noalloc = true; buffer.hooks = global_hooks; + buffer.buffer = new_buffer; memset(item, 0, sizeof(item)); + memset(new_buffer, 0, sizeof(new_buffer)); cJSON_SetNumberValue(item, input); - TEST_ASSERT_TRUE_MESSAGE(print_number(item, &buffer), "Failed to print number."); + + /* In MinGW or visual studio(before 2015),the exponten is represented using three digits,like:"1e-009","1e+017" + * remove extra "0" to output "1e-09" or "1e+17",which makes testcase PASS */ + for(i = 0;i 3 && new_buffer[i] =='0') + { + if((new_buffer[i-3] =='e' && new_buffer[i-2] == '-' && new_buffer[i] =='0') ||(new_buffer[i-2] =='e' && new_buffer[i-1] =='+')) + { + while(new_buffer[i] !='\0') + { + new_buffer[i] = new_buffer[i+1]; + i++; + } + } + } + } TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, buffer.buffer, "Printed number is not as expected."); }