LCOV - code coverage report
Current view: top level - test - test-set.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 63 63 100.0 %
Date: 2019-08-23 13:36:53 Functions: 7 7 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 42 76 55.3 %

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

Generated by: LCOV version 1.14