#include "../src/math.c" #include #include "../src/testing.h" static void test_add_size(void) { test_start("add_size()"); size_t val; { testing("zero values"); assert(add_size(0U, 0U, &val) == 0); assert(val == 0U); assert(add_size(1U, 0U, &val) == 0); assert(val == 1U); assert(add_size(0U, 1U, &val) == 0); assert(val == 1U); assert(add_size(0U, 3U, &val) == 0); assert(val == 3U); assert(add_size(30U, 0U, &val) == 0); assert(val == 30U); test_ok(); } { testing("small values"); assert(add_size(1U, 2U, &val) == 0); assert(val == 3U); assert(add_size(34U, 56U, &val) == 0); assert(val == 90U); assert(add_size(121U, 122U, &val) == 0); assert(val == 243U); test_ok(); } { testing("big values"); assert(add_size(SIZE_MAX, 0U, &val) == 0); assert(val == SIZE_MAX); assert(add_size(SIZE_MAX - 10U, 3U, &val) == 0); assert(val == (SIZE_MAX - 7U)); test_ok(); } { testing("overflowing values"); val = 0U; assert(add_size(SIZE_MAX, 1U, &val) != 0); assert(val == 0U); test_ok(); } } static void test_mul_size(void) { test_start("mul_size()"); size_t val; { testing("zero values"); assert(mul_size(1U, 1U, &val) == 0); assert(val == 1U); test_ok(); } { testing("small values"); assert(mul_size(2U, 3U, &val) == 0); assert(val == 6U); assert(mul_size(10U, 10U, &val) == 0); assert(val == 100U); assert(mul_size(15U, 15U, &val) == 0); assert(val == 225U); test_ok(); } { testing("big values"); assert(mul_size(SIZE_MAX, 1U, &val) == 0); assert(val == SIZE_MAX); assert(mul_size(1U, SIZE_MAX, &val) == 0); assert(val == SIZE_MAX); assert(mul_size(SIZE_MAX / 2U, 2U, &val) == 0); assert(val == SIZE_MAX - 1U); test_ok(); } { testing("overflowing values"); val = 123U; assert(mul_size(SIZE_MAX, 2U, &val) != 0); assert(val == 123U); assert(mul_size(3U, SIZE_MAX / 2U, &val) != 0); assert(val == 123U); test_ok(); } } int main(void) { int rc = EXIT_FAILURE; test_add_size(); test_mul_size(); rc = EXIT_SUCCESS; return rc; }