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

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

Generated by: LCOV version 1.14