LCOV - code coverage report
Current view: top level - test - test-list.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 140 140 100.0 %
Date: 2019-08-23 13:36:53 Functions: 1 1 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 212 412 51.5 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: LGPL-2.1+ */
       2                 :            : /***
       3                 :            :   Copyright © 2013 Jan Janssen
       4                 :            : ***/
       5                 :            : 
       6                 :            : #include "list.h"
       7                 :            : #include "util.h"
       8                 :            : 
       9                 :          4 : int main(int argc, const char *argv[]) {
      10                 :            :         size_t i;
      11                 :            :         typedef struct list_item {
      12                 :            :                 LIST_FIELDS(struct list_item, item);
      13                 :            :         } list_item;
      14                 :            :         LIST_HEAD(list_item, head);
      15                 :            :         list_item items[4];
      16                 :            :         list_item *cursor;
      17                 :            : 
      18                 :          4 :         LIST_HEAD_INIT(head);
      19         [ -  + ]:          4 :         assert_se(head == NULL);
      20                 :            : 
      21         [ +  + ]:         20 :         for (i = 0; i < ELEMENTSOF(items); i++) {
      22         [ -  + ]:         16 :                 LIST_INIT(item, &items[i]);
      23   [ +  -  -  + ]:         16 :                 assert_se(LIST_JUST_US(item, &items[i]));
      24   [ -  +  +  + ]:         16 :                 LIST_PREPEND(item, head, &items[i]);
      25                 :            :         }
      26                 :            : 
      27                 :          4 :         i = 0;
      28   [ +  -  +  +  :         20 :         LIST_FOREACH_OTHERS(item, cursor, &items[2]) {
          -  +  +  +  +  
                      + ]
      29                 :         12 :                 i++;
      30         [ -  + ]:         12 :                 assert_se(cursor != &items[2]);
      31                 :            :         }
      32         [ -  + ]:          4 :         assert_se(i == ELEMENTSOF(items)-1);
      33                 :            : 
      34                 :          4 :         i = 0;
      35   [ +  -  +  +  :         28 :         LIST_FOREACH_OTHERS(item, cursor, &items[0]) {
          -  +  +  +  +  
                      + ]
      36                 :         12 :                 i++;
      37         [ -  + ]:         12 :                 assert_se(cursor != &items[0]);
      38                 :            :         }
      39         [ -  + ]:          4 :         assert_se(i == ELEMENTSOF(items)-1);
      40                 :            : 
      41                 :          4 :         i = 0;
      42   [ +  -  -  +  :         16 :         LIST_FOREACH_OTHERS(item, cursor, &items[3]) {
          +  -  -  +  +  
                      + ]
      43                 :         12 :                 i++;
      44         [ -  + ]:         12 :                 assert_se(cursor != &items[3]);
      45                 :            :         }
      46         [ -  + ]:          4 :         assert_se(i == ELEMENTSOF(items)-1);
      47                 :            : 
      48   [ +  -  -  + ]:          4 :         assert_se(!LIST_JUST_US(item, head));
      49                 :            : 
      50         [ -  + ]:          4 :         assert_se(items[0].item_next == NULL);
      51         [ -  + ]:          4 :         assert_se(items[1].item_next == &items[0]);
      52         [ -  + ]:          4 :         assert_se(items[2].item_next == &items[1]);
      53         [ -  + ]:          4 :         assert_se(items[3].item_next == &items[2]);
      54                 :            : 
      55         [ -  + ]:          4 :         assert_se(items[0].item_prev == &items[1]);
      56         [ -  + ]:          4 :         assert_se(items[1].item_prev == &items[2]);
      57         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[3]);
      58         [ -  + ]:          4 :         assert_se(items[3].item_prev == NULL);
      59                 :            : 
      60   [ -  +  +  + ]:         16 :         LIST_FIND_HEAD(item, &items[0], cursor);
      61         [ -  + ]:          4 :         assert_se(cursor == &items[3]);
      62                 :            : 
      63   [ -  +  +  + ]:         16 :         LIST_FIND_TAIL(item, &items[3], cursor);
      64         [ -  + ]:          4 :         assert_se(cursor == &items[0]);
      65                 :            : 
      66   [ -  +  +  -  :          4 :         LIST_REMOVE(item, head, &items[1]);
             +  -  #  # ]
      67   [ +  -  -  + ]:          4 :         assert_se(LIST_JUST_US(item, &items[1]));
      68                 :            : 
      69         [ -  + ]:          4 :         assert_se(items[0].item_next == NULL);
      70         [ -  + ]:          4 :         assert_se(items[2].item_next == &items[0]);
      71         [ -  + ]:          4 :         assert_se(items[3].item_next == &items[2]);
      72                 :            : 
      73         [ -  + ]:          4 :         assert_se(items[0].item_prev == &items[2]);
      74         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[3]);
      75         [ -  + ]:          4 :         assert_se(items[3].item_prev == NULL);
      76                 :            : 
      77   [ -  +  -  +  :          4 :         LIST_INSERT_AFTER(item, head, &items[3], &items[1]);
             #  #  +  - ]
      78         [ -  + ]:          4 :         assert_se(items[0].item_next == NULL);
      79         [ -  + ]:          4 :         assert_se(items[2].item_next == &items[0]);
      80         [ -  + ]:          4 :         assert_se(items[1].item_next == &items[2]);
      81         [ -  + ]:          4 :         assert_se(items[3].item_next == &items[1]);
      82                 :            : 
      83         [ -  + ]:          4 :         assert_se(items[0].item_prev == &items[2]);
      84         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[1]);
      85         [ -  + ]:          4 :         assert_se(items[1].item_prev == &items[3]);
      86         [ -  + ]:          4 :         assert_se(items[3].item_prev == NULL);
      87                 :            : 
      88   [ -  +  +  -  :          4 :         LIST_REMOVE(item, head, &items[1]);
             +  -  #  # ]
      89   [ +  -  -  + ]:          4 :         assert_se(LIST_JUST_US(item, &items[1]));
      90                 :            : 
      91         [ -  + ]:          4 :         assert_se(items[0].item_next == NULL);
      92         [ -  + ]:          4 :         assert_se(items[2].item_next == &items[0]);
      93         [ -  + ]:          4 :         assert_se(items[3].item_next == &items[2]);
      94                 :            : 
      95         [ -  + ]:          4 :         assert_se(items[0].item_prev == &items[2]);
      96         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[3]);
      97         [ -  + ]:          4 :         assert_se(items[3].item_prev == NULL);
      98                 :            : 
      99   [ -  +  -  +  :          4 :         LIST_INSERT_BEFORE(item, head, &items[2], &items[1]);
          #  #  #  #  +  
                      - ]
     100         [ -  + ]:          4 :         assert_se(items[0].item_next == NULL);
     101         [ -  + ]:          4 :         assert_se(items[2].item_next == &items[0]);
     102         [ -  + ]:          4 :         assert_se(items[1].item_next == &items[2]);
     103         [ -  + ]:          4 :         assert_se(items[3].item_next == &items[1]);
     104                 :            : 
     105         [ -  + ]:          4 :         assert_se(items[0].item_prev == &items[2]);
     106         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[1]);
     107         [ -  + ]:          4 :         assert_se(items[1].item_prev == &items[3]);
     108         [ -  + ]:          4 :         assert_se(items[3].item_prev == NULL);
     109                 :            : 
     110   [ -  +  -  +  :          4 :         LIST_REMOVE(item, head, &items[0]);
             +  -  #  # ]
     111   [ +  -  -  + ]:          4 :         assert_se(LIST_JUST_US(item, &items[0]));
     112                 :            : 
     113         [ -  + ]:          4 :         assert_se(items[2].item_next == NULL);
     114         [ -  + ]:          4 :         assert_se(items[1].item_next == &items[2]);
     115         [ -  + ]:          4 :         assert_se(items[3].item_next == &items[1]);
     116                 :            : 
     117         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[1]);
     118         [ -  + ]:          4 :         assert_se(items[1].item_prev == &items[3]);
     119         [ -  + ]:          4 :         assert_se(items[3].item_prev == NULL);
     120                 :            : 
     121   [ -  +  -  +  :          4 :         LIST_INSERT_BEFORE(item, head, &items[3], &items[0]);
          #  #  #  #  -  
                      + ]
     122         [ -  + ]:          4 :         assert_se(items[2].item_next == NULL);
     123         [ -  + ]:          4 :         assert_se(items[1].item_next == &items[2]);
     124         [ -  + ]:          4 :         assert_se(items[3].item_next == &items[1]);
     125         [ -  + ]:          4 :         assert_se(items[0].item_next == &items[3]);
     126                 :            : 
     127         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[1]);
     128         [ -  + ]:          4 :         assert_se(items[1].item_prev == &items[3]);
     129         [ -  + ]:          4 :         assert_se(items[3].item_prev == &items[0]);
     130         [ -  + ]:          4 :         assert_se(items[0].item_prev == NULL);
     131         [ -  + ]:          4 :         assert_se(head == &items[0]);
     132                 :            : 
     133   [ -  +  +  -  :          4 :         LIST_REMOVE(item, head, &items[0]);
             -  +  -  + ]
     134   [ +  -  -  + ]:          4 :         assert_se(LIST_JUST_US(item, &items[0]));
     135                 :            : 
     136         [ -  + ]:          4 :         assert_se(items[2].item_next == NULL);
     137         [ -  + ]:          4 :         assert_se(items[1].item_next == &items[2]);
     138         [ -  + ]:          4 :         assert_se(items[3].item_next == &items[1]);
     139                 :            : 
     140         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[1]);
     141         [ -  + ]:          4 :         assert_se(items[1].item_prev == &items[3]);
     142         [ -  + ]:          4 :         assert_se(items[3].item_prev == NULL);
     143                 :            : 
     144   [ -  +  +  -  :         12 :         LIST_INSERT_BEFORE(item, head, NULL, &items[0]);
          -  +  +  +  #  
                      # ]
     145         [ -  + ]:          4 :         assert_se(items[0].item_next == NULL);
     146         [ -  + ]:          4 :         assert_se(items[2].item_next == &items[0]);
     147         [ -  + ]:          4 :         assert_se(items[1].item_next == &items[2]);
     148         [ -  + ]:          4 :         assert_se(items[3].item_next == &items[1]);
     149                 :            : 
     150         [ -  + ]:          4 :         assert_se(items[0].item_prev == &items[2]);
     151         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[1]);
     152         [ -  + ]:          4 :         assert_se(items[1].item_prev == &items[3]);
     153         [ -  + ]:          4 :         assert_se(items[3].item_prev == NULL);
     154                 :            : 
     155   [ -  +  -  +  :          4 :         LIST_REMOVE(item, head, &items[0]);
             +  -  #  # ]
     156   [ +  -  -  + ]:          4 :         assert_se(LIST_JUST_US(item, &items[0]));
     157                 :            : 
     158         [ -  + ]:          4 :         assert_se(items[2].item_next == NULL);
     159         [ -  + ]:          4 :         assert_se(items[1].item_next == &items[2]);
     160         [ -  + ]:          4 :         assert_se(items[3].item_next == &items[1]);
     161                 :            : 
     162         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[1]);
     163         [ -  + ]:          4 :         assert_se(items[1].item_prev == &items[3]);
     164         [ -  + ]:          4 :         assert_se(items[3].item_prev == NULL);
     165                 :            : 
     166   [ -  +  +  -  :          4 :         LIST_REMOVE(item, head, &items[1]);
             +  -  #  # ]
     167   [ +  -  -  + ]:          4 :         assert_se(LIST_JUST_US(item, &items[1]));
     168                 :            : 
     169         [ -  + ]:          4 :         assert_se(items[2].item_next == NULL);
     170         [ -  + ]:          4 :         assert_se(items[3].item_next == &items[2]);
     171                 :            : 
     172         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[3]);
     173         [ -  + ]:          4 :         assert_se(items[3].item_prev == NULL);
     174                 :            : 
     175   [ -  +  -  +  :          4 :         LIST_REMOVE(item, head, &items[2]);
             +  -  #  # ]
     176   [ +  -  -  + ]:          4 :         assert_se(LIST_JUST_US(item, &items[2]));
     177   [ +  -  -  + ]:          4 :         assert_se(LIST_JUST_US(item, head));
     178                 :            : 
     179   [ -  +  -  +  :          4 :         LIST_REMOVE(item, head, &items[3]);
             -  +  -  + ]
     180   [ +  -  -  + ]:          4 :         assert_se(LIST_JUST_US(item, &items[3]));
     181                 :            : 
     182         [ -  + ]:          4 :         assert_se(head == NULL);
     183                 :            : 
     184         [ +  + ]:         20 :         for (i = 0; i < ELEMENTSOF(items); i++) {
     185   [ +  -  -  + ]:         16 :                 assert_se(LIST_JUST_US(item, &items[i]));
     186   [ +  +  +  +  :         28 :                 LIST_APPEND(item, head, &items[i]);
          -  +  +  +  -  
                +  -  + ]
     187                 :            :         }
     188                 :            : 
     189   [ +  -  -  + ]:          4 :         assert_se(!LIST_JUST_US(item, head));
     190                 :            : 
     191         [ -  + ]:          4 :         assert_se(items[0].item_next == &items[1]);
     192         [ -  + ]:          4 :         assert_se(items[1].item_next == &items[2]);
     193         [ -  + ]:          4 :         assert_se(items[2].item_next == &items[3]);
     194         [ -  + ]:          4 :         assert_se(items[3].item_next == NULL);
     195                 :            : 
     196         [ -  + ]:          4 :         assert_se(items[0].item_prev == NULL);
     197         [ -  + ]:          4 :         assert_se(items[1].item_prev == &items[0]);
     198         [ -  + ]:          4 :         assert_se(items[2].item_prev == &items[1]);
     199         [ -  + ]:          4 :         assert_se(items[3].item_prev == &items[2]);
     200                 :            : 
     201         [ +  + ]:         20 :         for (i = 0; i < ELEMENTSOF(items); i++)
     202   [ -  +  +  +  :         16 :                 LIST_REMOVE(item, head, &items[i]);
             -  +  -  + ]
     203                 :            : 
     204         [ -  + ]:          4 :         assert_se(head == NULL);
     205                 :            : 
     206                 :          4 :         return 0;
     207                 :            : }

Generated by: LCOV version 1.14