public void Remove_WhenThereAreNoItemsInTheList_ShouldNotChange()
        {
            // Arrange
            var linkedList = new SinglyLinkList<int>();

            // Act
            var status = linkedList.Remove(10);

            // Assert
            Assert.AreEqual(0, linkedList.Count, "Should not have any items");
            Assert.IsNull(linkedList.GetHeadAndTail().Item1, "Should be null.");
            Assert.IsNull(linkedList.GetHeadAndTail().Item2, "Should be null.");
            Assert.IsFalse(status, "Nothing to remove, therefore should return false.");
        }
        public void Remove_WhenIsOnlySingleItem_RemovingItShouldResetHeadAndTail()
        {
            // Arrange
            var linkedList = new SinglyLinkList<string>();
            linkedList.AddLast(new SinglyLinkListNode<string>("Hello"));

            // Act
            linkedList.Remove("Hello");

            // Assert
            Assert.IsNull(linkedList.GetHeadAndTail().Item1, "Should be null.");
            Assert.IsNull(linkedList.GetHeadAndTail().Item2, "Should be null.");
            Assert.AreEqual(0, linkedList.Count, "Should not have any value.");
        }
        public void Remove_WhenThereAreMultipleItems_ItemInTheMiddleCanBeRemoved()
        {
            // Arrange
            var linkedList = new SinglyLinkList<int>();
            linkedList.AddFirst(new SinglyLinkListNode<int>(20));
            linkedList.AddFirst(new SinglyLinkListNode<int>(30));
            linkedList.AddFirst(new SinglyLinkListNode<int>(40));

            // Act
            linkedList.Remove(30);

            // Assert
            Assert.AreEqual(2, linkedList.Count, "There should only be 2 items.");
            Assert.AreEqual(40, linkedList.GetHeadAndTail().Item1.Value, "Should match the expected value.");
            Assert.AreEqual(20, linkedList.GetHeadAndTail().Item2.Value, "Should match the expected value.");
            Assert.AreEqual(linkedList.GetHeadAndTail().Item1.Next, linkedList.GetHeadAndTail().Item2, "Should be pointing to appropriate item.");
            Assert.IsNull(linkedList.GetHeadAndTail().Item2.Next, "Should be null.");
        }
        public void Remove_OnlyItemInList_DoesNotMatchShouldReturnFalse()
        {
            // Arrange
            var linkedList = new SinglyLinkList<decimal>();
            linkedList.AddFirst(new SinglyLinkListNode<decimal>(20m));

            // Act
            var status =  linkedList.Remove(30);

            // Assert
            Assert.IsFalse(status, "Should not match.");
            Assert.AreEqual(1, linkedList.Count, "Should only be single item.");
        }