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 : }
|