summaryrefslogtreecommitdiff
path: root/tests/libgit2/core/oidarray.c
blob: 4a9e47c701d9a8f214659765fb7fdf03077c4999 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include "clar_libgit2.h"

#include "git2/oid.h"
#include "git2/transport.h"

#include "common.h"
#include "transports/smart.h"
#include "oid.h"
#include "oidarray.h"

#include <assert.h>

#define oid_0 "c070ad8c08840c8116da865b2d65593a6bb9cd2a"
#define oid_1 "0966a434eb1a025db6b71485ab63a3bfbea520b6"
#define oid_2 "83834a7afdaa1a1260568567f6ad90020389f664"
#define oid_3 "746fb4c91a7b6190bc4761adf7410afc4b59812c"

void test_core_oidarray__add_and_remove_oid_from_shallowarray(void)
{
	git_oid oid_0_obj, oid_1_obj, oid_2_obj, oid_3_obj;
	git_array_oid_t array = GIT_ARRAY_INIT;

	git_oid__fromstr(&oid_0_obj, oid_0, GIT_OID_SHA1);
	git_oid__fromstr(&oid_1_obj, oid_1, GIT_OID_SHA1);
	git_oid__fromstr(&oid_2_obj, oid_2, GIT_OID_SHA1);
	git_oid__fromstr(&oid_3_obj, oid_3, GIT_OID_SHA1);

	/* add some initial ids */
	git_oidarray__add(&array, &oid_0_obj);
	git_oidarray__add(&array, &oid_1_obj);
	git_oidarray__add(&array, &oid_2_obj);

	cl_assert_equal_i(3, array.size);
	cl_assert_equal_s("c070ad8c08840c8116da865b2d65593a6bb9cd2a", git_oid_tostr_s(&array.ptr[0]));
	cl_assert_equal_s("0966a434eb1a025db6b71485ab63a3bfbea520b6", git_oid_tostr_s(&array.ptr[1]));
	cl_assert_equal_s("83834a7afdaa1a1260568567f6ad90020389f664", git_oid_tostr_s(&array.ptr[2]));

	/* don't duplicate existing ids */
	git_oidarray__add(&array, &oid_1_obj);

	cl_assert_equal_i(3, array.size);
	cl_assert_equal_s("c070ad8c08840c8116da865b2d65593a6bb9cd2a", git_oid_tostr_s(&array.ptr[0]));
	cl_assert_equal_s("0966a434eb1a025db6b71485ab63a3bfbea520b6", git_oid_tostr_s(&array.ptr[1]));
	cl_assert_equal_s("83834a7afdaa1a1260568567f6ad90020389f664", git_oid_tostr_s(&array.ptr[2]));

	/* remove the last id */
	cl_assert_equal_i(1, git_oidarray__remove(&array, &oid_2_obj));

	cl_assert_equal_i(2, array.size);
	cl_assert_equal_s("c070ad8c08840c8116da865b2d65593a6bb9cd2a", git_oid_tostr_s(&array.ptr[0]));
	cl_assert_equal_s("0966a434eb1a025db6b71485ab63a3bfbea520b6", git_oid_tostr_s(&array.ptr[1]));

	/* add another id */
	git_oidarray__add(&array, &oid_3_obj);

	cl_assert_equal_i(3, array.size);
	cl_assert_equal_s("c070ad8c08840c8116da865b2d65593a6bb9cd2a", git_oid_tostr_s(&array.ptr[0]));
	cl_assert_equal_s("0966a434eb1a025db6b71485ab63a3bfbea520b6", git_oid_tostr_s(&array.ptr[1]));
	cl_assert_equal_s("746fb4c91a7b6190bc4761adf7410afc4b59812c", git_oid_tostr_s(&array.ptr[2]));

	/* remove the first id */
	cl_assert_equal_i(1, git_oidarray__remove(&array, &oid_0_obj));

	cl_assert_equal_i(2, array.size);
	cl_assert_equal_s("0966a434eb1a025db6b71485ab63a3bfbea520b6", git_oid_tostr_s(&array.ptr[0]));
	cl_assert_equal_s("746fb4c91a7b6190bc4761adf7410afc4b59812c", git_oid_tostr_s(&array.ptr[1]));

	/* removing a nonexistent oid does nothing */
	cl_assert_equal_i(0, git_oidarray__remove(&array, &oid_2_obj));

	/* add another id */
	git_oidarray__add(&array, &oid_0_obj);

	cl_assert_equal_i(3, array.size);
	cl_assert_equal_s("0966a434eb1a025db6b71485ab63a3bfbea520b6", git_oid_tostr_s(&array.ptr[0]));
	cl_assert_equal_s("746fb4c91a7b6190bc4761adf7410afc4b59812c", git_oid_tostr_s(&array.ptr[1]));
	cl_assert_equal_s("c070ad8c08840c8116da865b2d65593a6bb9cd2a", git_oid_tostr_s(&array.ptr[2]));

	/* remove another id */
	cl_assert_equal_i(1, git_oidarray__remove(&array, &oid_3_obj));

	cl_assert_equal_i(2, array.size);
	cl_assert_equal_s("0966a434eb1a025db6b71485ab63a3bfbea520b6", git_oid_tostr_s(&array.ptr[0]));
	cl_assert_equal_s("c070ad8c08840c8116da865b2d65593a6bb9cd2a", git_oid_tostr_s(&array.ptr[1]));

	/* remove another id */
	cl_assert_equal_i(1, git_oidarray__remove(&array, &oid_1_obj));

	cl_assert_equal_i(1, array.size);
	cl_assert_equal_s("c070ad8c08840c8116da865b2d65593a6bb9cd2a", git_oid_tostr_s(&array.ptr[0]));

	/* remove the final id */
	cl_assert_equal_i(1, git_oidarray__remove(&array, &oid_0_obj));

	cl_assert_equal_i(0, array.size);

	git_array_clear(array);
}