LCOV - code coverage report
Current view: top level - test - test-set.c (source / functions) Hit Total Coverage
Test: main_coverage.info Lines: 63 63 100.0 %
Date: 2019-08-22 15:41:25 Functions: 7 7 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: LGPL-2.1+ */
       2             : 
       3             : #include "set.h"
       4             : #include "strv.h"
       5             : 
       6           1 : static void test_set_steal_first(void) {
       7           1 :         _cleanup_set_free_ Set *m = NULL;
       8           1 :         int seen[3] = {};
       9             :         char *val;
      10             : 
      11           1 :         m = set_new(&string_hash_ops);
      12           1 :         assert_se(m);
      13             : 
      14           1 :         assert_se(set_put(m, (void*) "1") == 1);
      15           1 :         assert_se(set_put(m, (void*) "22") == 1);
      16           1 :         assert_se(set_put(m, (void*) "333") == 1);
      17             : 
      18           4 :         while ((val = set_steal_first(m)))
      19           3 :                 seen[strlen(val) - 1]++;
      20             : 
      21           1 :         assert_se(seen[0] == 1 && seen[1] == 1 && seen[2] == 1);
      22             : 
      23           1 :         assert_se(set_isempty(m));
      24           1 : }
      25             : 
      26             : typedef struct Item {
      27             :         int seen;
      28             : } Item;
      29           6 : static void item_seen(Item *item) {
      30           6 :         item->seen++;
      31           6 : }
      32             : 
      33           1 : static void test_set_free_with_destructor(void) {
      34             :         Set *m;
      35           1 :         struct Item items[4] = {};
      36             :         unsigned i;
      37             : 
      38           1 :         assert_se(m = set_new(NULL));
      39           4 :         for (i = 0; i < ELEMENTSOF(items) - 1; i++)
      40           3 :                 assert_se(set_put(m, items + i) == 1);
      41             : 
      42           4 :         m = set_free_with_destructor(m, item_seen);
      43           1 :         assert_se(items[0].seen == 1);
      44           1 :         assert_se(items[1].seen == 1);
      45           1 :         assert_se(items[2].seen == 1);
      46           1 :         assert_se(items[3].seen == 0);
      47           1 : }
      48             : 
      49           3 : DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(item_hash_ops, void, trivial_hash_func, trivial_compare_func, Item, item_seen);
      50             : 
      51           1 : static void test_set_free_with_hash_ops(void) {
      52             :         Set *m;
      53           1 :         struct Item items[4] = {};
      54             :         unsigned i;
      55             : 
      56           1 :         assert_se(m = set_new(&item_hash_ops));
      57           4 :         for (i = 0; i < ELEMENTSOF(items) - 1; i++)
      58           3 :                 assert_se(set_put(m, items + i) == 1);
      59             : 
      60           1 :         m = set_free(m);
      61           1 :         assert_se(items[0].seen == 1);
      62           1 :         assert_se(items[1].seen == 1);
      63           1 :         assert_se(items[2].seen == 1);
      64           1 :         assert_se(items[3].seen == 0);
      65           1 : }
      66             : 
      67           1 : static void test_set_put(void) {
      68           1 :         _cleanup_set_free_ Set *m = NULL;
      69             : 
      70           1 :         m = set_new(&string_hash_ops);
      71           1 :         assert_se(m);
      72             : 
      73           1 :         assert_se(set_put(m, (void*) "1") == 1);
      74           1 :         assert_se(set_put(m, (void*) "22") == 1);
      75           1 :         assert_se(set_put(m, (void*) "333") == 1);
      76           1 :         assert_se(set_put(m, (void*) "333") == 0);
      77           1 :         assert_se(set_remove(m, (void*) "333"));
      78           1 :         assert_se(set_put(m, (void*) "333") == 1);
      79           1 :         assert_se(set_put(m, (void*) "333") == 0);
      80           1 :         assert_se(set_put(m, (void*) "22") == 0);
      81             : 
      82           2 :         _cleanup_free_ char **t = set_get_strv(m);
      83           1 :         assert_se(strv_contains(t, "1"));
      84           1 :         assert_se(strv_contains(t, "22"));
      85           1 :         assert_se(strv_contains(t, "333"));
      86           1 :         assert_se(strv_length(t) == 3);
      87           1 : }
      88             : 
      89           1 : int main(int argc, const char *argv[]) {
      90           1 :         test_set_steal_first();
      91           1 :         test_set_free_with_destructor();
      92           1 :         test_set_free_with_hash_ops();
      93           1 :         test_set_put();
      94             : 
      95           1 :         return 0;
      96             : }

Generated by: LCOV version 1.14