17#define CVECTOR_IMPLEMENTATION
18#ifdef USE_POSIX_STRDUP
19#define CVEC_STRDUP strdup
23#define RESIZE(a) ((a+1)*2)
41#define CVECTOR_short_IMPLEMENTATION
42#define CVECTOR_f_struct_IMPLEMENTATION
52#define RESIZE(a) ((a+1)*2)
66#include <CUnit/Automated.h>
78 CU_ASSERT_EQUAL(0, vec.
size);
83 CU_ASSERT_EQUAL(100, vec.
size);
85 for (i=0; i<vec.
size; i++)
86 CU_ASSERT_EQUAL(i, vec.
a[i]);
99 CU_ASSERT_EQUAL(100, vec.
size);
102 for (i=0; i<100; i++)
105 CU_ASSERT_EQUAL(100, vec.
size);
109 CU_ASSERT_EQUAL(50, vec.
size);
111 for (i=0,j=0; i<vec.
size; i++,j++) {
112 CU_ASSERT_EQUAL(j, vec.
a[i]);
126 CU_ASSERT(vec.
size == 0)
127 CU_ASSERT(vec.
a == NULL)
129 for (i=0; i<100; i++)
132 CU_ASSERT_EQUAL(100, vec.
size);
137 for (i=0; i<vec.
size; i++)
138 CU_ASSERT_EQUAL(i, vec.
a[i]);
142 CU_ASSERT(vec.
size == 0)
143 CU_ASSERT(vec.
a == NULL)
149 int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
155 CU_ASSERT_EQUAL(vec.
size, 10);
157 for (i=0; i<vec.
size; i++)
158 CU_ASSERT_EQUAL(vec.
a[i], i);
163 CU_ASSERT_EQUAL(vec.
size, 20);
165 for (i=0; i<vec.
size; i++)
166 CU_ASSERT_EQUAL(vec.
a[i], i-((i<10)? 9 : 10) );
174 int array[] = { 0, 1, 0, 1, 0, 1, 0, 1 };
190 for (i=0; i<vec.
size; ++i) {
192 CU_ASSERT_EQUAL(vec.
a[i], i);
194 CU_ASSERT_EQUAL(vec.
a[i], (i%2));
196 CU_ASSERT_EQUAL(vec.
a[i], i-8);
209 for (i=0; i<123; i++)
212 CU_ASSERT_EQUAL(123, vec1.
size);
216 CU_ASSERT_EQUAL(123, vec2.
size);
221 for (i=0; i<vec1.
size; i++)
222 CU_ASSERT_EQUAL(vec1.
a[i], vec2.
a[i]);
236 CU_ASSERT_EQUAL(vec.
size, 10);
238 for (i=0; i<1000; i++) {
241 CU_ASSERT_EQUAL(vec.
size, 1010);
247 for (i=999; i>=0; i--) {
249 CU_ASSERT_EQUAL(temp, i);
252 CU_ASSERT_EQUAL(vec.
size, 10);
259 int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
265 CU_ASSERT_EQUAL(vec.
a[4], 4);
269 CU_ASSERT_EQUAL(ret, 4);
270 CU_ASSERT_EQUAL(vec.
a[4], 42);
279 CU_ASSERT_EQUAL(vec->
size, 0);
294 CU_ASSERT_EQUAL(vec->
size, 0);
297 for (i=0; i<1000; i++)
301 CU_ASSERT(vec->
size == 1000);
306 CU_ASSERT(vec->
size == 500);
308 for (i=0; i<vec->
size; i++)
309 CU_ASSERT_EQUAL(vec->
a[i], i);
323 CU_ASSERT_EQUAL(vec.
size, 20);
329 CU_ASSERT_EQUAL(vec.
a[i], 25);
335 CU_ASSERT_EQUAL(vec.
a[i], 42);
337 CU_ASSERT_EQUAL(vec.
a[i], 25);
356 CU_ASSERT_EQUAL(0, vec.
size);
359 for (i=0; i<100; i++)
362 CU_ASSERT_EQUAL(100, vec.
size);
364 for (i=0; i<vec.
size; i++)
365 CU_ASSERT_EQUAL(i+0.5, vec.
a[i]);
378 CU_ASSERT_EQUAL(100, vec.
size);
380 for (i=0; i<100; i++)
383 CU_ASSERT_EQUAL(100, vec.
size);
387 CU_ASSERT_EQUAL(50, vec.
size);
389 for (i=0,j=0; i<vec.
size; i++,j++) {
390 CU_ASSERT_EQUAL(j+0.5, vec.
a[i]);
404 CU_ASSERT(vec.
size == 0)
405 CU_ASSERT(vec.
a == NULL)
407 for (i=0; i<100; i++)
410 CU_ASSERT_EQUAL(100, vec.
size);
415 for (i=0; i<vec.
size; i++)
416 CU_ASSERT_EQUAL(i+0.5, vec.
a[i]);
420 CU_ASSERT(vec.
size == 0)
421 CU_ASSERT(vec.
a == NULL)
427 double array[] = { 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5 };
432 CU_ASSERT_EQUAL(vec1.
size, 10);
435 for (i=0; i<vec1.
size; i++)
436 CU_ASSERT_EQUAL(vec1.
a[i], i+0.5);
441 CU_ASSERT_EQUAL(vec1.
size, 20);
443 for (i=0; i<vec1.
size; i++)
444 CU_ASSERT_EQUAL(vec1.
a[i], i-9.5 );
453 double array[] = { 0, 1, 0, 1, 0, 1 };
466 for (i=0; i<vec.
size; ++i) {
468 CU_ASSERT_EQUAL(vec.
a[i], i);
470 CU_ASSERT_EQUAL(vec.
a[i], (i%2));
472 CU_ASSERT_EQUAL(vec.
a[i], i-6);
485 for (i=0; i<123; i++)
488 CU_ASSERT_EQUAL(123, vec1.
size);
492 CU_ASSERT_EQUAL(123, vec2.
size);
497 for (i=0; i<vec1.
size; i++)
498 CU_ASSERT_EQUAL(vec1.
a[i], vec2.
a[i]);
512 CU_ASSERT_EQUAL(vec1.
size, 0);
514 for (i=0; i<1000; i++)
517 CU_ASSERT_EQUAL(vec1.
size, 1000);
522 for (i=999; i>=0; i--) {
524 CU_ASSERT_EQUAL(temp, i);
527 CU_ASSERT_EQUAL(vec1.
size, 0);
534 double array[] = { 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5 };
540 CU_ASSERT_EQUAL(vec.
a[4], 4.5);
544 CU_ASSERT_EQUAL(ret, 4.5);
545 CU_ASSERT_EQUAL(vec.
a[4], 42);
570 for (i=0; i<1000; i++)
574 CU_ASSERT(vec1.
size == 1000);
579 CU_ASSERT(vec1.
size == 500);
581 for (i=0; i<vec1.
size; i++)
582 CU_ASSERT_EQUAL(vec1.
a[i], i+0.5);
597 for (i=0; i<vec->
size; i++)
598 CU_ASSERT_EQUAL(vec->
a[i], 42.5);
603 CU_ASSERT_EQUAL(vec->
a[i], 25.5);
621 CU_ASSERT_EQUAL(0, vec->
size);
623 for (i=0; i<50; i++) {
624 sprintf(buffer,
"hello %d", i);
628 CU_ASSERT_EQUAL(50, vec->
size);
630 for (i=0; i<vec->
size; i++) {
631 sprintf(buffer,
"hello %d", i);
632 CU_ASSERT_STRING_EQUAL(vec->
a[i], buffer);
649 for (i=0; i<100; i++) {
650 sprintf(buffer,
"hello %d", i);
654 CU_ASSERT_EQUAL(100, vec1.
size);
658 CU_ASSERT_EQUAL(50, vec1.
size);
660 for (i=0,j=0; i<vec1.
size; i++,j++) {
661 sprintf(buffer,
"hello %d", j);
662 CU_ASSERT_STRING_EQUAL(vec1.
a[i], buffer);
679 for (i=0; i<100; i++) {
680 sprintf(buffer,
"hello %d", i);
684 CU_ASSERT_EQUAL(100, vec1.
size);
686 for (i=25; i<75; ++i)
691 CU_ASSERT_EQUAL(50, vec1.
size);
693 for (i=0,j=0; i<vec1.
size; i++,j++) {
694 sprintf(buffer,
"hello %d", j);
695 CU_ASSERT_STRING_EQUAL(vec1.
a[i], buffer);
699 for (i=25; i<75; ++i) {
700 sprintf(buffer,
"hello %d", i);
701 CU_ASSERT_STRING_EQUAL(strs[i], buffer);
717 CU_ASSERT(vec.
size == 0)
718 CU_ASSERT(vec.
a == NULL)
720 for (i=0; i<50; i++) {
721 sprintf(buffer,
"hello %d", i);
725 CU_ASSERT_EQUAL(50, vec.
size);
730 for (i=0; i<vec.
size; i++) {
731 sprintf(buffer,
"hello %d", i);
732 CU_ASSERT_STRING_EQUAL(vec.
a[i], buffer);
737 CU_ASSERT(vec.
size == 0)
738 CU_ASSERT(vec.
a == NULL)
744 char* array[] = {
"hello 0",
"hello 1",
"hello 2",
"hello 3",
"hello 4",
745 "hello 5",
"hello 6",
"hello 7",
"hello 8",
"hello 9" };
752 CU_ASSERT_EQUAL(vec->
size, 10);
754 for (i=0; i<vec->
size; i++) {
755 sprintf(buffer,
"hello %d", i);
756 CU_ASSERT_STRING_EQUAL(vec->
a[i], buffer);
759 for (i=0; i<10; i++) {
760 sprintf(buffer,
"hello %d", -i);
765 CU_ASSERT_EQUAL(vec->
size, 20);
767 for (i=0; i<vec->
size; i++) {
768 sprintf(buffer,
"hello %d", i-((i<10)? 9 : 10));
769 CU_ASSERT_STRING_EQUAL(vec->
a[i], buffer);
780 char* array[] = {
"hello 0",
"hello 1",
"hello 2",
"hello 3",
"hello 4",
781 "hello 5",
"hello 6",
"hello 7",
"hello 8",
"hello 9",
"hello 10" };
785 CU_ASSERT_EQUAL(vec.
size, 10);
790 CU_ASSERT_EQUAL(vec.
size, 21);
793 for (i=0; i<vec.
size; ++i) {
795 sprintf(buffer,
"hello %d", i);
796 CU_ASSERT_STRING_EQUAL(vec.
a[i], buffer);
799 sprintf(buffer,
"hello %d", i-11);
800 CU_ASSERT_STRING_EQUAL(vec.
a[i], buffer);
815 for (i=0; i<123; i++) {
816 sprintf(buffer,
"hello %d", i);
820 CU_ASSERT_EQUAL(123, vec1.
size);
824 CU_ASSERT_EQUAL(123, vec2.
size);
829 for (i=0; i<vec1.
size; i++) {
830 CU_ASSERT_STRING_EQUAL(vec1.
a[i], vec2.
a[i]);
851 CU_ASSERT_EQUAL(vec1.
size, 1);
853 CU_ASSERT_EQUAL(vec1.
size, 0);
855 for (i=0; i<1000; i++) {
856 sprintf(buffer,
"hello %d", i);
860 CU_ASSERT_EQUAL(vec1.
size, 1000);
865 for (i=999; i>=0; i--) {
866 sprintf(buffer,
"hello %d", i);
868 CU_ASSERT_STRING_EQUAL(buffer, buffer2);
871 CU_ASSERT_EQUAL(vec1.
size, 0);
878 int i, loc, to_replace[] = { 0, 125, 256 };
888 for (i=0; i<1000; i++) {
889 sprintf(buffer,
"hello %d", i);
893 for (i=0; i<
sizeof(to_replace)/
sizeof(
int); i++) {
895 sprintf(buffer,
"hello %d", loc);
896 sprintf(buffer2,
"goodbye %d", loc);
897 CU_ASSERT_STRING_EQUAL(vec.
a[loc], buffer);
900 CU_ASSERT_STRING_EQUAL(vec.
a[loc], buffer2);
901 CU_ASSERT_STRING_EQUAL(retbuf, buffer);
927 CU_ASSERT_EQUAL(vec.
size, 1);
930 for (i=0; i<1000; i++) {
931 sprintf(buffer,
"hello %d", i);
936 CU_ASSERT(vec.
size == 1001);
941 CU_ASSERT(vec.
size == 500);
943 for (i=0; i<vec.
size; i++) {
944 sprintf(buffer,
"hello %d", i-1);
946 CU_ASSERT_STRING_EQUAL(vec.
a[i], buffer);
948 CU_ASSERT_EQUAL(vec.
a[i], NULL);
962 CU_ASSERT_EQUAL(vec.
size, 20)
967 for (i=0; i<vec.
size; i++)
968 CU_ASSERT_STRING_EQUAL(vec.
a[i],
"42");
973 CU_ASSERT_STRING_EQUAL(vec.
a[i],
"25");
984 "one",
"two",
"three",
985 "four",
"five",
"six",
986 "seven",
"eight",
"nine",
994 CU_ASSERT_EQUAL(vec1.
size, 1);
996 CU_ASSERT_EQUAL(vec1.
size, 0);
998 for (i=0; i<1000; i++) {
999 sprintf(buffer,
"hello %d", i);
1003 CU_ASSERT_EQUAL(vec1.
size, 1000);
1005 for (i=999; i>=0; i--) {
1006 sprintf(buffer,
"hello %d", i);
1008 CU_ASSERT_STRING_EQUAL(buffer, ret);
1012 CU_ASSERT_EQUAL(vec1.
size, 0);
1014 for (i=0; i<100; i++) {
1015 sprintf(buffer,
"hello %d", i);
1021 CU_ASSERT_STRING_EQUAL(ret,
"hello 25");
1024 CU_ASSERT_EQUAL(vec1.
size, 101);
1027 for (i=0; i<101; i++) {
1029 CU_ASSERT_STRING_EQUAL(vec1.
a[i],
"hello replacem");
1030 }
else if (i == 50) {
1031 CU_ASSERT_STRING_EQUAL(vec1.
a[i],
"hello insertm");
1034 sprintf(buffer,
"hello %d", i-j);
1035 CU_ASSERT_STRING_EQUAL(vec1.
a[i], buffer);
1040 CU_ASSERT_EQUAL(vec1.
size, 111);
1042 for (i=0; i<10; ++i) {
1043 CU_ASSERT_STRING_EQUAL(vec1.
a[60+i], strs[i]);
1047 CU_ASSERT_EQUAL(vec1.
size, 101);
1064 strcpy(a.
word, word);
1089#define GET_T(X,Y) ((t_struct*)&X.a[Y*X.elem_size])
1090#define GET_F(X,Y) ((f_struct*)&X.a[Y*X.elem_size])
1092#define GET_TP(X,Y) ((t_struct*)&X->a[Y*X->elem_size])
1093#define GET_FP(X,Y) ((f_struct*)&X->a[Y*X->elem_size])
1111 return d->
word != NULL;
1130 CU_ASSERT_EQUAL(0, vec1.
size);
1133 CU_ASSERT_EQUAL(0, vec2.
size);
1135 for (i=0; i<100; i++) {
1136 sprintf(buffer,
"%d", i);
1144 CU_ASSERT_EQUAL(100, vec1.
size);
1145 CU_ASSERT_EQUAL(100, vec2.
size);
1148 for (i=0; i<vec1.
size; i++) {
1150 sprintf(buffer,
"%d", i);
1151 CU_ASSERT_EQUAL(i,
GET_T(vec1, i)->d);
1152 CU_ASSERT_EQUAL(i,
GET_T(vec1, i)->i);
1153 CU_ASSERT_STRING_EQUAL(buffer,
GET_T(vec1, i)->word);
1155 CU_ASSERT_EQUAL(i,
GET_F(vec2, i)->d);
1156 CU_ASSERT_EQUAL(i,
GET_F(vec2, i)->i);
1157 CU_ASSERT_STRING_EQUAL(buffer,
GET_F(vec2, i)->word);
1173 CU_ASSERT_EQUAL(101, vec1->
capacity);
1174 CU_ASSERT_EQUAL(100, vec1->
size);
1177 CU_ASSERT_EQUAL(100, vec2->
size);
1179 for (i=0; i<100; i++) {
1180 sprintf(buffer,
"%d", i);
1182 GET_TP(vec1, i)->d = i+0.5;
1184 strcpy(
GET_TP(vec1, i)->word, buffer);
1186 GET_FP(vec2, i)->d = i+0.5;
1191 CU_ASSERT_EQUAL(100, vec1->
size);
1192 CU_ASSERT_EQUAL(100, vec2->
size);
1197 CU_ASSERT_EQUAL(50, vec1->
size);
1198 CU_ASSERT_EQUAL(50, vec2->
size);
1200 for (i=0,j=0; i<vec1->
size; i++,j++) {
1201 sprintf(buffer,
"%d", j);
1202 CU_ASSERT_EQUAL(
GET_TP(vec1, i)->d, j+0.5);
1203 CU_ASSERT_EQUAL(
GET_TP(vec1, i)->i, j);
1204 CU_ASSERT_STRING_EQUAL(
GET_TP(vec1, i)->word, buffer);
1206 CU_ASSERT_EQUAL(
GET_FP(vec2, i)->d, j+0.5);
1207 CU_ASSERT_EQUAL(
GET_FP(vec2, i)->i, j);
1208 CU_ASSERT_STRING_EQUAL(
GET_FP(vec2, i)->word, buffer);
1226 CU_ASSERT_EQUAL(100, vec2->
size);
1228 for (i=0; i<100; i++) {
1229 sprintf(buffer,
"%d", i);
1231 GET_FP(vec2, i)->d = i+0.5;
1236 CU_ASSERT_EQUAL(100, vec2->
size);
1238 for (i=25; i<75; i++)
1239 strs[i] =
GET_FP(vec2, i)->word;
1243 CU_ASSERT_EQUAL(50, vec2->
size);
1245 for (i=0,j=0; i<vec2->
size; i++,j++) {
1246 sprintf(buffer,
"%d", j);
1248 CU_ASSERT_EQUAL(
GET_FP(vec2, i)->d, j+0.5);
1249 CU_ASSERT_EQUAL(
GET_FP(vec2, i)->i, j);
1250 CU_ASSERT_STRING_EQUAL(
GET_FP(vec2, i)->word, buffer);
1257 for (i=25; i<75; ++i) {
1258 sprintf(buffer,
"%d", i);
1259 CU_ASSERT_STRING_EQUAL(strs[i], buffer);
1278 for (i=0; i<10; i++) {
1279 sprintf(buffer,
"hello %d", i);
1282 strcpy(array[i].word, buffer);
1284 array2[i].
d = i+0.5;
1294 CU_ASSERT_EQUAL(vec1.
size, 10);
1295 CU_ASSERT_EQUAL(vec2.
size, 10);
1298 for (i=0; i<vec1.
size; i++) {
1299 sprintf(buffer,
"hello %d", i);
1300 CU_ASSERT_EQUAL(
GET_T(vec1, i)->d, i+0.5);
1301 CU_ASSERT_EQUAL(
GET_T(vec1, i)->i, i);
1302 CU_ASSERT_STRING_EQUAL(
GET_T(vec1, i)->word, buffer);
1304 CU_ASSERT_EQUAL(
GET_F(vec2, i)->d, i+0.5);
1305 CU_ASSERT_EQUAL(
GET_F(vec2, i)->i, i);
1306 CU_ASSERT_STRING_EQUAL(
GET_F(vec2, i)->word, buffer);
1309 for (i=0; i<10; i++) {
1310 sprintf(buffer,
"hello %d", -i);
1318 CU_ASSERT_EQUAL(vec1.
size, 20);
1319 CU_ASSERT_EQUAL(vec2.
size, 20);
1322 for (i=0; i<vec1.
size; i++) {
1323 sprintf(buffer,
"hello %d", i-((i<10)? 9 : 10));
1325 CU_ASSERT_EQUAL(
GET_T(vec1, i)->d, i-0.5-9 );
1326 CU_ASSERT_EQUAL(
GET_T(vec1, i)->i, i-((i<10)? 9 : 10) );
1327 CU_ASSERT_STRING_EQUAL(
GET_T(vec1, i)->word, buffer);
1329 CU_ASSERT_EQUAL(
GET_F(vec2, i)->d, i-0.5-9 );
1330 CU_ASSERT_EQUAL(
GET_F(vec2, i)->i, i-((i<10)? 9 : 10) );
1331 CU_ASSERT_STRING_EQUAL(
GET_F(vec2, i)->word, buffer);
1343 float array1[] = { 0.5f, 1.5f, 7.5f, 8.5f, 9.5f };
1344 float array2[] = { 2.5f, 3.5f, 4.5f, 5.5f, 6.5f };
1349 CU_ASSERT_EQUAL(vec1.
size, 10);
1351 for (i=0; i<vec1.
size; ++i)
1352 CU_ASSERT_EQUAL(((
float*)vec1.
a)[i], i+0.5f);
1371 CU_ASSERT(vec1.
size == 0)
1372 CU_ASSERT(vec1.
a == NULL)
1374 CU_ASSERT(vec2.
size == 0)
1375 CU_ASSERT(vec2.
a == NULL)
1377 for (i=0; i<100; i++) {
1378 sprintf(buffer,
"%d", i);
1387 CU_ASSERT_EQUAL(126, vec1.
capacity);
1388 CU_ASSERT_EQUAL(126, vec2.
capacity);
1390 for (i=0; i<vec1.
size; i++) {
1392 sprintf(buffer,
"%d", i);
1393 CU_ASSERT_EQUAL(i,
GET_T(vec1, i)->d);
1394 CU_ASSERT_EQUAL(i,
GET_T(vec1, i)->i);
1395 CU_ASSERT_STRING_EQUAL(buffer,
GET_T(vec1, i)->word);
1397 CU_ASSERT_EQUAL(i,
GET_F(vec2, i)->d);
1398 CU_ASSERT_EQUAL(i,
GET_F(vec2, i)->i);
1399 CU_ASSERT_STRING_EQUAL(buffer,
GET_F(vec2, i)->word);
1405 CU_ASSERT(vec1.
size == 0)
1406 CU_ASSERT(vec1.
a == NULL)
1408 CU_ASSERT(vec2.
size == 0)
1409 CU_ASSERT(vec2.
a == NULL)
1429 CU_ASSERT_EQUAL(0, vec1.
size);
1432 CU_ASSERT_EQUAL(0, vec2.
size);
1434 for (i=0; i<100; i++) {
1435 sprintf(buffer,
"%d", i);
1443 CU_ASSERT_EQUAL(100, vec1.
size);
1444 CU_ASSERT_EQUAL(100, vec2.
size);
1449 CU_ASSERT_EQUAL(vec3.
size, vec1.
size);
1450 CU_ASSERT_EQUAL(vec4.
size, vec2.
size);
1465 for (i=0; i<vec1.
size; i++) {
1467 CU_ASSERT_EQUAL(
GET_T(vec3, i)->d,
GET_T(vec1, i)->d);
1468 CU_ASSERT_EQUAL(
GET_T(vec3, i)->i,
GET_T(vec1, i)->i);
1469 CU_ASSERT_STRING_EQUAL(
GET_T(vec3, i)->word,
GET_T(vec1, i)->word);
1471 CU_ASSERT_EQUAL(
GET_F(vec4, i)->d,
GET_F(vec2, i)->d);
1472 CU_ASSERT_EQUAL(
GET_F(vec4, i)->i,
GET_F(vec2, i)->i);
1473 CU_ASSERT_STRING_EQUAL(
GET_F(vec4, i)->word,
GET_F(vec2, i)->word);
1499 for (i=0; i<vec2.
size; ++i)
1503 strcpy(buffer,
"test_pop_null");
1509 CU_ASSERT_EQUAL(vec1.
size, 11);
1510 CU_ASSERT_EQUAL(vec2.
size, 11);
1513 CU_ASSERT_EQUAL(vec1.
size, 10);
1514 CU_ASSERT_EQUAL(vec2.
size, 10);
1517 for (i=0; i<1000; i++) {
1518 sprintf(buffer,
"hello %d", i);
1528 CU_ASSERT_EQUAL(vec1.
size, 1010);
1532 CU_ASSERT_EQUAL(vec2.
size, 1010);
1536 for (i=999; i>=0; i--) {
1537 sprintf(buffer,
"hello %d", i);
1541 CU_ASSERT_EQUAL(temp.
d, i );
1542 CU_ASSERT_EQUAL(temp.
i, i );
1543 CU_ASSERT_STRING_EQUAL(temp.
word, buffer);
1545 CU_ASSERT_EQUAL(temp2.
d, i );
1546 CU_ASSERT_EQUAL(temp2.
i, i );
1551 CU_ASSERT_EQUAL(vec1.
size, 10);
1552 CU_ASSERT_EQUAL(vec2.
size, 10);
1562 int i, loc, to_replace[] = { 1, 25, 50 };
1564 f_struct temp2, ret_f_struct, temp3;
1575 for (i=0; i<100; i++) {
1576 sprintf(buffer,
"%d", i);
1586 for (i=0; i<
sizeof(to_replace)/
sizeof(
int); ++i) {
1587 loc = to_replace[i];
1588 sprintf(buffer,
"%d", loc);
1589 CU_ASSERT_EQUAL(loc,
GET_T(vec1, loc)->d);
1590 CU_ASSERT_EQUAL(loc,
GET_T(vec1, loc)->i);
1591 CU_ASSERT_STRING_EQUAL(buffer,
GET_T(vec1, loc)->word);
1593 CU_ASSERT_EQUAL(loc,
GET_F(vec2, loc)->d);
1594 CU_ASSERT_EQUAL(loc,
GET_F(vec2, loc)->i);
1595 CU_ASSERT_STRING_EQUAL(buffer,
GET_F(vec2, loc)->word);
1597 CU_ASSERT_EQUAL(loc,
GET_F(vec3, loc)->d);
1598 CU_ASSERT_EQUAL(loc,
GET_F(vec3, loc)->i);
1599 CU_ASSERT_STRING_EQUAL(buffer,
GET_F(vec3, loc)->word);
1601 sprintf(buffer2,
"neg %d", -loc);
1609 CU_ASSERT_EQUAL(-loc,
GET_T(vec1, loc)->d);
1610 CU_ASSERT_EQUAL(-loc,
GET_T(vec1, loc)->i);
1611 CU_ASSERT_STRING_EQUAL(buffer2,
GET_T(vec1, loc)->word);
1613 CU_ASSERT_EQUAL(-loc,
GET_F(vec2, loc)->d);
1614 CU_ASSERT_EQUAL(-loc,
GET_F(vec2, loc)->i);
1615 CU_ASSERT_STRING_EQUAL(buffer2,
GET_F(vec2, loc)->word);
1617 CU_ASSERT_EQUAL(loc, ret_t_struct.
d);
1618 CU_ASSERT_EQUAL(loc, ret_t_struct.
i);
1619 CU_ASSERT_STRING_EQUAL(buffer, ret_t_struct.
word);
1621 CU_ASSERT_EQUAL(loc, ret_f_struct.
d);
1622 CU_ASSERT_EQUAL(loc, ret_f_struct.
i);
1623 CU_ASSERT_STRING_EQUAL(buffer, ret_f_struct.
word);
1629 CU_ASSERT_EQUAL(-loc,
GET_F(vec3, loc)->d);
1630 CU_ASSERT_EQUAL(-loc,
GET_F(vec3, loc)->i);
1631 CU_ASSERT_STRING_EQUAL(buffer2,
GET_F(vec3, loc)->word);
1633 CU_ASSERT_EQUAL(loc, ret_f_struct.
d);
1634 CU_ASSERT_EQUAL(loc, ret_f_struct.
i);
1635 CU_ASSERT_STRING_EQUAL(buffer, ret_f_struct.
word);
1642 sprintf(buffer,
"%d", loc);
1643 sprintf(buffer2,
"neg %d", -loc);
1652 CU_ASSERT_EQUAL(-loc,
GET_T(vec1, loc)->d);
1653 CU_ASSERT_EQUAL(-loc,
GET_T(vec1, loc)->i);
1654 CU_ASSERT_STRING_EQUAL(buffer2,
GET_T(vec1, loc)->word);
1656 CU_ASSERT_EQUAL(-loc,
GET_F(vec2, loc)->d);
1657 CU_ASSERT_EQUAL(-loc,
GET_F(vec2, loc)->i);
1658 CU_ASSERT_STRING_EQUAL(buffer2,
GET_F(vec2, loc)->word);
1660 CU_ASSERT_EQUAL(-loc,
GET_F(vec3, loc)->d);
1661 CU_ASSERT_EQUAL(-loc,
GET_F(vec3, loc)->i);
1662 CU_ASSERT_STRING_EQUAL(buffer2,
GET_F(vec3, loc)->word);
1674 CU_ASSERT_EQUAL(vect->
capacity, 19);
1675 CU_ASSERT_EQUAL(vec2->
capacity, 21);
1699 CU_ASSERT_EQUAL(vec1.
size, 0);
1701 CU_ASSERT_EQUAL(vec2.
size, 0);
1704 for (i=0; i<1000; i++) {
1705 sprintf(buffer,
"hello %d", i);
1714 CU_ASSERT(vec1.
size == 1000);
1717 CU_ASSERT(vec2.
size == 1000);
1724 CU_ASSERT(vec1.
size == 500);
1727 CU_ASSERT(vec2.
size == 500);
1729 for (i=0; i<vec1.
size; i++) {
1730 sprintf(buffer,
"hello %d", i);
1732 CU_ASSERT_EQUAL(
GET_T(vec1, i)->d, i );
1733 CU_ASSERT_EQUAL(
GET_T(vec1, i)->i, i );
1734 CU_ASSERT_STRING_EQUAL(
GET_T(vec1, i)->word, buffer);
1736 CU_ASSERT_EQUAL(
GET_F(vec2, i)->d, i );
1737 CU_ASSERT_EQUAL(
GET_F(vec2, i)->i, i );
1738 CU_ASSERT_STRING_EQUAL(
GET_F(vec2, i)->word, buffer);
1755 CU_ASSERT_EQUAL(vec1.
size, 20);
1756 CU_ASSERT_EQUAL(vec2.
size, 20);
1758 CU_ASSERT_EQUAL(vec1.
capacity, 25);
1761 for (i=0; i<vec2.
size; ++i)
1772 for (i=0; i<vec1.
size; i++) {
1773 CU_ASSERT_EQUAL(
GET_T(vec1, i)->d, 42.5);
1774 CU_ASSERT_EQUAL(
GET_T(vec1, i)->i, 42);
1775 CU_ASSERT_STRING_EQUAL(
GET_T(vec1, i)->word,
"hello");
1777 CU_ASSERT_EQUAL(
GET_F(vec2, i)->d, 42.5);
1778 CU_ASSERT_EQUAL(
GET_F(vec2, i)->i, 42);
1779 CU_ASSERT_STRING_EQUAL(
GET_F(vec2, i)->word,
"hello");
1792 CU_ASSERT_EQUAL(vec1.
size, 20);
1793 CU_ASSERT_EQUAL(vec1.
capacity, 25);
1801 CU_ASSERT_EQUAL(
GET_T(vec1, i)->d, 25.5);
1802 CU_ASSERT_EQUAL(
GET_T(vec1, i)->i, 25);
1803 CU_ASSERT_STRING_EQUAL(
GET_T(vec1, i)->word,
"goodbye");
1806 CU_ASSERT_EQUAL(
GET_F(vec2, i)->d, 25.5);
1807 CU_ASSERT_EQUAL(
GET_F(vec2, i)->i, 25);
1808 CU_ASSERT_STRING_EQUAL(
GET_F(vec2, i)->word,
"goodbye");
1825 char** d = (
char**)dest;
1826 char** s = (
char**)src;
1838#define GET_ELEMENT(VEC,I,TYPE) ((TYPE*)&(VEC).a[(I)*(VEC).elem_size])
1848 "one",
"two",
"three",
1849 "four",
"five",
"six",
1850 "seven",
"eight",
"nine",
1859 CU_ASSERT_EQUAL(vec1.
size, 1);
1861 CU_ASSERT_EQUAL(vec1.
size, 0);
1863 for (i=0; i<1000; i++) {
1864 sprintf(buffer,
"hello %d", i);
1869 CU_ASSERT_EQUAL(vec1.
size, 1000);
1871 for (i=999; i>=0; i--) {
1872 sprintf(buffer,
"hello %d", i);
1874 CU_ASSERT_STRING_EQUAL(buffer, ret);
1878 CU_ASSERT_EQUAL(vec1.
size, 0);
1880 for (i=0; i<100; i++) {
1881 sprintf(buffer,
"hello %d", i);
1890 CU_ASSERT_STRING_EQUAL(ret,
"hello 25");
1893 CU_ASSERT_EQUAL(vec1.
size, 101);
1896 for (i=0; i<101; i++) {
1898 CU_ASSERT_STRING_EQUAL(*
GET_ELEMENT(vec1, i,
char*),
"hello replacem");
1899 }
else if (i == 50) {
1900 CU_ASSERT_STRING_EQUAL(*
GET_ELEMENT(vec1, i,
char*),
"hello insertm");
1903 sprintf(buffer,
"hello %d", i-j);
1904 CU_ASSERT_STRING_EQUAL(*
GET_ELEMENT(vec1, i,
char*), buffer);
1909 CU_ASSERT_EQUAL(vec1.
size, 111);
1911 for (i=0; i<10; ++i) {
1912 CU_ASSERT_STRING_EQUAL(*
GET_ELEMENT(vec1, 60+i,
char*), strs[i]);
1916 CU_ASSERT_EQUAL(vec1.
size, 101);
1937 CU_ASSERT_EQUAL(0, tmp_vecs.
size);
1939 for (i=0; i<50; i++) {
1940 sprintf(buffer,
"hello %d", i);
1944 CU_ASSERT_EQUAL(vec1.
size, 0);
1947 cvec_i(&tmp_vec_i, 0, 0);
1949 for (i=0; i<20; ++i)
1952 for (i=0; i<20; ++i) {
1954 for (j=0; j<500; ++j) {
1958 CU_ASSERT_EQUAL(tmp_vec_i2->
size, 520);
1961 CU_ASSERT_EQUAL(vec1.
size, 20);
1963 for (i=0; i<20; ++i) {
1964 for (j=0; j<500; ++j) {
1966 CU_ASSERT_EQUAL(tmp_int, 499-j);
1969 CU_ASSERT_EQUAL(tmp_vec_i2->
size, 20);
1971 for (j=0; j<20; j++) {
1972 CU_ASSERT_EQUAL(tmp_vec_i.
a[i], tmp_vec_i2->
a[i]);
1993 CU_ASSERT_EQUAL(0, vec.
size);
1995 for (i=0; i<100; i++)
1998 CU_ASSERT_EQUAL(100, vec.
size);
2000 for (i=0; i<vec.
size; i++)
2001 CU_ASSERT_EQUAL(i, vec.
a[i]);
2005 CU_ASSERT(vec.
size == 0)
2006 CU_ASSERT(vec.
a == NULL)
2030 CU_ASSERT_EQUAL(vec.
size, 20);
2033 for (i=0; i<vec.
size; ++i)
2042 for (i=0; i<vec.
size; i++) {
2043 CU_ASSERT_EQUAL(vec.
a[i].
d, 42.5);
2044 CU_ASSERT_EQUAL(vec.
a[i].
i, 42);
2045 CU_ASSERT_STRING_EQUAL(vec.
a[i].
word,
"hello");
2063 CU_ASSERT_EQUAL(vec.
a[i].
d, 25.5);
2064 CU_ASSERT_EQUAL(vec.
a[i].
i, 25);
2065 CU_ASSERT_STRING_EQUAL(vec.
a[i].
word,
"goodbye");
2069 sprintf(buffer,
"neg %d", -loc);
2073 CU_ASSERT_EQUAL(-loc, vec.
a[loc].
d);
2074 CU_ASSERT_EQUAL(-loc, vec.
a[loc].
i);
2075 CU_ASSERT_STRING_EQUAL(buffer, vec.
a[loc].
word);
2082 for (i=0; i<100; i++) {
2083 sprintf(buffer,
"%d", i);
2089 CU_ASSERT_EQUAL(100, vec.
size);
2091 for (i=0; i<vec.
size; i++) {
2092 sprintf(buffer,
"%d", i);
2093 CU_ASSERT_EQUAL(i, vec.
a[i].
d);
2094 CU_ASSERT_EQUAL(i, vec.
a[i].
i);
2095 CU_ASSERT_STRING_EQUAL(buffer, vec.
a[i].
word);
2098 for (i=vec.
size-1; i >= 10; i--) {
2099 sprintf(buffer,
"%d", i);
2102 CU_ASSERT_EQUAL(temp.
d, i );
2103 CU_ASSERT_EQUAL(temp.
i, i );
2108 CU_ASSERT_EQUAL(10, vec.
size);
2112 sprintf(buffer,
"%d", 9);
2113 CU_ASSERT_EQUAL(temp.
d, 9);
2114 CU_ASSERT_EQUAL(temp.
i, 9);
2115 CU_ASSERT_STRING_EQUAL(buffer, temp.
word);
2118 CU_ASSERT_EQUAL(9, vec.
size);
2121 for (i=4; i<7; i++) {
2127 CU_ASSERT_EQUAL(6, vec.
size);
2129 for (i=0; i<vec.
size; i++) {
2130 int j = (i < 4) ? i : i+3;
2131 sprintf(buffer,
"%d", j);
2132 CU_ASSERT_EQUAL(j, vec.
a[i].
d);
2133 CU_ASSERT_EQUAL(j, vec.
a[i].
i);
2134 CU_ASSERT_STRING_EQUAL(buffer, vec.
a[i].
word);
2138 CU_ASSERT_EQUAL(vec.
size, 0);
2143 CU_ASSERT_EQUAL(vec.
size, 0);
2148 CU_ASSERT_EQUAL(vec.
size, 1);
2150 CU_ASSERT_EQUAL(vec.
size, 0);
2152 for (i=0; i<1000; i++) {
2153 sprintf(buffer,
"hello %d", i);
2159 CU_ASSERT_EQUAL(vec.
size, 1000);
2161 for (i=999; i>=0; i--) {
2162 sprintf(buffer,
"hello %d", i);
2164 CU_ASSERT_EQUAL(i, temp.
i);
2165 CU_ASSERT_EQUAL(i, temp.
d);
2166 CU_ASSERT_STRING_EQUAL(buffer, temp.
word);
2169 CU_ASSERT_EQUAL(vec.
size, 0);
2171 for (i=0; i<100; i++) {
2172 sprintf(buffer,
"hello %d", i);
2185 CU_ASSERT_STRING_EQUAL(ret.
word,
"hello 25");
2188 CU_ASSERT_EQUAL(vec.
size, 101);
2191 for (i=0; i<101; i++) {
2193 CU_ASSERT_STRING_EQUAL(vec.
a[i].
word,
"hello replacem");
2194 }
else if (i == 50) {
2195 CU_ASSERT_STRING_EQUAL(vec.
a[i].
word,
"hello insertm");
2198 sprintf(buffer,
"hello %d", i-j);
2199 CU_ASSERT_STRING_EQUAL(vec.
a[i].
word, buffer);
2205 CU_ASSERT_EQUAL(vec.
size, 111);
2207 for (i=0; i<10; ++i) {
2208 CU_ASSERT_STRING_EQUAL(vec.
a[60+i].
word, array[i].
word);
2212 CU_ASSERT_EQUAL(vec.
size, 101);
2216 CU_ASSERT(vec.
size == 0)
2217 CU_ASSERT(vec.
a == NULL)
int cvec_init_str(cvector_str *vec, char **vals, cvec_sz num)
Same as cvec_init_str_heap() except the vector passed in was declared on the stack so it isn't alloca...
int cvec_insert_array_d(cvector_d *vec, cvec_sz i, double *a, cvec_sz num)
Insert the first num elements of array a at index i.
#define cvec_replacem_str(vec, i, s, ret)
int cvec_set_val_sz_void(cvector_void *vec, void *val)
Set all size elements to val.
int cvec_insert_d(cvector_d *vec, cvec_sz i, double a)
Insert a at index i (0 based).
int cvec_insert_i(cvector_i *vec, cvec_sz i, int a)
Insert a at index i (0 based).
void cvec_free_i_heap(void *vec)
Frees everything so don't use vec after calling this.
int cvec_copy_str(cvector_str *dest, cvector_str *src)
Makes dest a copy of src.
int cvec_insert_array_void(cvector_void *vec, cvec_sz i, void *a, cvec_sz num)
Insert the first num elements of array a at index i.
int cvec_copy_void(cvector_void *dest, cvector_void *src)
Makes dest a copy of src.
void cvec_free_i(void *vec)
Frees the internal array and zeros out the members to maintain a consistent state.
void cvec_free_d(void *vec)
Frees the internal array and zeros out the members to maintain a consistent state.
int cvec_reserve_void(cvector_void *vec, cvec_sz size)
Makes sure capacity >= size (the parameter not the member).
int cvec_set_cap_str(cvector_str *vec, cvec_sz size)
Set capacity to size.
cvector_void * cvec_void_heap(cvec_sz size, cvec_sz capacity, cvec_sz elem_sz, void(*elem_free)(void *), int(*elem_init)(void *, void *))
Creates a new vector on the heap.
int cvec_pop_i(cvector_i *vec)
Remove and return the last element (size decreased 1).
void cvec_set_val_cap_str(cvector_str *vec, char *val)
Fills entire allocated array (capacity) with val.
int cvec_copyc_i(void *dest, void *src)
Makes dest a copy of src.
cvector_str * cvec_init_str_heap(char **vals, cvec_sz num)
Create (on the heap) and initialize cvector_str with num elements of vals.
void cvec_erase_d(cvector_d *vec, cvec_sz start, cvec_sz end)
Erases elements from start to end inclusive.
int cvec_pushm_void(cvector_void *vec, void *a)
Same as push except no elem_init even if it's set.
int cvec_replace_i(cvector_i *vec, cvec_sz i, int a)
Replace value at index i with a, return original value.
int cvec_insert_arraym_void(cvector_void *vec, cvec_sz i, void *a, cvec_sz num)
Same as insert_array but no elem_init even if defined.
cvector_d * cvec_d_heap(cvec_sz size, cvec_sz capacity)
Creates a new cvector_d on the heap.
int cvec_insert_array_i(cvector_i *vec, cvec_sz i, int *a, cvec_sz num)
Insert the first num elements of array a at index i.
void cvec_set_val_cap_d(cvector_d *vec, double val)
Fills entire allocated array (capacity) with val.
int cvec_replace_void(cvector_void *vec, cvec_sz i, void *a, void *ret)
Replace value at i with a, return old value in ret if non-NULL.
#define CVEC_NEW_DEFS2(TYPE, RESIZE_MACRO)
void cvec_remove_void(cvector_void *vec, cvec_sz start, cvec_sz end)
Same as erase except it does not call elem_free.
int cvec_copy_d(cvector_d *dest, cvector_d *src)
Makes dest a copy of src.
int cvec_init_void(cvector_void *vec, void *vals, cvec_sz num, cvec_sz elem_sz, void(*elem_free)(void *), int(*elem_init)(void *, void *))
Same as init_vec_heap() except the vector passed in was declared on the stack so it isn't allocated i...
int cvec_copy_i(cvector_i *dest, cvector_i *src)
Makes dest a copy of src.
int cvec_set_cap_i(cvector_i *vec, cvec_sz size)
Set capacity to size.
int cvec_reserve_d(cvector_d *vec, cvec_sz size)
Make sure capacity is at least size(parameter not member).
void cvec_erase_void(cvector_void *vec, cvec_sz start, cvec_sz end)
Erases elements from start to end inclusive.
void * cvec_get_void(cvector_void *vec, cvec_sz i)
Return a void pointer to the ith element.
int cvec_reserve_i(cvector_i *vec, cvec_sz size)
Make sure capacity is at least size(parameter not member).
int cvec_push_void(cvector_void *vec, void *a)
Append a to end of vector (size increased 1).
int cvec_insertm_void(cvector_void *vec, cvec_sz i, void *a)
Same as insert but no elem_init even if defined.
void cvec_set_val_sz_str(cvector_str *vec, char *val)
Sets all size elements to val.
int cvec_void(cvector_void *vec, cvec_sz size, cvec_sz capacity, cvec_sz elem_sz, void(*elem_free)(void *), int(*elem_init)(void *, void *))
Same as cvec_void_heap() except the vector passed in was declared on the stack so it isn't allocated ...
int cvec_insert_array_str(cvector_str *vec, cvec_sz i, char **a, cvec_sz num)
Insert the first num elements of array a at index i.
double cvec_replace_d(cvector_d *vec, cvec_sz i, double a)
Replace value at index i with a, return original value.
cvector_i * cvec_i_heap(cvec_sz size, cvec_sz capacity)
Creates a new cvector_i on the heap.
int cvec_push_i(cvector_i *vec, int a)
Append a to end of vector (size increased 1).
void cvec_erase_i(cvector_i *vec, cvec_sz start, cvec_sz end)
Erases elements from start to end inclusive.
int cvec_insertm_str(cvector_str *vec, cvec_sz i, char *a)
Same as insert except no CVEC_STRDUP.
#define CVEC_NEW_DECLS2(TYPE)
void cvec_set_val_sz_d(cvector_d *vec, double val)
Set all size elements to val.
int cvec_init_i(cvector_i *vec, int *vals, cvec_sz num)
Same as cvec_init_i_heap() except the vector passed in was declared on the stack so it isn't allocate...
void cvec_erase_str(cvector_str *vec, cvec_sz start, cvec_sz end)
Erases strings from start to end inclusive.
void cvec_free_str(void *vec)
Frees the internal array and zeros out the members to maintain a consistent state.
void cvec_pop_void(cvector_void *vec, void *ret)
Remove the last element (size decreased 1).
cvector_str * cvec_str_heap(cvec_sz size, cvec_sz capacity)
Create a new cvector_str on the heap.
int cvec_i(cvector_i *vec, cvec_sz size, cvec_sz capacity)
Same as cvec_i_heap() except the vector passed in was declared on the stack so it isn't allocated in ...
int cvec_set_cap_void(cvector_void *vec, cvec_sz size)
Set capacity to size.
int cvec_push_str(cvector_str *vec, char *a)
Append a to end of vector (size increased 1).
int cvec_insert_arraym_str(cvector_str *vec, cvec_sz i, char **a, cvec_sz num)
Same as insert_array except no CVEC_STRDUP.
int cvec_d(cvector_d *vec, cvec_sz size, cvec_sz capacity)
Same as cvec_d_heap() except the vector passed in was declared on the stack so it isn't allocated in ...
void cvec_free_void(void *vec)
Frees the internal array and sets it, size, and capacity to NULL/0 to maintain a consistent state.
int cvec_set_cap_d(cvector_d *vec, cvec_sz size)
Set capacity to size.
int cvec_pushm_str(cvector_str *vec, char *a)
same as push but without calling CVEC_STRDUP(a), m suffix is for "move"
void cvec_replacem_void(cvector_void *vec, cvec_sz i, void *a, void *ret)
Same as replace but no elem_free or elem_init even if they're defined.
void cvec_replace_str(cvector_str *vec, cvec_sz i, char *a, char *ret)
Replace string at i with a.
cvec_sz CVEC_VOID_START_SZ
#define cvec_popm_str(vec)
void cvec_pop_str(cvector_str *vec, char *ret)
Remove the last element (size decreased 1).
void cvec_free_str_heap(void *vec)
Frees contents (individual strings and array) and frees vector so don't use after calling this.
int cvec_set_val_cap_void(cvector_void *vec, void *val)
Fills entire allocated array (capacity) with val.
#define CVEC_NEW_DECLS(TYPE)
void cvec_free_void_heap(void *vec)
Frees everything so don't use vec after calling this.
int cvec_push_d(cvector_d *vec, double a)
Append a to end of vector (size increased 1).
int cvec_reserve_str(cvector_str *vec, cvec_sz size)
Makes sure the vector capacity is >= size (parameter not member).
int cvec_insert_str(cvector_str *vec, cvec_sz i, char *a)
Insert a at index i (0 based).
void cvec_set_val_cap_i(cvector_i *vec, int val)
Fills entire allocated array (capacity) with val.
void cvec_remove_str(cvector_str *vec, cvec_sz start, cvec_sz end)
Same as erase except it does not call CVEC_FREE.
int cvec_str(cvector_str *vec, cvec_sz size, cvec_sz capacity)
Same as cvec_str_heap() except the vector passed in was declared on the stack so it isn't allocated i...
void cvec_set_val_sz_i(cvector_i *vec, int val)
Set all size elements to val.
void cvec_free_d_heap(void *vec)
Frees everything so don't use vec after calling this.
int cvec_init_d(cvector_d *vec, double *vals, cvec_sz num)
Same as cvec_init_d_heap() except the vector passed in was declared on the stack so it isn't allocate...
double cvec_pop_d(cvector_d *vec)
Remove and return the last element (size decreased 1).
void cvec_popm_void(cvector_void *vec, void *ret)
Same as pop except no elem_free even if it's set.
int cvec_insert_void(cvector_void *vec, cvec_sz i, void *a)
Insert a at index i (0 based).
cvec_sz CVEC_STR_START_SZ
#define CVEC_NEW_DEFS(TYPE, RESIZE_MACRO)
int cvec_replace_f_struct(cvector_f_struct *vec, cvec_sz i, f_struct *a, f_struct *ret)
int cvec_set_val_sz_f_struct(cvector_f_struct *vec, f_struct *val)
int cvec_f_struct(cvector_f_struct *vec, cvec_sz size, cvec_sz capacity, void(*elem_free)(void *), int(*elem_init)(void *, void *))
void cvec_pop_f_struct(cvector_f_struct *vec, f_struct *ret)
void cvec_popm_f_struct(cvector_f_struct *vec, f_struct *ret)
void cvec_free_f_struct(void *vec)
void cvec_replacem_f_struct(cvector_f_struct *vec, cvec_sz i, f_struct *a, f_struct *ret)
void cvec_remove_f_struct(cvector_f_struct *vec, cvec_sz start, cvec_sz end)
int cvec_insert_arraym_f_struct(cvector_f_struct *vec, cvec_sz i, f_struct *a, cvec_sz num)
int cvec_push_f_struct(cvector_f_struct *vec, f_struct *val)
int cvec_set_val_cap_f_struct(cvector_f_struct *vec, f_struct *val)
int cvec_pushm_f_struct(cvector_f_struct *vec, f_struct *a)
int cvec_insertm_f_struct(cvector_f_struct *vec, cvec_sz i, f_struct *a)
int cvec_short(cvector_short *vec, cvec_sz size, cvec_sz capacity)
int cvec_push_short(cvector_short *vec, short a)
void cvec_free_short(void *vec)
f_struct set_f_struct(double d, int i, char *word)
void insert_array_void_test()
void insert_array_d_test()
void set_capacity_str_test()
#define GET_ELEMENT(VEC, I, TYPE)
void vector_of_vectors_test()
t_struct mk_t_struct(double d, int i, char *word)
void zero_init_void_test()
void insert_array_str_test()
f_struct mk_f_struct(double d, int i, char *word)
void set_capacity_i_test()
void free_f_struct(void *tmp)
int init_f_struct(void *dest, void *src)
void insert_array_i_test()
int init_str(void *dest, void *src)
If we weren't testing the move functions we could have src be just a char* to more closely emulate cv...
void set_capacity_void_test()
void set_capacity_d_test()
void zero_init_str_test()
Data structure for double vector.
cvec_sz size
Current size (amount you use when manipulating array directly).
cvec_sz capacity
Allocated size of array; always >= size.
Data structure for int vector.
cvec_sz size
Current size (amount you use when manipulating array directly).
cvec_sz capacity
Allocated size of array; always >= size.
Data structure for short vector.
cvec_sz capacity
Allocated size of array; always >= size.
cvec_sz size
Current size (amount you use when manipulating array directly).
Data structure for string vector.
cvec_sz capacity
Allocated size of array; always >= size.
cvec_sz size
Current size (amount you use when manipulating array directly).
Data structure for generic type (cast to void) vectors.
cvec_sz size
Current size (amount you should use when manipulating array directly).
cvec_sz elem_size
Size in bytes of type stored (sizeof(T) where T is type).
cvec_sz capacity
Allocated size of array; always >= size.
void(* elem_free)(void *)
int(* elem_init)(void *, void *)
Structure used to test generic vector.
Structure used to test generic vector.