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]);
146 int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
152 CU_ASSERT_EQUAL(vec.
size, 10);
154 for (i=0; i<vec.
size; i++)
155 CU_ASSERT_EQUAL(vec.
a[i], i);
160 CU_ASSERT_EQUAL(vec.
size, 20);
162 for (i=0; i<vec.
size; i++)
163 CU_ASSERT_EQUAL(vec.
a[i], i-((i<10)? 9 : 10) );
171 int array[] = { 0, 1, 0, 1, 0, 1, 0, 1 };
187 for (i=0; i<vec.
size; ++i) {
189 CU_ASSERT_EQUAL(vec.
a[i], i);
191 CU_ASSERT_EQUAL(vec.
a[i], (i%2));
193 CU_ASSERT_EQUAL(vec.
a[i], i-8);
206 for (i=0; i<123; i++)
209 CU_ASSERT_EQUAL(123, vec1.
size);
213 CU_ASSERT_EQUAL(123, vec2.
size);
218 for (i=0; i<vec1.
size; i++)
219 CU_ASSERT_EQUAL(vec1.
a[i], vec2.
a[i]);
233 CU_ASSERT_EQUAL(vec.
size, 10);
235 for (i=0; i<1000; i++) {
238 CU_ASSERT_EQUAL(vec.
size, 1010);
244 for (i=999; i>=0; i--) {
246 CU_ASSERT_EQUAL(temp, i);
249 CU_ASSERT_EQUAL(vec.
size, 10);
256 int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
262 CU_ASSERT_EQUAL(vec.
a[4], 4);
266 CU_ASSERT_EQUAL(ret, 4);
267 CU_ASSERT_EQUAL(vec.
a[4], 42);
276 CU_ASSERT_EQUAL(vec->
size, 0);
291 CU_ASSERT_EQUAL(vec->
size, 0);
294 for (i=0; i<1000; i++)
298 CU_ASSERT(vec->
size == 1000);
303 CU_ASSERT(vec->
size == 500);
305 for (i=0; i<vec->
size; i++)
306 CU_ASSERT_EQUAL(vec->
a[i], i);
320 CU_ASSERT_EQUAL(vec.
size, 20);
326 CU_ASSERT_EQUAL(vec.
a[i], 25);
332 CU_ASSERT_EQUAL(vec.
a[i], 42);
334 CU_ASSERT_EQUAL(vec.
a[i], 25);
353 CU_ASSERT_EQUAL(0, vec.
size);
356 for (i=0; i<100; i++)
359 CU_ASSERT_EQUAL(100, vec.
size);
361 for (i=0; i<vec.
size; i++)
362 CU_ASSERT_EQUAL(i+0.5, vec.
a[i]);
375 CU_ASSERT_EQUAL(100, vec.
size);
377 for (i=0; i<100; i++)
380 CU_ASSERT_EQUAL(100, vec.
size);
384 CU_ASSERT_EQUAL(50, vec.
size);
386 for (i=0,j=0; i<vec.
size; i++,j++) {
387 CU_ASSERT_EQUAL(j+0.5, vec.
a[i]);
401 CU_ASSERT(vec.
size == 0)
402 CU_ASSERT(vec.
a == NULL)
404 for (i=0; i<100; i++)
407 CU_ASSERT_EQUAL(100, vec.
size);
412 for (i=0; i<vec.
size; i++)
413 CU_ASSERT_EQUAL(i+0.5, vec.
a[i]);
421 double array[] = { 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5 };
426 CU_ASSERT_EQUAL(vec1.
size, 10);
429 for (i=0; i<vec1.
size; i++)
430 CU_ASSERT_EQUAL(vec1.
a[i], i+0.5);
435 CU_ASSERT_EQUAL(vec1.
size, 20);
437 for (i=0; i<vec1.
size; i++)
438 CU_ASSERT_EQUAL(vec1.
a[i], i-9.5 );
447 double array[] = { 0, 1, 0, 1, 0, 1 };
460 for (i=0; i<vec.
size; ++i) {
462 CU_ASSERT_EQUAL(vec.
a[i], i);
464 CU_ASSERT_EQUAL(vec.
a[i], (i%2));
466 CU_ASSERT_EQUAL(vec.
a[i], i-6);
479 for (i=0; i<123; i++)
482 CU_ASSERT_EQUAL(123, vec1.
size);
486 CU_ASSERT_EQUAL(123, vec2.
size);
491 for (i=0; i<vec1.
size; i++)
492 CU_ASSERT_EQUAL(vec1.
a[i], vec2.
a[i]);
506 CU_ASSERT_EQUAL(vec1.
size, 0);
508 for (i=0; i<1000; i++)
511 CU_ASSERT_EQUAL(vec1.
size, 1000);
516 for (i=999; i>=0; i--) {
518 CU_ASSERT_EQUAL(temp, i);
521 CU_ASSERT_EQUAL(vec1.
size, 0);
528 double array[] = { 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5 };
534 CU_ASSERT_EQUAL(vec.
a[4], 4.5);
538 CU_ASSERT_EQUAL(ret, 4.5);
539 CU_ASSERT_EQUAL(vec.
a[4], 42);
564 for (i=0; i<1000; i++)
568 CU_ASSERT(vec1.
size == 1000);
573 CU_ASSERT(vec1.
size == 500);
575 for (i=0; i<vec1.
size; i++)
576 CU_ASSERT_EQUAL(vec1.
a[i], i+0.5);
591 for (i=0; i<vec->
size; i++)
592 CU_ASSERT_EQUAL(vec->
a[i], 42.5);
597 CU_ASSERT_EQUAL(vec->
a[i], 25.5);
615 CU_ASSERT_EQUAL(0, vec->
size);
617 for (i=0; i<50; i++) {
618 sprintf(buffer,
"hello %d", i);
622 CU_ASSERT_EQUAL(50, vec->
size);
624 for (i=0; i<vec->
size; i++) {
625 sprintf(buffer,
"hello %d", i);
626 CU_ASSERT_STRING_EQUAL(vec->
a[i], buffer);
643 for (i=0; i<100; i++) {
644 sprintf(buffer,
"hello %d", i);
648 CU_ASSERT_EQUAL(100, vec1.
size);
652 CU_ASSERT_EQUAL(50, vec1.
size);
654 for (i=0,j=0; i<vec1.
size; i++,j++) {
655 sprintf(buffer,
"hello %d", j);
656 CU_ASSERT_STRING_EQUAL(vec1.
a[i], buffer);
673 for (i=0; i<100; i++) {
674 sprintf(buffer,
"hello %d", i);
678 CU_ASSERT_EQUAL(100, vec1.
size);
680 for (i=25; i<75; ++i)
685 CU_ASSERT_EQUAL(50, vec1.
size);
687 for (i=0,j=0; i<vec1.
size; i++,j++) {
688 sprintf(buffer,
"hello %d", j);
689 CU_ASSERT_STRING_EQUAL(vec1.
a[i], buffer);
693 for (i=25; i<75; ++i) {
694 sprintf(buffer,
"hello %d", i);
695 CU_ASSERT_STRING_EQUAL(strs[i], buffer);
711 CU_ASSERT(vec.
size == 0)
712 CU_ASSERT(vec.
a == NULL)
714 for (i=0; i<50; i++) {
715 sprintf(buffer,
"hello %d", i);
719 CU_ASSERT_EQUAL(50, vec.
size);
724 for (i=0; i<vec.
size; i++) {
725 sprintf(buffer,
"hello %d", i);
726 CU_ASSERT_STRING_EQUAL(vec.
a[i], buffer);
735 char* array[] = {
"hello 0",
"hello 1",
"hello 2",
"hello 3",
"hello 4",
736 "hello 5",
"hello 6",
"hello 7",
"hello 8",
"hello 9" };
743 CU_ASSERT_EQUAL(vec->
size, 10);
745 for (i=0; i<vec->
size; i++) {
746 sprintf(buffer,
"hello %d", i);
747 CU_ASSERT_STRING_EQUAL(vec->
a[i], buffer);
750 for (i=0; i<10; i++) {
751 sprintf(buffer,
"hello %d", -i);
756 CU_ASSERT_EQUAL(vec->
size, 20);
758 for (i=0; i<vec->
size; i++) {
759 sprintf(buffer,
"hello %d", i-((i<10)? 9 : 10));
760 CU_ASSERT_STRING_EQUAL(vec->
a[i], buffer);
771 char* array[] = {
"hello 0",
"hello 1",
"hello 2",
"hello 3",
"hello 4",
772 "hello 5",
"hello 6",
"hello 7",
"hello 8",
"hello 9",
"hello 10" };
776 CU_ASSERT_EQUAL(vec.
size, 10);
781 CU_ASSERT_EQUAL(vec.
size, 21);
784 for (i=0; i<vec.
size; ++i) {
786 sprintf(buffer,
"hello %d", i);
787 CU_ASSERT_STRING_EQUAL(vec.
a[i], buffer);
790 sprintf(buffer,
"hello %d", i-11);
791 CU_ASSERT_STRING_EQUAL(vec.
a[i], buffer);
806 for (i=0; i<123; i++) {
807 sprintf(buffer,
"hello %d", i);
811 CU_ASSERT_EQUAL(123, vec1.
size);
815 CU_ASSERT_EQUAL(123, vec2.
size);
820 for (i=0; i<vec1.
size; i++) {
821 CU_ASSERT_STRING_EQUAL(vec1.
a[i], vec2.
a[i]);
842 CU_ASSERT_EQUAL(vec1.
size, 1);
844 CU_ASSERT_EQUAL(vec1.
size, 0);
846 for (i=0; i<1000; i++) {
847 sprintf(buffer,
"hello %d", i);
851 CU_ASSERT_EQUAL(vec1.
size, 1000);
856 for (i=999; i>=0; i--) {
857 sprintf(buffer,
"hello %d", i);
859 CU_ASSERT_STRING_EQUAL(buffer, buffer2);
862 CU_ASSERT_EQUAL(vec1.
size, 0);
869 int i, loc, to_replace[] = { 0, 125, 256 };
879 for (i=0; i<1000; i++) {
880 sprintf(buffer,
"hello %d", i);
884 for (i=0; i<
sizeof(to_replace)/
sizeof(
int); i++) {
886 sprintf(buffer,
"hello %d", loc);
887 sprintf(buffer2,
"goodbye %d", loc);
888 CU_ASSERT_STRING_EQUAL(vec.
a[loc], buffer);
891 CU_ASSERT_STRING_EQUAL(vec.
a[loc], buffer2);
892 CU_ASSERT_STRING_EQUAL(retbuf, buffer);
918 CU_ASSERT_EQUAL(vec.
size, 1);
921 for (i=0; i<1000; i++) {
922 sprintf(buffer,
"hello %d", i);
927 CU_ASSERT(vec.
size == 1001);
932 CU_ASSERT(vec.
size == 500);
934 for (i=0; i<vec.
size; i++) {
935 sprintf(buffer,
"hello %d", i-1);
937 CU_ASSERT_STRING_EQUAL(vec.
a[i], buffer);
939 CU_ASSERT_EQUAL(vec.
a[i], NULL);
953 CU_ASSERT_EQUAL(vec.
size, 20)
958 for (i=0; i<vec.
size; i++)
959 CU_ASSERT_STRING_EQUAL(vec.
a[i],
"42");
964 CU_ASSERT_STRING_EQUAL(vec.
a[i],
"25");
975 "one",
"two",
"three",
976 "four",
"five",
"six",
977 "seven",
"eight",
"nine",
985 CU_ASSERT_EQUAL(vec1.
size, 1);
987 CU_ASSERT_EQUAL(vec1.
size, 0);
989 for (i=0; i<1000; i++) {
990 sprintf(buffer,
"hello %d", i);
994 CU_ASSERT_EQUAL(vec1.
size, 1000);
996 for (i=999; i>=0; i--) {
997 sprintf(buffer,
"hello %d", i);
999 CU_ASSERT_STRING_EQUAL(buffer, ret);
1003 CU_ASSERT_EQUAL(vec1.
size, 0);
1005 for (i=0; i<100; i++) {
1006 sprintf(buffer,
"hello %d", i);
1012 CU_ASSERT_STRING_EQUAL(ret,
"hello 25");
1015 CU_ASSERT_EQUAL(vec1.
size, 101);
1018 for (i=0; i<101; i++) {
1020 CU_ASSERT_STRING_EQUAL(vec1.
a[i],
"hello replacem");
1021 }
else if (i == 50) {
1022 CU_ASSERT_STRING_EQUAL(vec1.
a[i],
"hello insertm");
1025 sprintf(buffer,
"hello %d", i-j);
1026 CU_ASSERT_STRING_EQUAL(vec1.
a[i], buffer);
1031 CU_ASSERT_EQUAL(vec1.
size, 111);
1033 for (i=0; i<10; ++i) {
1034 CU_ASSERT_STRING_EQUAL(vec1.
a[60+i], strs[i]);
1038 CU_ASSERT_EQUAL(vec1.
size, 101);
1055 strcpy(a.
word, word);
1080 #define GET_T(X,Y) ((t_struct*)&X.a[Y*X.elem_size])
1081 #define GET_F(X,Y) ((f_struct*)&X.a[Y*X.elem_size])
1083 #define GET_TP(X,Y) ((t_struct*)&X->a[Y*X->elem_size])
1084 #define GET_FP(X,Y) ((f_struct*)&X->a[Y*X->elem_size])
1102 return d->
word != NULL;
1121 CU_ASSERT_EQUAL(0, vec1.
size);
1124 CU_ASSERT_EQUAL(0, vec2.
size);
1126 for (i=0; i<100; i++) {
1127 sprintf(buffer,
"%d", i);
1135 CU_ASSERT_EQUAL(100, vec1.
size);
1136 CU_ASSERT_EQUAL(100, vec2.
size);
1139 for (i=0; i<vec1.
size; i++) {
1141 sprintf(buffer,
"%d", i);
1142 CU_ASSERT_EQUAL(i,
GET_T(vec1, i)->d);
1143 CU_ASSERT_EQUAL(i,
GET_T(vec1, i)->i);
1144 CU_ASSERT_STRING_EQUAL(buffer,
GET_T(vec1, i)->word);
1146 CU_ASSERT_EQUAL(i,
GET_F(vec2, i)->d);
1147 CU_ASSERT_EQUAL(i,
GET_F(vec2, i)->i);
1148 CU_ASSERT_STRING_EQUAL(buffer,
GET_F(vec2, i)->word);
1164 CU_ASSERT_EQUAL(101, vec1->
capacity);
1165 CU_ASSERT_EQUAL(100, vec1->
size);
1168 CU_ASSERT_EQUAL(100, vec2->
size);
1170 for (i=0; i<100; i++) {
1171 sprintf(buffer,
"%d", i);
1173 GET_TP(vec1, i)->d = i+0.5;
1175 strcpy(
GET_TP(vec1, i)->word, buffer);
1177 GET_FP(vec2, i)->d = i+0.5;
1182 CU_ASSERT_EQUAL(100, vec1->
size);
1183 CU_ASSERT_EQUAL(100, vec2->
size);
1188 CU_ASSERT_EQUAL(50, vec1->
size);
1189 CU_ASSERT_EQUAL(50, vec2->
size);
1191 for (i=0,j=0; i<vec1->
size; i++,j++) {
1192 sprintf(buffer,
"%d", j);
1193 CU_ASSERT_EQUAL(
GET_TP(vec1, i)->d, j+0.5);
1194 CU_ASSERT_EQUAL(
GET_TP(vec1, i)->i, j);
1195 CU_ASSERT_STRING_EQUAL(
GET_TP(vec1, i)->word, buffer);
1197 CU_ASSERT_EQUAL(
GET_FP(vec2, i)->d, j+0.5);
1198 CU_ASSERT_EQUAL(
GET_FP(vec2, i)->i, j);
1199 CU_ASSERT_STRING_EQUAL(
GET_FP(vec2, i)->word, buffer);
1217 CU_ASSERT_EQUAL(100, vec2->
size);
1219 for (i=0; i<100; i++) {
1220 sprintf(buffer,
"%d", i);
1222 GET_FP(vec2, i)->d = i+0.5;
1227 CU_ASSERT_EQUAL(100, vec2->
size);
1229 for (i=25; i<75; i++)
1230 strs[i] =
GET_FP(vec2, i)->word;
1234 CU_ASSERT_EQUAL(50, vec2->
size);
1236 for (i=0,j=0; i<vec2->
size; i++,j++) {
1237 sprintf(buffer,
"%d", j);
1239 CU_ASSERT_EQUAL(
GET_FP(vec2, i)->d, j+0.5);
1240 CU_ASSERT_EQUAL(
GET_FP(vec2, i)->i, j);
1241 CU_ASSERT_STRING_EQUAL(
GET_FP(vec2, i)->word, buffer);
1248 for (i=25; i<75; ++i) {
1249 sprintf(buffer,
"%d", i);
1250 CU_ASSERT_STRING_EQUAL(strs[i], buffer);
1269 for (i=0; i<10; i++) {
1270 sprintf(buffer,
"hello %d", i);
1273 strcpy(array[i].word, buffer);
1275 array2[i].
d = i+0.5;
1285 CU_ASSERT_EQUAL(vec1.
size, 10);
1286 CU_ASSERT_EQUAL(vec2.
size, 10);
1289 for (i=0; i<vec1.
size; i++) {
1290 sprintf(buffer,
"hello %d", i);
1291 CU_ASSERT_EQUAL(
GET_T(vec1, i)->d, i+0.5);
1292 CU_ASSERT_EQUAL(
GET_T(vec1, i)->i, i);
1293 CU_ASSERT_STRING_EQUAL(
GET_T(vec1, i)->word, buffer);
1295 CU_ASSERT_EQUAL(
GET_F(vec2, i)->d, i+0.5);
1296 CU_ASSERT_EQUAL(
GET_F(vec2, i)->i, i);
1297 CU_ASSERT_STRING_EQUAL(
GET_F(vec2, i)->word, buffer);
1300 for (i=0; i<10; i++) {
1301 sprintf(buffer,
"hello %d", -i);
1309 CU_ASSERT_EQUAL(vec1.
size, 20);
1310 CU_ASSERT_EQUAL(vec2.
size, 20);
1313 for (i=0; i<vec1.
size; i++) {
1314 sprintf(buffer,
"hello %d", i-((i<10)? 9 : 10));
1316 CU_ASSERT_EQUAL(
GET_T(vec1, i)->d, i-0.5-9 );
1317 CU_ASSERT_EQUAL(
GET_T(vec1, i)->i, i-((i<10)? 9 : 10) );
1318 CU_ASSERT_STRING_EQUAL(
GET_T(vec1, i)->word, buffer);
1320 CU_ASSERT_EQUAL(
GET_F(vec2, i)->d, i-0.5-9 );
1321 CU_ASSERT_EQUAL(
GET_F(vec2, i)->i, i-((i<10)? 9 : 10) );
1322 CU_ASSERT_STRING_EQUAL(
GET_F(vec2, i)->word, buffer);
1334 float array1[] = { 0.5f, 1.5f, 7.5f, 8.5f, 9.5f };
1335 float array2[] = { 2.5f, 3.5f, 4.5f, 5.5f, 6.5f };
1340 CU_ASSERT_EQUAL(vec1.
size, 10);
1342 for (i=0; i<vec1.
size; ++i)
1343 CU_ASSERT_EQUAL(((
float*)vec1.
a)[i], i+0.5f);
1362 CU_ASSERT(vec1.
size == 0)
1363 CU_ASSERT(vec1.
a == NULL)
1365 CU_ASSERT(vec2.
size == 0)
1366 CU_ASSERT(vec2.
a == NULL)
1368 for (i=0; i<100; i++) {
1369 sprintf(buffer,
"%d", i);
1378 CU_ASSERT_EQUAL(126, vec1.
capacity);
1379 CU_ASSERT_EQUAL(126, vec2.
capacity);
1381 for (i=0; i<vec1.
size; i++) {
1383 sprintf(buffer,
"%d", i);
1384 CU_ASSERT_EQUAL(i,
GET_T(vec1, i)->d);
1385 CU_ASSERT_EQUAL(i,
GET_T(vec1, i)->i);
1386 CU_ASSERT_STRING_EQUAL(buffer,
GET_T(vec1, i)->word);
1388 CU_ASSERT_EQUAL(i,
GET_F(vec2, i)->d);
1389 CU_ASSERT_EQUAL(i,
GET_F(vec2, i)->i);
1390 CU_ASSERT_STRING_EQUAL(buffer,
GET_F(vec2, i)->word);
1414 CU_ASSERT_EQUAL(0, vec1.
size);
1417 CU_ASSERT_EQUAL(0, vec2.
size);
1419 for (i=0; i<100; i++) {
1420 sprintf(buffer,
"%d", i);
1428 CU_ASSERT_EQUAL(100, vec1.
size);
1429 CU_ASSERT_EQUAL(100, vec2.
size);
1434 CU_ASSERT_EQUAL(vec3.
size, vec1.
size);
1435 CU_ASSERT_EQUAL(vec4.
size, vec2.
size);
1450 for (i=0; i<vec1.
size; i++) {
1452 CU_ASSERT_EQUAL(
GET_T(vec3, i)->d,
GET_T(vec1, i)->d);
1453 CU_ASSERT_EQUAL(
GET_T(vec3, i)->i,
GET_T(vec1, i)->i);
1454 CU_ASSERT_STRING_EQUAL(
GET_T(vec3, i)->word,
GET_T(vec1, i)->word);
1456 CU_ASSERT_EQUAL(
GET_F(vec4, i)->d,
GET_F(vec2, i)->d);
1457 CU_ASSERT_EQUAL(
GET_F(vec4, i)->i,
GET_F(vec2, i)->i);
1458 CU_ASSERT_STRING_EQUAL(
GET_F(vec4, i)->word,
GET_F(vec2, i)->word);
1484 for (i=0; i<vec2.
size; ++i)
1488 strcpy(buffer,
"test_pop_null");
1494 CU_ASSERT_EQUAL(vec1.
size, 11);
1495 CU_ASSERT_EQUAL(vec2.
size, 11);
1498 CU_ASSERT_EQUAL(vec1.
size, 10);
1499 CU_ASSERT_EQUAL(vec2.
size, 10);
1502 for (i=0; i<1000; i++) {
1503 sprintf(buffer,
"hello %d", i);
1513 CU_ASSERT_EQUAL(vec1.
size, 1010);
1517 CU_ASSERT_EQUAL(vec2.
size, 1010);
1521 for (i=999; i>=0; i--) {
1522 sprintf(buffer,
"hello %d", i);
1526 CU_ASSERT_EQUAL(temp.
d, i );
1527 CU_ASSERT_EQUAL(temp.
i, i );
1528 CU_ASSERT_STRING_EQUAL(temp.
word, buffer);
1530 CU_ASSERT_EQUAL(temp2.
d, i );
1531 CU_ASSERT_EQUAL(temp2.
i, i );
1536 CU_ASSERT_EQUAL(vec1.
size, 10);
1537 CU_ASSERT_EQUAL(vec2.
size, 10);
1547 int i, loc, to_replace[] = { 1, 25, 50 };
1549 f_struct temp2, ret_f_struct, temp3;
1560 for (i=0; i<100; i++) {
1561 sprintf(buffer,
"%d", i);
1571 for (i=0; i<
sizeof(to_replace)/
sizeof(
int); ++i) {
1572 loc = to_replace[i];
1573 sprintf(buffer,
"%d", loc);
1574 CU_ASSERT_EQUAL(loc,
GET_T(vec1, loc)->d);
1575 CU_ASSERT_EQUAL(loc,
GET_T(vec1, loc)->i);
1576 CU_ASSERT_STRING_EQUAL(buffer,
GET_T(vec1, loc)->word);
1578 CU_ASSERT_EQUAL(loc,
GET_F(vec2, loc)->d);
1579 CU_ASSERT_EQUAL(loc,
GET_F(vec2, loc)->i);
1580 CU_ASSERT_STRING_EQUAL(buffer,
GET_F(vec2, loc)->word);
1582 CU_ASSERT_EQUAL(loc,
GET_F(vec3, loc)->d);
1583 CU_ASSERT_EQUAL(loc,
GET_F(vec3, loc)->i);
1584 CU_ASSERT_STRING_EQUAL(buffer,
GET_F(vec3, loc)->word);
1586 sprintf(buffer2,
"neg %d", -loc);
1594 CU_ASSERT_EQUAL(-loc,
GET_T(vec1, loc)->d);
1595 CU_ASSERT_EQUAL(-loc,
GET_T(vec1, loc)->i);
1596 CU_ASSERT_STRING_EQUAL(buffer2,
GET_T(vec1, loc)->word);
1598 CU_ASSERT_EQUAL(-loc,
GET_F(vec2, loc)->d);
1599 CU_ASSERT_EQUAL(-loc,
GET_F(vec2, loc)->i);
1600 CU_ASSERT_STRING_EQUAL(buffer2,
GET_F(vec2, loc)->word);
1602 CU_ASSERT_EQUAL(loc, ret_t_struct.
d);
1603 CU_ASSERT_EQUAL(loc, ret_t_struct.
i);
1604 CU_ASSERT_STRING_EQUAL(buffer, ret_t_struct.
word);
1606 CU_ASSERT_EQUAL(loc, ret_f_struct.
d);
1607 CU_ASSERT_EQUAL(loc, ret_f_struct.
i);
1608 CU_ASSERT_STRING_EQUAL(buffer, ret_f_struct.
word);
1614 CU_ASSERT_EQUAL(-loc,
GET_F(vec3, loc)->d);
1615 CU_ASSERT_EQUAL(-loc,
GET_F(vec3, loc)->i);
1616 CU_ASSERT_STRING_EQUAL(buffer2,
GET_F(vec3, loc)->word);
1618 CU_ASSERT_EQUAL(loc, ret_f_struct.
d);
1619 CU_ASSERT_EQUAL(loc, ret_f_struct.
i);
1620 CU_ASSERT_STRING_EQUAL(buffer, ret_f_struct.
word);
1627 sprintf(buffer,
"%d", loc);
1628 sprintf(buffer2,
"neg %d", -loc);
1637 CU_ASSERT_EQUAL(-loc,
GET_T(vec1, loc)->d);
1638 CU_ASSERT_EQUAL(-loc,
GET_T(vec1, loc)->i);
1639 CU_ASSERT_STRING_EQUAL(buffer2,
GET_T(vec1, loc)->word);
1641 CU_ASSERT_EQUAL(-loc,
GET_F(vec2, loc)->d);
1642 CU_ASSERT_EQUAL(-loc,
GET_F(vec2, loc)->i);
1643 CU_ASSERT_STRING_EQUAL(buffer2,
GET_F(vec2, loc)->word);
1645 CU_ASSERT_EQUAL(-loc,
GET_F(vec3, loc)->d);
1646 CU_ASSERT_EQUAL(-loc,
GET_F(vec3, loc)->i);
1647 CU_ASSERT_STRING_EQUAL(buffer2,
GET_F(vec3, loc)->word);
1659 CU_ASSERT_EQUAL(vect->
capacity, 19);
1660 CU_ASSERT_EQUAL(vec2->
capacity, 21);
1684 CU_ASSERT_EQUAL(vec1.
size, 0);
1686 CU_ASSERT_EQUAL(vec2.
size, 0);
1689 for (i=0; i<1000; i++) {
1690 sprintf(buffer,
"hello %d", i);
1699 CU_ASSERT(vec1.
size == 1000);
1702 CU_ASSERT(vec2.
size == 1000);
1709 CU_ASSERT(vec1.
size == 500);
1712 CU_ASSERT(vec2.
size == 500);
1714 for (i=0; i<vec1.
size; i++) {
1715 sprintf(buffer,
"hello %d", i);
1717 CU_ASSERT_EQUAL(
GET_T(vec1, i)->d, i );
1718 CU_ASSERT_EQUAL(
GET_T(vec1, i)->i, i );
1719 CU_ASSERT_STRING_EQUAL(
GET_T(vec1, i)->word, buffer);
1721 CU_ASSERT_EQUAL(
GET_F(vec2, i)->d, i );
1722 CU_ASSERT_EQUAL(
GET_F(vec2, i)->i, i );
1723 CU_ASSERT_STRING_EQUAL(
GET_F(vec2, i)->word, buffer);
1740 CU_ASSERT_EQUAL(vec1.
size, 20);
1741 CU_ASSERT_EQUAL(vec2.
size, 20);
1743 CU_ASSERT_EQUAL(vec1.
capacity, 25);
1746 for (i=0; i<vec2.
size; ++i)
1757 for (i=0; i<vec1.
size; i++) {
1758 CU_ASSERT_EQUAL(
GET_T(vec1, i)->d, 42.5);
1759 CU_ASSERT_EQUAL(
GET_T(vec1, i)->i, 42);
1760 CU_ASSERT_STRING_EQUAL(
GET_T(vec1, i)->word,
"hello");
1762 CU_ASSERT_EQUAL(
GET_F(vec2, i)->d, 42.5);
1763 CU_ASSERT_EQUAL(
GET_F(vec2, i)->i, 42);
1764 CU_ASSERT_STRING_EQUAL(
GET_F(vec2, i)->word,
"hello");
1777 CU_ASSERT_EQUAL(vec1.
size, 20);
1778 CU_ASSERT_EQUAL(vec1.
capacity, 25);
1786 CU_ASSERT_EQUAL(
GET_T(vec1, i)->d, 25.5);
1787 CU_ASSERT_EQUAL(
GET_T(vec1, i)->i, 25);
1788 CU_ASSERT_STRING_EQUAL(
GET_T(vec1, i)->word,
"goodbye");
1791 CU_ASSERT_EQUAL(
GET_F(vec2, i)->d, 25.5);
1792 CU_ASSERT_EQUAL(
GET_F(vec2, i)->i, 25);
1793 CU_ASSERT_STRING_EQUAL(
GET_F(vec2, i)->word,
"goodbye");
1810 char** d = (
char**)dest;
1811 char** s = (
char**)src;
1823 #define GET_ELEMENT(VEC,I,TYPE) ((TYPE*)&(VEC).a[(I)*(VEC).elem_size])
1833 "one",
"two",
"three",
1834 "four",
"five",
"six",
1835 "seven",
"eight",
"nine",
1844 CU_ASSERT_EQUAL(vec1.
size, 1);
1846 CU_ASSERT_EQUAL(vec1.
size, 0);
1848 for (i=0; i<1000; i++) {
1849 sprintf(buffer,
"hello %d", i);
1854 CU_ASSERT_EQUAL(vec1.
size, 1000);
1856 for (i=999; i>=0; i--) {
1857 sprintf(buffer,
"hello %d", i);
1859 CU_ASSERT_STRING_EQUAL(buffer, ret);
1863 CU_ASSERT_EQUAL(vec1.
size, 0);
1865 for (i=0; i<100; i++) {
1866 sprintf(buffer,
"hello %d", i);
1875 CU_ASSERT_STRING_EQUAL(ret,
"hello 25");
1878 CU_ASSERT_EQUAL(vec1.
size, 101);
1881 for (i=0; i<101; i++) {
1883 CU_ASSERT_STRING_EQUAL(*
GET_ELEMENT(vec1, i,
char*),
"hello replacem");
1884 }
else if (i == 50) {
1885 CU_ASSERT_STRING_EQUAL(*
GET_ELEMENT(vec1, i,
char*),
"hello insertm");
1888 sprintf(buffer,
"hello %d", i-j);
1889 CU_ASSERT_STRING_EQUAL(*
GET_ELEMENT(vec1, i,
char*), buffer);
1894 CU_ASSERT_EQUAL(vec1.
size, 111);
1896 for (i=0; i<10; ++i) {
1897 CU_ASSERT_STRING_EQUAL(*
GET_ELEMENT(vec1, 60+i,
char*), strs[i]);
1901 CU_ASSERT_EQUAL(vec1.
size, 101);
1922 CU_ASSERT_EQUAL(0, tmp_vecs.
size);
1924 for (i=0; i<50; i++) {
1925 sprintf(buffer,
"hello %d", i);
1929 CU_ASSERT_EQUAL(vec1.
size, 0);
1932 cvec_i(&tmp_vec_i, 0, 0);
1934 for (i=0; i<20; ++i)
1937 for (i=0; i<20; ++i) {
1939 for (j=0; j<500; ++j) {
1943 CU_ASSERT_EQUAL(tmp_vec_i2->
size, 520);
1946 CU_ASSERT_EQUAL(vec1.
size, 20);
1948 for (i=0; i<20; ++i) {
1949 for (j=0; j<500; ++j) {
1951 CU_ASSERT_EQUAL(tmp_int, 499-j);
1954 CU_ASSERT_EQUAL(tmp_vec_i2->
size, 20);
1956 for (j=0; j<20; j++) {
1957 CU_ASSERT_EQUAL(tmp_vec_i.
a[i], tmp_vec_i2->
a[i]);
1978 CU_ASSERT_EQUAL(0, vec.
size);
1980 for (i=0; i<100; i++)
1983 CU_ASSERT_EQUAL(100, vec.
size);
1985 for (i=0; i<vec.
size; i++)
1986 CU_ASSERT_EQUAL(i, vec.
a[i]);
2012 CU_ASSERT_EQUAL(vec.
size, 20);
2015 for (i=0; i<vec.
size; ++i)
2024 for (i=0; i<vec.
size; i++) {
2025 CU_ASSERT_EQUAL(vec.
a[i].
d, 42.5);
2026 CU_ASSERT_EQUAL(vec.
a[i].
i, 42);
2027 CU_ASSERT_STRING_EQUAL(vec.
a[i].
word,
"hello");
2045 CU_ASSERT_EQUAL(vec.
a[i].
d, 25.5);
2046 CU_ASSERT_EQUAL(vec.
a[i].
i, 25);
2047 CU_ASSERT_STRING_EQUAL(vec.
a[i].
word,
"goodbye");
2051 sprintf(buffer,
"neg %d", -loc);
2055 CU_ASSERT_EQUAL(-loc, vec.
a[loc].
d);
2056 CU_ASSERT_EQUAL(-loc, vec.
a[loc].
i);
2057 CU_ASSERT_STRING_EQUAL(buffer, vec.
a[loc].
word);
2064 for (i=0; i<100; i++) {
2065 sprintf(buffer,
"%d", i);
2071 CU_ASSERT_EQUAL(100, vec.
size);
2073 for (i=0; i<vec.
size; i++) {
2074 sprintf(buffer,
"%d", i);
2075 CU_ASSERT_EQUAL(i, vec.
a[i].
d);
2076 CU_ASSERT_EQUAL(i, vec.
a[i].
i);
2077 CU_ASSERT_STRING_EQUAL(buffer, vec.
a[i].
word);
2080 for (i=vec.
size-1; i >= 10; i--) {
2081 sprintf(buffer,
"%d", i);
2084 CU_ASSERT_EQUAL(temp.
d, i );
2085 CU_ASSERT_EQUAL(temp.
i, i );
2090 CU_ASSERT_EQUAL(10, vec.
size);
2094 sprintf(buffer,
"%d", 9);
2095 CU_ASSERT_EQUAL(temp.
d, 9);
2096 CU_ASSERT_EQUAL(temp.
i, 9);
2097 CU_ASSERT_STRING_EQUAL(buffer, temp.
word);
2100 CU_ASSERT_EQUAL(9, vec.
size);
2103 for (i=4; i<7; i++) {
2109 CU_ASSERT_EQUAL(6, vec.
size);
2111 for (i=0; i<vec.
size; i++) {
2112 int j = (i < 4) ? i : i+3;
2113 sprintf(buffer,
"%d", j);
2114 CU_ASSERT_EQUAL(j, vec.
a[i].
d);
2115 CU_ASSERT_EQUAL(j, vec.
a[i].
i);
2116 CU_ASSERT_STRING_EQUAL(buffer, vec.
a[i].
word);
2120 CU_ASSERT_EQUAL(vec.
size, 0);
2125 CU_ASSERT_EQUAL(vec.
size, 0);
2130 CU_ASSERT_EQUAL(vec.
size, 1);
2132 CU_ASSERT_EQUAL(vec.
size, 0);
2134 for (i=0; i<1000; i++) {
2135 sprintf(buffer,
"hello %d", i);
2141 CU_ASSERT_EQUAL(vec.
size, 1000);
2143 for (i=999; i>=0; i--) {
2144 sprintf(buffer,
"hello %d", i);
2146 CU_ASSERT_EQUAL(i, temp.
i);
2147 CU_ASSERT_EQUAL(i, temp.
d);
2148 CU_ASSERT_STRING_EQUAL(buffer, temp.
word);
2151 CU_ASSERT_EQUAL(vec.
size, 0);
2153 for (i=0; i<100; i++) {
2154 sprintf(buffer,
"hello %d", i);
2167 CU_ASSERT_STRING_EQUAL(ret.
word,
"hello 25");
2170 CU_ASSERT_EQUAL(vec.
size, 101);
2173 for (i=0; i<101; i++) {
2175 CU_ASSERT_STRING_EQUAL(vec.
a[i].
word,
"hello replacem");
2176 }
else if (i == 50) {
2177 CU_ASSERT_STRING_EQUAL(vec.
a[i].
word,
"hello insertm");
2180 sprintf(buffer,
"hello %d", i-j);
2181 CU_ASSERT_STRING_EQUAL(vec.
a[i].
word, buffer);
2187 CU_ASSERT_EQUAL(vec.
size, 111);
2189 for (i=0; i<10; ++i) {
2190 CU_ASSERT_STRING_EQUAL(vec.
a[60+i].
word, array[i].
word);
2194 CU_ASSERT_EQUAL(vec.
size, 101);
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...
cvector_d * cvec_d_heap(cvec_sz size, cvec_sz capacity)
Creates a new cvector_d on the heap.
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 sets size and capacity to 0.
void cvec_free_d(void *vec)
Frees the internal array and sets size and capacity to 0.
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.
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.
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.
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.
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.
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 sets size and capacity to 0.
void cvec_pop_void(cvector_void *vec, void *ret)
Remove the last element (size decreased 1).
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.
cvector_i * cvec_i_heap(cvec_sz size, cvec_sz capacity)
Creates a new cvector_i on the heap.
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 size and capacity to 0.
int cvec_set_cap_d(cvector_d *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_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_get_void(cvector_void *vec, cvec_sz i)
Return a void pointer to the ith element.
void cvec_set_val_cap_i(cvector_i *vec, int val)
Fills entire allocated array (capacity) with val.
cvector_str * cvec_str_heap(cvec_sz size, cvec_sz capacity)
Create a new cvector_str on the heap.
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.
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_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.