public void TestTraversalCallback()
        {
            var sut = new SungLinkedList <int>();

            sut.Append(1);
            sut.Append(2);
            sut.Append(3);

            int[] expected = { 1, 2, 3 };
            Assert.True(expected.SequenceEqual(sut.Traverse((curr, last) => false).Select(n => n.Value)));
            Assert.Empty(sut.Traverse((curr, last) => true));
        }
        public void TestEdgeCases()
        {
            var sut = new SungLinkedList <int>();

            // When nothing's added, there shoun't be *ANY* result.
            Assert.False(sut.Traverse().Any());

            //// When something not in the list is removed, then there shouldn't be anything returned.
            //Assert.Null(sut.Remove(null));

            //// When something not in the list is removed, then there shouldn't be anything returned.
            //Assert.Null(sut.Remove(new SungNode<int>(1)));
        }
        public void TestRemovingFirstAndLast()
        {
            var sut = new SungLinkedList <int>();
            var a   = sut.Append(1);
            var b   = sut.Append(2);
            var c   = sut.Append(3);

            sut.Remove(a);
            Assert.True(new[] { 2, 3 }.SequenceEqual(sut.Traverse().Select(node => node.Value)));

            sut.Remove(c);
            Assert.True(new[] { 2 }.SequenceEqual(sut.Traverse().Select(node => node.Value)));
        }
        public void TestInsertAndTraversal()
        {
            // Arrange
            var sut = new SungLinkedList <int>();

            sut.Append(1);
            sut.Append(2);
            sut.Append(3);

            // Act
            var actual = sut.Traverse().Select(node => node.Value);

            // Assert
            int[] expected = { 1, 2, 3 };
            Assert.True(expected.SequenceEqual(actual));
        }
        public void TestRemoving()
        {
            // Arrange
            var sut = new SungLinkedList <int>();

            sut.Append(1);
            var node = sut.Append(2);

            sut.Append(3);

            // Act: Remove 2.
            sut.Remove(node);

            // Assert
            int[] expected = { 1, 3 };
            var   actual   = sut.Traverse().Select(n => n.Value);

            Assert.True(expected.SequenceEqual(actual));
        }
        public void TestInsertAt()
        {
            // Arrange
            var sut = new SungLinkedList <int>();

            sut.Append(1);
            var node = sut.Append(2);

            sut.Append(3);

            // Act: Insert at 2
            sut.InsertAt(node, 10);

            // Assert
            int[] expected = { 1, 2, 10, 3 };
            var   actual   = sut.Traverse().Select(n => n.Value);

            Assert.True(expected.SequenceEqual(actual));
        }