# HG changeset patch # User Mike Becker # Date 1766163255 -3600 # Node ID 5ed91801f79dd18e006e0237262bb7283c667702 # Parent 4983b6a349969e2b71770332b16c8ca20f2e15ec add test for growing an array's capacity diff -r 4983b6a34996 -r 5ed91801f79d tests/test_list.c --- 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);