--- a/tests/test_list.c Fri Dec 19 17:41:53 2025 +0100 +++ b/tests/test_list.c Fri Dec 19 17:54:15 2025 +0100 @@ -74,6 +74,69 @@ cx_array_free(arr); } +CX_TEST(test_array_add_capacity_grow_strategy) { + /* + * if (cap < 128) alignment = 16; + * else if (cap < 1024) alignment = 64; + * else if (cap < 8192) alignment = 512; + * else alignment = 1024; + */ + CX_ARRAY(char, arr); + cx_array_init(arr, 5); + CX_TEST_DO { + int elem = 42; + + arr.size = 5; + CX_TEST_ASSERT(cx_array_add(arr, elem) == 0); + CX_TEST_ASSERT(arr.size == 6); + CX_TEST_ASSERT(arr.capacity == 16); + arr.size = 16; + CX_TEST_ASSERT(cx_array_add(arr, elem) == 0); + CX_TEST_ASSERT(arr.size == 17); + CX_TEST_ASSERT(arr.capacity == 32); + + CX_TEST_ASSERT(0 == cx_array_reserve(arr, 600)); + CX_TEST_ASSERT(arr.size == 17); + CX_TEST_ASSERT(arr.capacity == 600); + + arr.size = 600; + CX_TEST_ASSERT(cx_array_add(arr, elem) == 0); + CX_TEST_ASSERT(arr.size == 601); + CX_TEST_ASSERT(arr.capacity == 640); + arr.size = 640; + CX_TEST_ASSERT(cx_array_add(arr, elem) == 0); + CX_TEST_ASSERT(arr.size == 641); + CX_TEST_ASSERT(arr.capacity == 704); + + CX_TEST_ASSERT(0 == cx_array_reserve(arr, 7000)); + CX_TEST_ASSERT(arr.size == 641); + CX_TEST_ASSERT(arr.capacity == 7000); + + arr.size = 7000; + CX_TEST_ASSERT(cx_array_add(arr, elem) == 0); + CX_TEST_ASSERT(arr.size == 7001); + CX_TEST_ASSERT(arr.capacity == 7168); + arr.size = 7168; + CX_TEST_ASSERT(cx_array_add(arr, elem) == 0); + CX_TEST_ASSERT(arr.size == 7169); + CX_TEST_ASSERT(arr.capacity == 7680); + + CX_TEST_ASSERT(0 == cx_array_reserve(arr, 9000)); + CX_TEST_ASSERT(arr.size == 7169); + CX_TEST_ASSERT(arr.capacity == 9000); + + arr.size = 9000; + CX_TEST_ASSERT(cx_array_add(arr, elem) == 0); + CX_TEST_ASSERT(arr.size == 9001); + CX_TEST_ASSERT(arr.capacity == 9216); + arr.size = 9216; + CX_TEST_ASSERT(cx_array_add(arr, elem) == 0); + CX_TEST_ASSERT(arr.size == 9217); + CX_TEST_ASSERT(arr.capacity == 10240); + } + cx_array_free(arr); +} + CX_TEST(test_array_remove) { CX_ARRAY(int, arr); cx_array_init(arr, 5); @@ -3438,6 +3501,7 @@ CxTestSuite *suite = cx_test_suite_new("array (low-level)"); cx_test_register(suite, test_array_add); + cx_test_register(suite, test_array_add_capacity_grow_strategy); cx_test_register(suite, test_array_remove); cx_test_register(suite, test_array_remove_fast); cx_test_register(suite, test_array_remove_array);