Example #1
0
        public void CannotAttachAfterNodeOfDifferentParent()
        {
            object             otherParent = new object();
            DualLinkNode <int> otherNode   = new DualLinkNode <int>(otherParent, TestInt);

            TestObject.AttachAfter(otherNode);
        }
        public void PlaceAfterWithUnknownTargetThrows()
        {
            IDualLinkNode <int> testNode    = TestObject.AddFirst(TestInt);
            DualLinkNode <int>  unknownNode = new DualLinkNode <int>(TestObject, TestInt);

            TestObject.PlaceAfter(testNode, unknownNode);
        }
        public void PlaceBeforeWithUnknownSourceThrows()
        {
            IDualLinkNode <int> testNode    = TestObject.AddFirst(TestInt);
            DualLinkNode <int>  unknownNode = new DualLinkNode <int>(TestObject, TestInt);

            TestObject.PlaceBefore(unknownNode, testNode);
        }
Example #4
0
        public void Init()
        {
            TestNodeA = new DualLinkNode <int>(TestParent, TestInt);
            TestNodeB = new DualLinkNode <int>(TestParent, TestInt);
            TestNodeC = new DualLinkNode <int>(TestParent, TestInt);

            TestObject = new DualLinkNode <int>(TestParent, TestInt);
        }
Example #5
0
        public void DetachAfterReturnsDetached()
        {
            TestNodeB.AttachAfter(TestNodeA);
            TestObject.AttachAfter(TestNodeA);

            DualLinkNode <int> actual = TestObject.DetachAfter();

            Assert.AreSame(TestNodeB, actual);
        }
Example #6
0
        public void DetachBeforeReturnsDetached()
        {
            TestNodeA.AttachBefore(TestNodeB);
            TestObject.AttachBefore(TestNodeB);

            DualLinkNode <int> actual = TestObject.DetachBefore();

            Assert.AreSame(TestNodeA, actual);
        }
Example #7
0
        private void Add(T value, IDualLinkNode <T> previous)
        {
            //Let's create the node first
            var node = new DualLinkNode <T>(value);

            //Now, we check if the list is empty, and if it is, then we add the node in the first place
            if (FirstNode == null)
            {
                FirstNode = node;
                //All done
                return;
            }

            //Let's check if this element goes to the head node (special case)
            if (previous == null)
            {
                FirstNode.Previous = node;
                node.Next          = FirstNode;
                FirstNode          = node;
                return;
            }

            //Now here's the tricky part. Let's say that we are adding n between a and b
            //We need to set n's previous as "a" and n's next as "b"

            var a = previous;
            var b = previous.Next;
            var n = node;

            n.Previous = a;
            n.Next     = b;

            //Then, a's next has to be n

            a.Next = n;

            //And last but not least b's previous has to be n as long as b is not null

            if (b != null)
            {
                b.Previous = n;
            }

            //Presto finito!
        }
        public void RemoveUnknownNodeThrows()
        {
            DualLinkNode <int> unknownNode = new DualLinkNode <int>(TestObject, TestInt);

            TestObject.Remove(unknownNode);
        }
        public void PlaceLastWithUnknownNodeThrows()
        {
            DualLinkNode <int> unknownNode = new DualLinkNode <int>(TestObject, TestInt);

            TestObject.PlaceLast(unknownNode);
        }
        public void AddAfterUnknownNodeThrows()
        {
            DualLinkNode <int> unknownNode = new DualLinkNode <int>(TestObject, TestInt);

            TestObject.AddAfter(unknownNode, TestInt);
        }