chiark / gitweb /
set: add new helper set_make() which is like set_new() + multiple set_put() in vararg
authorLennart Poettering <lennart@poettering.net>
Mon, 25 Sep 2017 15:15:59 +0000 (17:15 +0200)
committerSven Eden <yamakuzure@gmx.net>
Wed, 22 Nov 2017 07:24:52 +0000 (08:24 +0100)
src/basic/meson.build
src/basic/set.h
src/test/test-set.c

index 51e5b1b161f0dc72ffcf3f375d17c68391848a55..19e679facb90ce0fe782e71a5c13e8e0aa474073 100644 (file)
 #         securebits.h
 #         selinux-util.c
 #         selinux-util.h
+#         set.c
 #         set.h
 #         sigbus.c
 #         sigbus.h
index 70c462a1a2cc1bc8bfdec4ed7ad2b8930d338d68..e21e4220becdaacb92d1870a9e3ba83857dab8ba 100644 (file)
@@ -139,3 +139,5 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(Set*, set_free_free);
 
 #define _cleanup_set_free_ _cleanup_(set_freep)
 #define _cleanup_set_free_free_ _cleanup_(set_free_freep)
+
+int set_make(Set **ret, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS, void *add, ...);
index 0ee5ddcc9f63e7ce3041e0e02acde069b7c595d1..3fab350cf6d005f3a5bb00a15c3c84d42ab0269f 100644 (file)
@@ -55,9 +55,54 @@ static void test_set_put(void) {
         assert_se(set_put(m, (void*) "22") == 0);
 }
 
+static void test_set_make(void) {
+        _cleanup_set_free_ Set *s = NULL;
+
+        assert_se(set_make(&s, NULL, UINT_TO_PTR(4), UINT_TO_PTR(6), UINT_TO_PTR(8), NULL) == 0);
+        assert_se(set_size(s) == 3);
+        assert_se(!set_contains(s, UINT_TO_PTR(0)));
+        assert_se(!set_contains(s, UINT_TO_PTR(1)));
+        assert_se(!set_contains(s, UINT_TO_PTR(2)));
+        assert_se(!set_contains(s, UINT_TO_PTR(3)));
+        assert_se(set_contains(s, UINT_TO_PTR(4)));
+        assert_se(!set_contains(s, UINT_TO_PTR(5)));
+        assert_se(set_contains(s, UINT_TO_PTR(6)));
+        assert_se(!set_contains(s, UINT_TO_PTR(7)));
+        assert_se(set_contains(s, UINT_TO_PTR(8)));
+        assert_se(!set_contains(s, UINT_TO_PTR(9)));
+        s = set_free(s);
+
+        assert_se(set_make(&s, NULL, NULL) == 0);
+        assert_se(set_size(s) == 0);
+        assert_se(!set_contains(s, UINT_TO_PTR(0)));
+        assert_se(!set_contains(s, UINT_TO_PTR(4)));
+        assert_se(!set_contains(s, UINT_TO_PTR(6)));
+        assert_se(!set_contains(s, UINT_TO_PTR(8)));
+        s = set_free(s);
+
+        assert_se(set_make(&s, NULL, UINT_TO_PTR(3), NULL) == 0);
+        assert_se(set_size(s) == 1);
+        assert_se(!set_contains(s, UINT_TO_PTR(0)));
+        assert_se(!set_contains(s, UINT_TO_PTR(1)));
+        assert_se(!set_contains(s, UINT_TO_PTR(2)));
+        assert_se(set_contains(s, UINT_TO_PTR(3)));
+        assert_se(!set_contains(s, UINT_TO_PTR(4)));
+
+        assert_se(set_make(&s, NULL, UINT_TO_PTR(2), UINT_TO_PTR(5), NULL) == 0);
+        assert_se(set_size(s) == 2);
+        assert_se(!set_contains(s, UINT_TO_PTR(0)));
+        assert_se(!set_contains(s, UINT_TO_PTR(1)));
+        assert_se(set_contains(s, UINT_TO_PTR(2)));
+        assert_se(!set_contains(s, UINT_TO_PTR(3)));
+        assert_se(!set_contains(s, UINT_TO_PTR(4)));
+        assert_se(set_contains(s, UINT_TO_PTR(5)));
+        assert_se(!set_contains(s, UINT_TO_PTR(6)));
+}
+
 int main(int argc, const char *argv[]) {
         test_set_steal_first();
         test_set_put();
+        test_set_make();
 
         return 0;
 }