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

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

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

            // Assert 20 -> 10 -> null
            Assert.AreEqual(2, linkedList.Count, "Should contain two items.");
            Assert.AreEqual(20, linkedList.GetHeadAndTail().Item1.Value, "Head should contain the the expected value.");
            Assert.AreEqual(10, linkedList.GetHeadAndTail().Item2.Value, "Tail should contain the expected value.");
            Assert.AreEqual(linkedList.GetHeadAndTail().Item1.Next, linkedList.GetHeadAndTail().Item2, "Head.Next should be pointing to the tail.");
            Assert.IsNull(linkedList.GetHeadAndTail().Item2.Next, "Tail should not point to null.");
            Assert.AreEqual(20, linkedList.ElementAt(0), "Enumeration should return the expected value.");
            Assert.AreEqual(10, linkedList.ElementAt(1), "Enumberation should return the expected value.");
        }
        public void AddLast_WhenThereAreMoreElements_ShouldAddToTheLastPosition()
        {
            // Arrange
            var linkedList = new SinglyLinkList<decimal>();

            linkedList.AddFirst(new SinglyLinkListNode<decimal>(2.0m));
            linkedList.AddFirst(new SinglyLinkListNode<decimal>(3.4m));

            // Act
            linkedList.AddLast(new SinglyLinkListNode<decimal>(5.5m));

            // Assert
            Assert.AreEqual(5.5m, linkedList.GetHeadAndTail().Item2.Value, "Should contain expected value.");
            Assert.AreEqual(3.4m, linkedList.ElementAt(0), "Should be the expected value.");
            Assert.AreEqual(2.0m, linkedList.ElementAt(1), "Should be the expected value.");
            Assert.AreEqual(5.5m, linkedList.ElementAt(2), "Should be the expected value.");
        }