public void Current_IfNotMovedYet_ThrowsException()
        {
            //arrange
            var bst      = GetTreeWithElements();
            var iterator = new InOrderEnumerator <int>(bst.RootNode);
            //act
            Action act = () => { var cur = iterator.Current; };

            //assert
            act.Should().Throw <InvalidOperationException>();
        }
        public void Current_IfAlreadyMoved_Works()
        {
            //arrange
            var bst      = GetTreeWithElements();
            var iterator = new InOrderEnumerator <int>(bst.RootNode);

            //act
            iterator.MoveNext();
            var result = iterator.Current;

            //assert
            result.Value.Should().Be(1);
        }
        public void MoveNext_ReturnsNodes_InRightOrder()
        {
            //arrange
            var bst      = GetTreeWithElements();
            var iterator = new InOrderEnumerator <int>(bst.RootNode);

            //act
            iterator.MoveNext();
            var previous = iterator.Current;

            //assert
            while (iterator.MoveNext())
            {
                var current = iterator.Current;
                current.Value.Should().BeGreaterOrEqualTo(previous.Value);
                previous = current;
            }
        }