]>
git.proxmox.com Git - libgit2.git/blob - tests/t0502-table.c
f68f0b1b936c397976127b08400c6e30c07cdfc8
2 #include "test_helpers.h"
8 BEGIN_TEST(table_create
)
10 git_revpool_table
*table
= NULL
;
12 table
= git_revpool_table_create(55);
13 must_be_true(table
!= NULL
);
14 must_be_true(table
->size_mask
+ 1 == 64);
16 git_revpool_table_free(table
);
20 BEGIN_TEST(table_populate
)
22 const int objects_n
= 32;
24 git_revpool_object
*objects
;
25 git_revpool_table
*table
= NULL
;
27 table
= git_revpool_table_create(objects_n
* 2);
28 must_be_true(table
!= NULL
);
30 objects
= git__malloc(objects_n
* sizeof(git_revpool_object
));
31 memset(objects
, 0x0, objects_n
* sizeof(git_revpool_object
));
33 /* populate the hash table */
34 for (i
= 0; i
< objects_n
; ++i
) {
35 git_hash_buf(&(objects
[i
].id
), &i
, sizeof(int));
36 must_pass(git_revpool_table_insert(table
, &(objects
[i
])));
39 /* make sure all the inserted objects can be found */
40 for (i
= 0; i
< objects_n
; ++i
) {
42 git_revpool_object
*ob
;
44 git_hash_buf(&id
, &i
, sizeof(int));
45 ob
= git_revpool_table_lookup(table
, &id
);
47 must_be_true(ob
!= NULL
);
48 must_be_true(ob
== &(objects
[i
]));
51 /* make sure we cannot find inexisting objects */
52 for (i
= 0; i
< 50; ++i
) {
56 hash_id
= (rand() % 50000) + objects_n
;
57 git_hash_buf(&id
, &hash_id
, sizeof(int));
58 must_be_true(git_revpool_table_lookup(table
, &id
) == NULL
);
61 git_revpool_table_free(table
);
67 BEGIN_TEST(table_resize
)
69 const int objects_n
= 64;
71 unsigned int old_size
;
72 git_revpool_object
*objects
;
73 git_revpool_table
*table
= NULL
;
75 table
= git_revpool_table_create(objects_n
);
76 must_be_true(table
!= NULL
);
78 objects
= git__malloc(objects_n
* sizeof(git_revpool_object
));
79 memset(objects
, 0x0, objects_n
* sizeof(git_revpool_object
));
81 old_size
= table
->size_mask
+ 1;
83 /* populate the hash table -- should be automatically resized */
84 for (i
= 0; i
< objects_n
; ++i
) {
85 git_hash_buf(&(objects
[i
].id
), &i
, sizeof(int));
86 must_pass(git_revpool_table_insert(table
, &(objects
[i
])));
89 must_be_true(table
->size_mask
> old_size
);
91 /* make sure all the inserted objects can be found */
92 for (i
= 0; i
< objects_n
; ++i
) {
94 git_revpool_object
*ob
;
96 git_hash_buf(&id
, &i
, sizeof(int));
97 ob
= git_revpool_table_lookup(table
, &id
);
99 must_be_true(ob
!= NULL
);
100 must_be_true(ob
== &(objects
[i
]));
103 /* force another resize */
104 old_size
= table
->size_mask
+ 1;
105 git_revpool_table_resize(table
);
106 must_be_true(table
->size_mask
> old_size
);
108 /* make sure all the inserted objects can be found */
109 for (i
= 0; i
< objects_n
; ++i
) {
111 git_revpool_object
*ob
;
113 git_hash_buf(&id
, &i
, sizeof(int));
114 ob
= git_revpool_table_lookup(table
, &id
);
116 must_be_true(ob
!= NULL
);
117 must_be_true(ob
== &(objects
[i
]));
120 git_revpool_table_free(table
);