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); }