public void Should_validate_op_code_is_3()
        {
            var program          = "1,0,99,0";
            var transposeProgram = new TransposeProgram(new IntCodeValidator());
            var ex = Assert.Throws <InvalidOpCodeException>(() => transposeProgram.Process(program, 1, 0));

            Assert.That(ex.Message, Is.EqualTo("Invalid input: op code (first integer)"));
        }
        public void Should_validate_input_is_a_valid_program()
        {
            var validatorSpy     = A.Fake <IIntCodeValidator>();
            var transposeProgram = new TransposeProgram(validatorSpy);
            var program          = "3,0,99,0";

            A.CallTo(() => validatorSpy.SplitString(program)).Returns(new IntCodeValidator().SplitString(program));
            Assert.Throws <Exception>(() => transposeProgram.Process(program, 1, 0));
            A.CallTo(() => validatorSpy.Validate(program)).MustHaveHappened();
        }
        public void Should_validate_op_code_in_program_configuration(string program)
        {
            var transposeProgram = new TransposeProgram(new IntCodeValidator());

            Assert.DoesNotThrow(() => transposeProgram.Process(program, 1, 0));
        }