long long fixes, enhancements, tests

This commit is contained in:
No Default Name
2022-04-24 20:13:29 +02:00
parent 586762189b
commit a1efa1e77f
4 changed files with 49 additions and 25 deletions

View File

@ -231,13 +231,13 @@ static void cjson_set_number_value_should_set_numbers(void)
TEST_ASSERT_EQUAL(-1, number->valueint);
TEST_ASSERT_EQUAL_DOUBLE(-1.5, number->valuedouble);
cJSON_SetNumberValue(number, 1 + (double)INT_MAX);
TEST_ASSERT_EQUAL(INT_MAX, number->valueint);
TEST_ASSERT_EQUAL_DOUBLE(1 + (double)INT_MAX, number->valuedouble);
cJSON_SetNumberValue(number, 1.0 + (double)CJSON_INT_MAX);
TEST_ASSERT_EQUAL(CJSON_INT_MAX, number->valueint);
TEST_ASSERT_EQUAL_DOUBLE(1.0 + (double)CJSON_INT_MAX, number->valuedouble);
cJSON_SetNumberValue(number, -1 + (double)INT_MIN);
TEST_ASSERT_EQUAL(INT_MIN, number->valueint);
TEST_ASSERT_EQUAL_DOUBLE(-1 + (double)INT_MIN, number->valuedouble);
cJSON_SetNumberValue(number, -1.0 + (double)CJSON_INT_MIN);
TEST_ASSERT_EQUAL(CJSON_INT_MIN, number->valueint);
TEST_ASSERT_EQUAL_DOUBLE(-1.0 + (double)CJSON_INT_MIN, number->valuedouble);
}
static void cjson_detach_item_via_pointer_should_detach_items(void)

View File

@ -43,7 +43,7 @@ static void assert_is_number(cJSON *number_item)
assert_has_no_string(number_item);
}
static void assert_parse_number(const char *string, int integer, double real)
static void assert_parse_number(const char *string, cJSON_int integer, double real)
{
parse_buffer buffer = { 0, 0, 0, 0, { 0, 0, 0 } };
buffer.content = (const unsigned char*)string;
@ -51,7 +51,11 @@ static void assert_parse_number(const char *string, int integer, double real)
TEST_ASSERT_TRUE(parse_number(item, &buffer));
assert_is_number(item);
#ifdef CJSON_INT_USE_LONGLONG
TEST_ASSERT_EQUAL_INT64(integer, item->valueint);
#else
TEST_ASSERT_EQUAL_INT(integer, item->valueint);
#endif
TEST_ASSERT_EQUAL_DOUBLE(real, item->valuedouble);
}
@ -66,14 +70,24 @@ static void parse_number_should_parse_negative_integers(void)
{
assert_parse_number("-1", -1, -1);
assert_parse_number("-32768", -32768, -32768.0);
assert_parse_number("-2147483648", (int)-2147483648.0, -2147483648.0);
assert_parse_number("-2147483648", -2147483648, -2147483648.0);
#ifdef CJSON_INT_USE_LONGLONG
assert_parse_number("-8765432101234567", -8765432101234567LL, -8765432101234567.0);
#else
assert_parse_number("-8765432101234567", CJSON_INT_MIN, -8765432101234567.0);
#endif
}
static void parse_number_should_parse_positive_integers(void)
{
assert_parse_number("1", 1, 1);
assert_parse_number("32767", 32767, 32767.0);
assert_parse_number("2147483647", (int)2147483647.0, 2147483647.0);
assert_parse_number("2147483647", 2147483647, 2147483647.0);
#ifdef CJSON_INT_USE_LONGLONG
assert_parse_number("8765432101234567", 8765432101234567LL, 8765432101234567.0);
#else
assert_parse_number("8765432101234567", CJSON_INT_MAX, 8765432101234567.0);
#endif
}
static void parse_number_should_parse_positive_reals(void)
@ -81,8 +95,11 @@ static void parse_number_should_parse_positive_reals(void)
assert_parse_number("0.001", 0, 0.001);
assert_parse_number("10e-10", 0, 10e-10);
assert_parse_number("10E-10", 0, 10e-10);
assert_parse_number("10e10", INT_MAX, 10e10);
assert_parse_number("123e+127", INT_MAX, 123e127);
#ifdef CJSON_INT_USE_LONGLONG
assert_parse_number("10e10", 100000000000LL, 10e10);
#endif
assert_parse_number("10e20", CJSON_INT_MAX, 10e20);
assert_parse_number("123e+127", CJSON_INT_MAX, 123e127);
assert_parse_number("123e-128", 0, 123e-128);
}
@ -91,8 +108,11 @@ static void parse_number_should_parse_negative_reals(void)
assert_parse_number("-0.001", 0, -0.001);
assert_parse_number("-10e-10", 0, -10e-10);
assert_parse_number("-10E-10", 0, -10e-10);
assert_parse_number("-10e20", INT_MIN, -10e20);
assert_parse_number("-123e+127", INT_MIN, -123e127);
#ifdef CJSON_INT_USE_LONGLONG
assert_parse_number("-10e10", -100000000000LL, -10e10);
#endif
assert_parse_number("-10e20", CJSON_INT_MIN, -10e20);
assert_parse_number("-123e+127", CJSON_INT_MIN, -123e127);
assert_parse_number("-123e-128", 0, -123e-128);
}