public void EvenValueReturnsHalf()
        {
            var startStep = new CollatzStep {
                Value = 24, Step = 8
            };
            var expectedStep = new CollatzStep {
                Value = 12, Step = 9
            };
            var actualStep = CollatzStepCalculator.Calculate(startStep);

            Assert.Equal(expectedStep, actualStep);
        }
        public void OddValueReturnsTriplePlusOne()
        {
            var startStep = new CollatzStep {
                Value = 35, Step = 0
            };
            var expectedStep = new CollatzStep {
                Value = 106, Step = 1
            };
            var actualStep = CollatzStepCalculator.Calculate(startStep);

            Assert.Equal(expectedStep, actualStep);
        }
        public static CollatzStep Calculate(CollatzStep input)
        {
            if (input.Value == 1)
            {
                return(input);
            }

            int nextStep  = input.Step + 1;
            int nextValue = (input.Value % 2 == 0) ? input.Value / 2 : (input.Value * 3) + 1;

            return(new CollatzStep {
                Value = nextValue, Step = nextStep
            });
        }