LCOV - code coverage report
Current view: top level - test - objectlist.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 98.3 % 59 58
Test Date: 2026-04-03 02:26:39 Functions: 75.0 % 8 6

            Line data    Source code
       1              : #include "catch.hpp"
       2              : #include "ObjectList.h"
       3              : #include "ObjectNode.h"
       4              : 
       5              : namespace {
       6              : 
       7              : class TestListNode : public ObjectNode {
       8              :   public:
       9            0 :     void printTypeName() {}
      10              : };
      11              : 
      12              : }  // namespace
      13              : 
      14            7 : SCENARIO( "ObjectList linked list", "[ObjectList]" ) {
      15            8 :   GIVEN( "An empty list" ) {
      16            2 :     ObjectList list;
      17              : 
      18            3 :     THEN( "head is null and size is zero" ) {
      19            1 :       REQUIRE(list.head == NULL);
      20            1 :       REQUIRE(list.size == 0);
      21            1 :     }
      22              : 
      23            3 :     WHEN( "inserting NULL" ) {
      24            1 :       list.insertFront(NULL);
      25            2 :       THEN( "list unchanged" ) {
      26            1 :         REQUIRE(list.head == NULL);
      27            1 :         REQUIRE(list.size == 0);
      28            1 :       }
      29            1 :     }
      30            2 :   }
      31              : 
      32           10 :   GIVEN( "Three nodes inserted at front" ) {
      33            4 :     ObjectList list;
      34            4 :     TestListNode n1, n2, n3;
      35            4 :     list.insertFront(&n1);
      36            4 :     list.insertFront(&n2);
      37            4 :     list.insertFront(&n3);
      38              : 
      39            5 :     THEN( "size is three and order is n3, n2, n1" ) {
      40            1 :       REQUIRE(list.size == 3);
      41            1 :       REQUIRE(list.head == &n3);
      42            1 :       REQUIRE(n3.next == &n2);
      43            1 :       REQUIRE(n2.next == &n1);
      44            1 :       REQUIRE(n1.next == NULL);
      45            1 :       REQUIRE(n1.prev == &n2);
      46            1 :       REQUIRE(n2.prev == &n3);
      47            1 :       REQUIRE(n3.prev == NULL);
      48            1 :     }
      49              : 
      50            5 :     WHEN( "removing the middle node" ) {
      51            1 :       list.remove(&n2);
      52            2 :       THEN( "links repair and size drops" ) {
      53            1 :         REQUIRE(list.size == 2);
      54            1 :         REQUIRE(n3.next == &n1);
      55            1 :         REQUIRE(n1.prev == &n3);
      56            1 :         REQUIRE(n2.next == NULL);
      57            1 :         REQUIRE(n2.prev == NULL);
      58            1 :       }
      59            1 :     }
      60              : 
      61            5 :     WHEN( "removing the head" ) {
      62            1 :       list.remove(&n3);
      63            2 :       THEN( "new head is n2" ) {
      64            1 :         REQUIRE(list.size == 2);
      65            1 :         REQUIRE(list.head == &n2);
      66            1 :         REQUIRE(n2.prev == NULL);
      67            1 :       }
      68            1 :     }
      69              : 
      70            5 :     WHEN( "removing NULL" ) {
      71            1 :       int sizeBefore = list.size;
      72            1 :       list.remove(NULL);
      73            2 :       THEN( "list unchanged" ) {
      74            1 :         REQUIRE(list.size == sizeBefore);
      75            1 :       }
      76            1 :     }
      77            4 :   }
      78            6 : }
        

Generated by: LCOV version 2.4-0