Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/tests/lib/kv.c
2065 views
1
/*-
2
* Copyright(c) 2025 Baptiste Daroussin <[email protected]>
3
*
4
* SPDX-License-Identifier: BSD-2-Clause
5
*/
6
7
#include <atf-c.h>
8
#include <private/pkg.h>
9
10
ATF_TC_WITHOUT_HEAD(kv_sort);
11
ATF_TC_WITHOUT_HEAD(kv_insert_sorted);
12
ATF_TC_WITHOUT_HEAD(kv_search);
13
14
ATF_TC_BODY(kv_insert_sorted, tc)
15
{
16
kvlist_t kvl = vec_init();
17
18
ATF_REQUIRE_EQ_MSG(kvl.d, NULL, "vec_init failed");
19
ATF_REQUIRE_EQ_MSG(kvl.cap, 0, "vec_init failed");
20
ATF_REQUIRE_EQ_MSG(kvl.len, 0, "vec_init failed");
21
22
struct pkg_kv *kv = pkg_kv_new("key", "value");
23
ATF_REQUIRE_EQ(pkg_kv_insert_sorted(&kvl, kv), NULL);
24
ATF_REQUIRE_EQ(kvl.len, 1);
25
ATF_REQUIRE(pkg_kv_insert_sorted(&kvl, kv) != NULL);
26
ATF_REQUIRE_EQ(kvl.len, 1);
27
28
kv = pkg_kv_new("akey", "value");
29
ATF_REQUIRE_EQ(pkg_kv_insert_sorted(&kvl, kv), NULL);
30
ATF_REQUIRE_EQ(kvl.len, 2);
31
ATF_REQUIRE_STREQ(kvl.d[0]->key, "akey");
32
ATF_REQUIRE_STREQ(kvl.d[1]->key, "key");
33
}
34
35
ATF_TC_BODY(kv_sort, tc)
36
{
37
kvlist_t kvl = vec_init();
38
39
ATF_REQUIRE_EQ_MSG(kvl.d, NULL, "vec_init failed");
40
ATF_REQUIRE_EQ_MSG(kvl.cap, 0, "vec_init failed");
41
ATF_REQUIRE_EQ_MSG(kvl.len, 0, "vec_init failed");
42
43
struct pkg_kv *kv = pkg_kv_new("key", "value");
44
vec_push(&kvl, kv);
45
ATF_REQUIRE_MSG(kvl.d != NULL, "vec_push failed");
46
ATF_REQUIRE_EQ_MSG(kvl.cap, 1, "vec_push failed");
47
ATF_REQUIRE_EQ_MSG(kvl.len, 1, "vec_push failed");
48
49
pkg_kv_sort(&kvl);
50
51
kv = pkg_kv_new("akey", "value");
52
vec_push(&kvl, kv);
53
ATF_REQUIRE_EQ_MSG(kvl.cap, 2, "vec_push failed");
54
ATF_REQUIRE_EQ_MSG(kvl.len, 2, "vec_push failed");
55
ATF_REQUIRE_STREQ_MSG(kvl.d[0]->key, "key", "Invalid first key");
56
ATF_REQUIRE_STREQ_MSG(kvl.d[1]->key, "akey", "Invalid first key");
57
58
pkg_kv_sort(&kvl);
59
ATF_REQUIRE_STREQ_MSG(kvl.d[0]->key, "akey", "Invalid first key");
60
ATF_REQUIRE_STREQ_MSG(kvl.d[1]->key, "key", "Invalid first key");
61
62
vec_free_and_free(&kvl, pkg_kv_free);
63
}
64
65
ATF_TC_BODY(kv_search, tc)
66
{
67
kvlist_t kvl = vec_init();
68
69
ATF_REQUIRE_EQ_MSG(kvl.d, NULL, "vec_init failed");
70
ATF_REQUIRE_EQ_MSG(kvl.cap, 0, "vec_init failed");
71
ATF_REQUIRE_EQ_MSG(kvl.len, 0, "vec_init failed");
72
73
struct pkg_kv *kv = pkg_kv_new("key", "value");
74
vec_push(&kvl, kv);
75
ATF_REQUIRE_MSG(kvl.d != NULL, "vec_push failed");
76
ATF_REQUIRE_EQ_MSG(kvl.cap, 1, "vec_push failed");
77
ATF_REQUIRE_EQ_MSG(kvl.len, 1, "vec_push failed");
78
79
kv = pkg_kv_search(&kvl, "bla");
80
ATF_REQUIRE(kv == NULL);
81
82
kv = pkg_kv_search(&kvl, "key");
83
ATF_REQUIRE(kv != NULL);
84
ATF_REQUIRE_STREQ_MSG(kv->key, "key", "Invalid search result");
85
ATF_REQUIRE_STREQ_MSG(kv->value, "value", "Invalid search result");
86
87
kv = pkg_kv_new("akey", "value");
88
vec_push(&kvl, kv);
89
ATF_REQUIRE_EQ_MSG(kvl.cap, 2, "vec_push failed");
90
ATF_REQUIRE_EQ_MSG(kvl.len, 2, "vec_push failed");
91
ATF_REQUIRE_STREQ_MSG(kvl.d[0]->key, "key", "Invalid first key");
92
ATF_REQUIRE_STREQ_MSG(kvl.d[1]->key, "akey", "Invalid first key");
93
94
pkg_kv_sort(&kvl);
95
ATF_REQUIRE_STREQ_MSG(kvl.d[0]->key, "akey", "Invalid first key");
96
ATF_REQUIRE_STREQ_MSG(kvl.d[1]->key, "key", "Invalid first key");
97
98
kv = pkg_kv_search(&kvl, "key");
99
ATF_REQUIRE(kv != NULL);
100
ATF_REQUIRE_STREQ_MSG(kv->key, "key", "Invalid search result");
101
ATF_REQUIRE_STREQ_MSG(kv->value, "value", "Invalid search result");
102
103
kv = pkg_kv_search(&kvl, "akey");
104
ATF_REQUIRE(kv != NULL);
105
ATF_REQUIRE_STREQ_MSG(kv->key, "akey", "Invalid search result");
106
ATF_REQUIRE_STREQ_MSG(kv->value, "value", "Invalid search result");
107
108
kv = pkg_kv_search(&kvl, "bla");
109
ATF_REQUIRE(kv == NULL);
110
111
vec_free_and_free(&kvl, pkg_kv_free);
112
}
113
114
ATF_TP_ADD_TCS(tp)
115
{
116
ATF_TP_ADD_TC(tp, kv_insert_sorted);
117
ATF_TP_ADD_TC(tp, kv_sort);
118
ATF_TP_ADD_TC(tp, kv_search);
119
120
return (atf_no_error());
121
}
122
123