+#include <stdint.h>
+
#include "clar_libgit2.h"
#include "vector.h"
{
git_vector x;
int i;
- git_vector_init(&x, 1, NULL);
+ cl_git_pass(git_vector_init(&x, 1, NULL));
for (i = 0; i < 10; ++i) {
git_vector_insert(&x, (void*) 0xabc);
}
void test_core_vector__1(void)
{
git_vector x;
- // make initial capacity exact for our insertions.
- git_vector_init(&x, 3, NULL);
+ /* make initial capacity exact for our insertions. */
+ cl_git_pass(git_vector_init(&x, 3, NULL));
git_vector_insert(&x, (void*) 0xabc);
git_vector_insert(&x, (void*) 0xdef);
git_vector_insert(&x, (void*) 0x123);
- git_vector_remove(&x, 0); // used to read past array bounds.
+ git_vector_remove(&x, 0); /* used to read past array bounds. */
git_vector_free(&x);
}
static int compare_them(const void *a, const void *b)
{
- return (int)((long)a - (long)b);
+ return (int)((intptr_t)a - (intptr_t)b);
}
/* insert_sorted */
void test_core_vector__3(void)
{
git_vector x;
- long i;
- git_vector_init(&x, 1, &compare_them);
+ intptr_t i;
+ cl_git_pass(git_vector_init(&x, 1, &compare_them));
for (i = 0; i < 10; i += 2) {
git_vector_insert_sorted(&x, (void*)(i + 1), NULL);
void test_core_vector__4(void)
{
git_vector x;
- long i;
- git_vector_init(&x, 1, &compare_them);
+ intptr_t i;
+ cl_git_pass(git_vector_init(&x, 1, &compare_them));
for (i = 0; i < 10; i += 2) {
git_vector_insert_sorted(&x, (void*)(i + 1), NULL);
git_vector x;
int i;
- git_vector_init(&x, 1, &compare_structs);
+ cl_git_pass(git_vector_init(&x, 1, &compare_structs));
for (i = 0; i < 10; i += 2)
git_vector_insert_sorted(&x, alloc_struct(i), &merge_structs);
size_t i;
void *compare;
- git_vector_init(&x, 1, NULL);
+ cl_git_pass(git_vector_init(&x, 1, NULL));
git_vector_insert(&x, (void*) 0x001);
cl_assert(x.length == 1);
git_vector_free(&x);
}
+
+static void assert_vector(git_vector *x, void *expected[], size_t len)
+{
+ size_t i;
+
+ cl_assert_equal_i(len, x->length);
+
+ for (i = 0; i < len; i++)
+ cl_assert(expected[i] == x->contents[i]);
+}
+
+void test_core_vector__grow_and_shrink(void)
+{
+ git_vector x = GIT_VECTOR_INIT;
+ void *expected1[] = {
+ (void *)0x02, (void *)0x03, (void *)0x04, (void *)0x05,
+ (void *)0x06, (void *)0x07, (void *)0x08, (void *)0x09,
+ (void *)0x0a
+ };
+ void *expected2[] = {
+ (void *)0x02, (void *)0x04, (void *)0x05, (void *)0x06,
+ (void *)0x07, (void *)0x08, (void *)0x09, (void *)0x0a
+ };
+ void *expected3[] = {
+ (void *)0x02, (void *)0x04, (void *)0x05, (void *)0x06,
+ (void *)0x0a
+ };
+ void *expected4[] = {
+ (void *)0x02, (void *)0x04, (void *)0x05
+ };
+ void *expected5[] = {
+ (void *)0x00, (void *)0x00, (void *)0x02, (void *)0x04,
+ (void *)0x05
+ };
+ void *expected6[] = {
+ (void *)0x00, (void *)0x00, (void *)0x02, (void *)0x04,
+ (void *)0x05, (void *)0x00
+ };
+ void *expected7[] = {
+ (void *)0x00, (void *)0x00, (void *)0x02, (void *)0x04,
+ (void *)0x00, (void *)0x00, (void *)0x00, (void *)0x05,
+ (void *)0x00
+ };
+ void *expected8[] = {
+ (void *)0x04, (void *)0x00, (void *)0x00, (void *)0x00,
+ (void *)0x05, (void *)0x00
+ };
+ void *expected9[] = {
+ (void *)0x04, (void *)0x00, (void *)0x05, (void *)0x00
+ };
+ void *expectedA[] = { (void *)0x04, (void *)0x00 };
+ void *expectedB[] = { (void *)0x04 };
+
+ git_vector_insert(&x, (void *)0x01);
+ git_vector_insert(&x, (void *)0x02);
+ git_vector_insert(&x, (void *)0x03);
+ git_vector_insert(&x, (void *)0x04);
+ git_vector_insert(&x, (void *)0x05);
+ git_vector_insert(&x, (void *)0x06);
+ git_vector_insert(&x, (void *)0x07);
+ git_vector_insert(&x, (void *)0x08);
+ git_vector_insert(&x, (void *)0x09);
+ git_vector_insert(&x, (void *)0x0a);
+
+ git_vector_remove_range(&x, 0, 1);
+ assert_vector(&x, expected1, ARRAY_SIZE(expected1));
+
+ git_vector_remove_range(&x, 1, 1);
+ assert_vector(&x, expected2, ARRAY_SIZE(expected2));
+
+ git_vector_remove_range(&x, 4, 3);
+ assert_vector(&x, expected3, ARRAY_SIZE(expected3));
+
+ git_vector_remove_range(&x, 3, 2);
+ assert_vector(&x, expected4, ARRAY_SIZE(expected4));
+
+ git_vector_insert_null(&x, 0, 2);
+ assert_vector(&x, expected5, ARRAY_SIZE(expected5));
+
+ git_vector_insert_null(&x, 5, 1);
+ assert_vector(&x, expected6, ARRAY_SIZE(expected6));
+
+ git_vector_insert_null(&x, 4, 3);
+ assert_vector(&x, expected7, ARRAY_SIZE(expected7));
+
+ git_vector_remove_range(&x, 0, 3);
+ assert_vector(&x, expected8, ARRAY_SIZE(expected8));
+
+ git_vector_remove_range(&x, 1, 2);
+ assert_vector(&x, expected9, ARRAY_SIZE(expected9));
+
+ git_vector_remove_range(&x, 2, 2);
+ assert_vector(&x, expectedA, ARRAY_SIZE(expectedA));
+
+ git_vector_remove_range(&x, 1, 1);
+ assert_vector(&x, expectedB, ARRAY_SIZE(expectedB));
+
+ git_vector_remove_range(&x, 0, 1);
+ assert_vector(&x, NULL, 0);
+
+ git_vector_free(&x);
+}
+
+void test_core_vector__reverse(void)
+{
+ git_vector v = GIT_VECTOR_INIT;
+ size_t i;
+
+ void *in1[] = {(void *) 0x0, (void *) 0x1, (void *) 0x2, (void *) 0x3};
+ void *out1[] = {(void *) 0x3, (void *) 0x2, (void *) 0x1, (void *) 0x0};
+
+ void *in2[] = {(void *) 0x0, (void *) 0x1, (void *) 0x2, (void *) 0x3, (void *) 0x4};
+ void *out2[] = {(void *) 0x4, (void *) 0x3, (void *) 0x2, (void *) 0x1, (void *) 0x0};
+
+ for (i = 0; i < 4; i++)
+ cl_git_pass(git_vector_insert(&v, in1[i]));
+
+ git_vector_reverse(&v);
+
+ for (i = 0; i < 4; i++)
+ cl_assert_equal_p(out1[i], git_vector_get(&v, i));
+
+ git_vector_clear(&v);
+ for (i = 0; i < 5; i++)
+ cl_git_pass(git_vector_insert(&v, in2[i]));
+
+ git_vector_reverse(&v);
+
+ for (i = 0; i < 5; i++)
+ cl_assert_equal_p(out2[i], git_vector_get(&v, i));
+
+ git_vector_free(&v);
+}
+
+void test_core_vector__dup_empty_vector(void)
+{
+ git_vector v = GIT_VECTOR_INIT;
+ git_vector dup = GIT_VECTOR_INIT;
+ int dummy;
+
+ cl_assert_equal_i(0, v.length);
+
+ cl_git_pass(git_vector_dup(&dup, &v, v._cmp));
+ cl_assert_equal_i(0, dup._alloc_size);
+ cl_assert_equal_i(0, dup.length);
+
+ cl_git_pass(git_vector_insert(&dup, &dummy));
+ cl_assert_equal_i(8, dup._alloc_size);
+ cl_assert_equal_i(1, dup.length);
+
+ git_vector_free(&dup);
+}