| | #include "../../unity/unity.h" |
| | #include <string.h> |
| | #include <stdlib.h> |
| |
|
| | |
| | void setUp(void) { |
| | |
| | } |
| | void tearDown(void) { |
| | |
| | } |
| |
|
| | |
| | static VALUE* make_integer_from_cstr(const char *s) |
| | { |
| | VALUE *v = xmalloc(sizeof *v); |
| | v->type = integer; |
| | int rc = mpz_init_set_str(v->u.i, s, 10); |
| | if (rc != 0) |
| | { |
| | TEST_FAIL_MESSAGE("mpz_init_set_str failed (invalid decimal input)"); |
| | } |
| | return v; |
| | } |
| |
|
| | static void test_tostring_integer_zero(void) |
| | { |
| | VALUE *v = int_value(0UL); |
| | tostring(v); |
| |
|
| | TEST_ASSERT_EQUAL_INT((int)string, (int)v->type); |
| | TEST_ASSERT_NOT_NULL(v->u.s); |
| | TEST_ASSERT_EQUAL_STRING("0", v->u.s); |
| |
|
| | freev(v); |
| | } |
| |
|
| | static void test_tostring_integer_positive_small(void) |
| | { |
| | VALUE *v = int_value(123456UL); |
| | tostring(v); |
| |
|
| | TEST_ASSERT_EQUAL_INT((int)string, (int)v->type); |
| | TEST_ASSERT_NOT_NULL(v->u.s); |
| | TEST_ASSERT_EQUAL_STRING("123456", v->u.s); |
| |
|
| | freev(v); |
| | } |
| |
|
| | static void test_tostring_integer_negative(void) |
| | { |
| | VALUE *v = make_integer_from_cstr("-9876543210"); |
| | tostring(v); |
| |
|
| | TEST_ASSERT_EQUAL_INT((int)string, (int)v->type); |
| | TEST_ASSERT_NOT_NULL(v->u.s); |
| | TEST_ASSERT_EQUAL_STRING("-9876543210", v->u.s); |
| |
|
| | freev(v); |
| | } |
| |
|
| | static void test_tostring_integer_large_number(void) |
| | { |
| | |
| | char big[256]; |
| | size_t ndigits = 200; |
| | memset(big, '9', ndigits); |
| | big[ndigits] = '\0'; |
| |
|
| | VALUE *v = make_integer_from_cstr(big); |
| |
|
| | |
| | tostring(v); |
| |
|
| | TEST_ASSERT_EQUAL_INT((int)string, (int)v->type); |
| | TEST_ASSERT_NOT_NULL(v->u.s); |
| | TEST_ASSERT_EQUAL_STRING(big, v->u.s); |
| |
|
| | freev(v); |
| | } |
| |
|
| | static void test_tostring_on_string_is_noop(void) |
| | { |
| | VALUE *v = str_value("hello world"); |
| | char *orig_ptr = v->u.s; |
| |
|
| | tostring(v); |
| |
|
| | TEST_ASSERT_EQUAL_INT((int)string, (int)v->type); |
| | TEST_ASSERT_EQUAL_PTR(orig_ptr, v->u.s); |
| | TEST_ASSERT_EQUAL_STRING("hello world", v->u.s); |
| |
|
| | freev(v); |
| | } |
| |
|
| | static void test_tostring_double_call_idempotence(void) |
| | { |
| | VALUE *v = int_value(42UL); |
| | tostring(v); |
| | TEST_ASSERT_EQUAL_INT((int)string, (int)v->type); |
| | TEST_ASSERT_NOT_NULL(v->u.s); |
| | TEST_ASSERT_EQUAL_STRING("42", v->u.s); |
| |
|
| | char *first_ptr = v->u.s; |
| | tostring(v); |
| | TEST_ASSERT_EQUAL_INT((int)string, (int)v->type); |
| | TEST_ASSERT_EQUAL_PTR(first_ptr, v->u.s); |
| | TEST_ASSERT_EQUAL_STRING("42", v->u.s); |
| |
|
| | freev(v); |
| | } |
| |
|
| | int main(void) |
| | { |
| | UNITY_BEGIN(); |
| |
|
| | RUN_TEST(test_tostring_integer_zero); |
| | RUN_TEST(test_tostring_integer_positive_small); |
| | RUN_TEST(test_tostring_integer_negative); |
| | RUN_TEST(test_tostring_integer_large_number); |
| | RUN_TEST(test_tostring_on_string_is_noop); |
| | RUN_TEST(test_tostring_double_call_idempotence); |
| |
|
| | return UNITY_END(); |
| | } |