]> git.proxmox.com Git - libgit2.git/blob - tests/core/strmap.c
New upstream version 0.28.1+dfsg.1
[libgit2.git] / tests / core / strmap.c
1 #include "clar_libgit2.h"
2 #include "strmap.h"
3
4 git_strmap *g_table;
5
6 void test_core_strmap__initialize(void)
7 {
8 cl_git_pass(git_strmap_alloc(&g_table));
9 cl_assert(g_table != NULL);
10 }
11
12 void test_core_strmap__cleanup(void)
13 {
14 git_strmap_free(g_table);
15 }
16
17 void test_core_strmap__0(void)
18 {
19 cl_assert(git_strmap_num_entries(g_table) == 0);
20 }
21
22 static void insert_strings(git_strmap *table, int count)
23 {
24 int i, j, over, err;
25 char *str;
26
27 for (i = 0; i < count; ++i) {
28 str = malloc(10);
29 for (j = 0; j < 10; ++j)
30 str[j] = 'a' + (i % 26);
31 str[9] = '\0';
32
33 /* if > 26, then encode larger value in first letters */
34 for (j = 0, over = i / 26; over > 0; j++, over = over / 26)
35 str[j] = 'A' + (over % 26);
36
37 git_strmap_insert(table, str, str, &err);
38 cl_assert(err >= 0);
39 }
40
41 cl_assert((int)git_strmap_num_entries(table) == count);
42 }
43
44 void test_core_strmap__1(void)
45 {
46 int i;
47 char *str;
48
49 insert_strings(g_table, 20);
50
51 cl_assert(git_strmap_exists(g_table, "aaaaaaaaa"));
52 cl_assert(git_strmap_exists(g_table, "ggggggggg"));
53 cl_assert(!git_strmap_exists(g_table, "aaaaaaaab"));
54 cl_assert(!git_strmap_exists(g_table, "abcdefghi"));
55
56 i = 0;
57 git_strmap_foreach_value(g_table, str, { i++; free(str); });
58 cl_assert(i == 20);
59 }
60
61 void test_core_strmap__2(void)
62 {
63 size_t pos;
64 int i;
65 char *str;
66
67 insert_strings(g_table, 20);
68
69 cl_assert(git_strmap_exists(g_table, "aaaaaaaaa"));
70 cl_assert(git_strmap_exists(g_table, "ggggggggg"));
71 cl_assert(!git_strmap_exists(g_table, "aaaaaaaab"));
72 cl_assert(!git_strmap_exists(g_table, "abcdefghi"));
73
74 cl_assert(git_strmap_exists(g_table, "bbbbbbbbb"));
75 pos = git_strmap_lookup_index(g_table, "bbbbbbbbb");
76 cl_assert(git_strmap_valid_index(g_table, pos));
77 cl_assert_equal_s(git_strmap_value_at(g_table, pos), "bbbbbbbbb");
78 free(git_strmap_value_at(g_table, pos));
79 git_strmap_delete_at(g_table, pos);
80
81 cl_assert(!git_strmap_exists(g_table, "bbbbbbbbb"));
82
83 i = 0;
84 git_strmap_foreach_value(g_table, str, { i++; free(str); });
85 cl_assert(i == 19);
86 }
87
88 void test_core_strmap__3(void)
89 {
90 int i;
91 char *str;
92
93 insert_strings(g_table, 10000);
94
95 i = 0;
96 git_strmap_foreach_value(g_table, str, { i++; free(str); });
97 cl_assert(i == 10000);
98 }