public void RemoveFirst_WhenThereAreItems_ShouldResetTheHeadNode()
        {
            // Arrange
            var linkedList = new SinglyLinkList<int>();
            linkedList.AddFirst(new SinglyLinkListNode<int>(10));
            linkedList.AddFirst(new SinglyLinkListNode<int>(20));
            linkedList.AddFirst(new SinglyLinkListNode<int>(30));

            // Act
            linkedList.RemoveFirst();

            // Assert
            Assert.AreEqual(20, linkedList.GetHeadAndTail().Item1.Value, "Should return the expected head value.");
            Assert.AreEqual(10, linkedList.GetHeadAndTail().Item2.Value, "Tail should have the expected value.");
            Assert.AreEqual(2, linkedList.Count, "Number of items shall match.");
        }
        public void RemoveFirst_WhenThereAreOnlySingleItem_RemovingThisShouldSetListToEmpty()
        {
            // Arrange
            var linkedList = new SinglyLinkList<int>();

            // Act
            linkedList.AddFirst(new SinglyLinkListNode<int>(10));

            // Assert
            Assert.AreEqual(1, linkedList.Count, "Should only contain 1 element.");
            Assert.AreSame(linkedList.GetHeadAndTail().Item1, linkedList.GetHeadAndTail().Item2, "Head and tail should be pointing to same element.");

            // Act
            linkedList.RemoveFirst();

            // Assert
            Assert.AreEqual(0, linkedList.Count, "List should be empty.");
            Assert.IsNull(linkedList.GetHeadAndTail().Item1, "Head should be empty.");
            Assert.IsNull(linkedList.GetHeadAndTail().Item2, "Tail should be empty.");
        }
        public void RemoveFirst_WhenNoItemsInList_ListShouldRemainTheSame()
        {
            // Arrange
            var linkedList = new SinglyLinkList<int>();

            // Assert
            Assert.AreEqual(0, linkedList.Count, "There shall be no items");
            Assert.IsNull(linkedList.GetHeadAndTail().Item1, "Head should be null");
            Assert.IsNull(linkedList.GetHeadAndTail().Item2, "Tail should be null");

            // Act
            linkedList.RemoveFirst();

            // Assert
            Assert.AreEqual(0, linkedList.Count, "There shall be no items.");
            Assert.IsNull(linkedList.GetHeadAndTail().Item1, "Head should be null");
            Assert.IsNull(linkedList.GetHeadAndTail().Item2, "Tail should be null");
        }