| 36 |
36 |
| 37 #include <stdarg.h> |
37 #include <stdarg.h> |
| 38 #include <errno.h> |
38 #include <errno.h> |
| 39 |
39 |
| 40 CX_TEST(test_array_add) { |
40 CX_TEST(test_array_add) { |
| 41 CX_ARRAY_DECLARE(int, arr); |
41 CX_ARRAY(int, arr); |
| 42 arr = cxCallocDefault(5, sizeof(int)); |
42 cx_array_init(arr, 5); |
| 43 arr[0] = 2; |
43 arr.data[0] = 2; |
| 44 arr[1] = 3; |
44 arr.data[1] = 3; |
| 45 arr[2] = 5; |
45 arr.data[2] = 5; |
| 46 arr[3] = 7; |
46 arr.data[3] = 7; |
| 47 arr[4] = 11; |
47 arr.data[4] = 11; |
| 48 arr_size = 3; |
48 arr.size = 3; |
| 49 arr_capacity = 5; |
49 arr.capacity = 5; |
| 50 int elem = 8, elem2 = 47; |
50 int elem = 8, elem2 = 47; |
| 51 int result; |
51 int result; |
| 52 CX_TEST_DO { |
52 CX_TEST_DO { |
| 53 result = cx_array_simple_add(arr, elem); |
53 result = cx_array_add(arr, &elem); |
| 54 CX_TEST_ASSERT(result == 0); |
54 CX_TEST_ASSERT(result == 0); |
| 55 CX_TEST_ASSERT(arr[0] == 2); |
55 CX_TEST_ASSERT(arr.data[0] == 2); |
| 56 CX_TEST_ASSERT(arr[1] == 3); |
56 CX_TEST_ASSERT(arr.data[1] == 3); |
| 57 CX_TEST_ASSERT(arr[2] == 5); |
57 CX_TEST_ASSERT(arr.data[2] == 5); |
| 58 CX_TEST_ASSERT(arr[3] == 8); |
58 CX_TEST_ASSERT(arr.data[3] == 8); |
| 59 CX_TEST_ASSERT(arr[4] == 11); |
59 CX_TEST_ASSERT(arr.data[4] == 11); |
| 60 CX_TEST_ASSERT(arr_size == 4); |
60 CX_TEST_ASSERT(arr.size == 4); |
| 61 CX_TEST_ASSERT(arr_capacity == 5); |
61 CX_TEST_ASSERT(arr.capacity == 5); |
| 62 |
62 |
| 63 arr_size = 5; |
63 arr.size = 5; |
| 64 result = cx_array_simple_add(arr, elem2); |
64 result = cx_array_add(arr, &elem2); |
| 65 CX_TEST_ASSERT(result == 0); |
65 CX_TEST_ASSERT(result == 0); |
| 66 CX_TEST_ASSERT(arr[0] == 2); |
66 CX_TEST_ASSERT(arr.data[0] == 2); |
| 67 CX_TEST_ASSERT(arr[1] == 3); |
67 CX_TEST_ASSERT(arr.data[1] == 3); |
| 68 CX_TEST_ASSERT(arr[2] == 5); |
68 CX_TEST_ASSERT(arr.data[2] == 5); |
| 69 CX_TEST_ASSERT(arr[3] == 8); |
69 CX_TEST_ASSERT(arr.data[3] == 8); |
| 70 CX_TEST_ASSERT(arr[4] == 11); |
70 CX_TEST_ASSERT(arr.data[4] == 11); |
| 71 CX_TEST_ASSERT(arr[5] == 47); |
71 CX_TEST_ASSERT(arr.data[5] == 47); |
| 72 CX_TEST_ASSERT(arr_size == 6); |
72 CX_TEST_ASSERT(arr.size == 6); |
| 73 CX_TEST_ASSERT(arr_capacity >= 6); |
73 CX_TEST_ASSERT(arr.capacity >= 6); |
| 74 } |
74 } |
| 75 cxFreeDefault(arr); |
75 cx_array_free(arr); |
| 76 } |
|
| 77 |
|
| 78 CX_TEST(test_array_add8) { |
|
| 79 CX_ARRAY_DECLARE_SIZED(int, arr, uint8_t); |
|
| 80 arr = cxCallocDefault(5, sizeof(int)); |
|
| 81 arr[0] = 2; |
|
| 82 arr[1] = 3; |
|
| 83 arr[2] = 5; |
|
| 84 arr[3] = 7; |
|
| 85 arr[4] = 11; |
|
| 86 arr_size = 3; |
|
| 87 arr_capacity = 5; |
|
| 88 int elem = 8, elem2 = 47; |
|
| 89 int result; |
|
| 90 CX_TEST_DO { |
|
| 91 result = cx_array_simple_add(arr, elem); |
|
| 92 CX_TEST_ASSERT(result == 0); |
|
| 93 CX_TEST_ASSERT(arr[0] == 2); |
|
| 94 CX_TEST_ASSERT(arr[1] == 3); |
|
| 95 CX_TEST_ASSERT(arr[2] == 5); |
|
| 96 CX_TEST_ASSERT(arr[3] == 8); |
|
| 97 CX_TEST_ASSERT(arr[4] == 11); |
|
| 98 CX_TEST_ASSERT(arr_size == 4); |
|
| 99 CX_TEST_ASSERT(arr_capacity == 5); |
|
| 100 |
|
| 101 arr_size = 5; |
|
| 102 result = cx_array_simple_add(arr, elem2); |
|
| 103 CX_TEST_ASSERT(result == 0); |
|
| 104 CX_TEST_ASSERT(arr[0] == 2); |
|
| 105 CX_TEST_ASSERT(arr[1] == 3); |
|
| 106 CX_TEST_ASSERT(arr[2] == 5); |
|
| 107 CX_TEST_ASSERT(arr[3] == 8); |
|
| 108 CX_TEST_ASSERT(arr[4] == 11); |
|
| 109 CX_TEST_ASSERT(arr[5] == 47); |
|
| 110 CX_TEST_ASSERT(arr_size == 6); |
|
| 111 CX_TEST_ASSERT(arr_capacity >= 6); |
|
| 112 |
|
| 113 result = cx_array_simple_copy(arr, 260, &elem, 1); |
|
| 114 CX_TEST_ASSERT(result != 0); |
|
| 115 CX_TEST_ASSERT(errno == EOVERFLOW); |
|
| 116 CX_TEST_ASSERT(arr_size == 6); |
|
| 117 CX_TEST_ASSERT(arr_capacity < 128); |
|
| 118 } |
|
| 119 cxFreeDefault(arr); |
|
| 120 } |
|
| 121 |
|
| 122 CX_TEST(test_array_add16) { |
|
| 123 CX_ARRAY_DECLARE_SIZED(char, arr, uint16_t); |
|
| 124 cx_array_initialize(arr, 300); |
|
| 125 arr_size = 270; |
|
| 126 int result; |
|
| 127 CX_TEST_DO { |
|
| 128 char elem = 'A'; |
|
| 129 result = cx_array_simple_add(arr, elem); |
|
| 130 CX_TEST_ASSERT(result == 0); |
|
| 131 CX_TEST_ASSERT(arr[270] == 'A'); |
|
| 132 CX_TEST_ASSERT(arr_size == 271); |
|
| 133 CX_TEST_ASSERT(arr_capacity == 300); |
|
| 134 |
|
| 135 char *hello = "Hello"; |
|
| 136 result = cx_array_simple_copy(arr, 9000, hello, 5); |
|
| 137 CX_TEST_ASSERT(result == 0); |
|
| 138 CX_TEST_ASSERT(arr[9000] == 'H'); |
|
| 139 CX_TEST_ASSERT(arr[9001] == 'e'); |
|
| 140 CX_TEST_ASSERT(arr[9002] == 'l'); |
|
| 141 CX_TEST_ASSERT(arr[9003] == 'l'); |
|
| 142 CX_TEST_ASSERT(arr[9004] == 'o'); |
|
| 143 CX_TEST_ASSERT(arr_size == 9005); |
|
| 144 CX_TEST_ASSERT(arr_capacity == 9*1024); |
|
| 145 |
|
| 146 // does not fit into 16-bit sized array |
|
| 147 result = cx_array_simple_copy(arr, 65532, hello, 5); |
|
| 148 CX_TEST_ASSERT(result != 0); |
|
| 149 CX_TEST_ASSERT(errno == EOVERFLOW); |
|
| 150 CX_TEST_ASSERT(arr_size == 9005); |
|
| 151 CX_TEST_ASSERT(arr_capacity == 9*1024); |
|
| 152 } |
|
| 153 cxFreeDefault(arr); |
|
| 154 } |
|
| 155 |
|
| 156 CX_TEST(test_array_copy_unsupported_width) { |
|
| 157 CX_ARRAY_DECLARE_SIZED(int, arr, uint16_t); |
|
| 158 cx_array_initialize(arr, 16); |
|
| 159 int result; |
|
| 160 CX_TEST_DO { |
|
| 161 int elem = 5; |
|
| 162 result = cx_array_copy( |
|
| 163 (void **) &(arr), |
|
| 164 &(arr_size), |
|
| 165 &(arr_capacity), |
|
| 166 12, // unsupported width |
|
| 167 5, |
|
| 168 &elem, sizeof(int), |
|
| 169 1, |
|
| 170 cx_array_default_reallocator |
|
| 171 ); |
|
| 172 CX_TEST_ASSERT(result != 0); |
|
| 173 CX_TEST_ASSERT(errno == EINVAL); |
|
| 174 CX_TEST_ASSERT(arr_size == 0); |
|
| 175 CX_TEST_ASSERT(arr_capacity == 16); |
|
| 176 } |
|
| 177 cxFreeDefault(arr); |
|
| 178 } |
76 } |
| 179 |
77 |
| 180 CX_TEST(test_array_copy_overlap) { |
78 CX_TEST(test_array_copy_overlap) { |
| 181 CX_ARRAY_DECLARE_SIZED(char, arr, uint8_t); |
79 CX_ARRAY_DECLARE_SIZED(char, arr, uint8_t); |
| 182 cx_array_initialize(arr, 16); |
80 cx_array_initialize(arr, 16); |
| 3448 |
3346 |
| 3449 CxTestSuite *cx_test_suite_array_list(void) { |
3347 CxTestSuite *cx_test_suite_array_list(void) { |
| 3450 CxTestSuite *suite = cx_test_suite_new("array_list"); |
3348 CxTestSuite *suite = cx_test_suite_new("array_list"); |
| 3451 |
3349 |
| 3452 cx_test_register(suite, test_array_add); |
3350 cx_test_register(suite, test_array_add); |
| 3453 cx_test_register(suite, test_array_add8); |
|
| 3454 cx_test_register(suite, test_array_add16); |
|
| 3455 cx_test_register(suite, test_array_copy_unsupported_width); |
|
| 3456 cx_test_register(suite, test_array_copy_overlap); |
3351 cx_test_register(suite, test_array_copy_overlap); |
| 3457 cx_test_register(suite, test_array_reserve); |
3352 cx_test_register(suite, test_array_reserve); |
| 3458 cx_test_register(suite, test_array_reserve_unsupported_width); |
3353 cx_test_register(suite, test_array_reserve_unsupported_width); |
| 3459 cx_test_register(suite, test_array_insert_sorted); |
3354 cx_test_register(suite, test_array_insert_sorted); |
| 3460 cx_test_register(suite, test_array_insert_unique); |
3355 cx_test_register(suite, test_array_insert_unique); |