tests/test_list.c

changeset 1606
f5883f6e42e7
parent 1605
55b13f583356
child 1607
0ecb13118cac
equal deleted inserted replaced
1605:55b13f583356 1606:f5883f6e42e7
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);

mercurial