kv.c
1 /*- 2 * Copyright(c) 2025 Baptiste Daroussin <bapt@FreeBSD.org> 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 }