예제 #1
0
        public void Replace(DoublyLinkedNode <T> node, T value)
        {
            if (node is null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            PracticeExtensions.ThrowIfNull(value, nameof(value));

            var nodeIsFirst = ReferenceEquals(First, node);
            var nodeIsLast  = ReferenceEquals(Last, node);

            if (nodeIsFirst)
            {
                var newNode = First.Replace(value);
                First = newNode;
            }

            if (nodeIsLast)
            {
                var newNode = Last.Replace(value);
                Last = newNode;
            }

            if (!nodeIsFirst && !nodeIsLast)
            {
                node.Replace(value);
            }
        }
        public void WhenNodeIsReplaced_ThenItsPreviousAndNextReferToTheReplacement()
        {
            var firstNode = new DoublyLinkedNode <int>(2);

            var previous = firstNode.LinkBefore(1);
            var next     = firstNode.LinkAfter(3);

            var replacement = firstNode.Replace(5);

            previous.Next.Value.Should().Be(5);
            next.Previous.Value.Should().Be(5);

            replacement.Previous.Should().Be(previous);
            replacement.Next.Should().Be(next);
        }