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