private (JugProblemInputs, JugConfig, IOzLogger <JugProblemSolver>) ConfigureInputs(int firstCapacity, int secondCapacity, int targetAmount) { var inputs = new JugProblemInputs(firstCapacity, secondCapacity, targetAmount); var config = new JugConfig { MaxIterations = 100 }; var moqLoggerFactory = new Mock <ILoggerFactory>(); var moqLogger = new Mock <IOzLogger <JugProblemSolver> >(); moqLogger.Setup(logger => logger.LogInformation(It.IsAny <string>())).Callback(() => { }); return(inputs, config, moqLogger.Object); }
public void Should_Throw_Exception_When_Jugs_Cannot_Be_Completed() { var inputs = new JugProblemInputs(20, 30, 15); var config = new JugConfig { MaxIterations = 100 }; var moqLoggerFactory = new Mock <ILoggerFactory>(); var moqLogger = new Mock <IOzLogger <JugProblemSolver> >(); moqLogger.Setup(logger => logger.LogInformation(It.IsAny <string>())).Callback(() => { }); Assert.Throws <ArgumentException>(() => { var solver = new JugProblemSolver(inputs, moqLogger.Object, config); }); }
public void Should_Find_Jug_Problem_Solution_Correctly() { var inputs = new JugProblemInputs(21, 26, 3); var config = new JugConfig { MaxIterations = 100 }; var moqLoggerFactory = new Mock <ILoggerFactory>(); var moqLogger = new Mock <IOzLogger <JugProblemSolver> >(); moqLogger.Setup(logger => logger.LogInformation(It.IsAny <string>())).Callback(() => { }); var solver = new JugProblemSolver(inputs, moqLogger.Object, config); var(result, steps) = solver.RunJugProcess(); Assert.True(result); Assert.True(steps.Any()); Assert.True(steps.Last().SecondAmount == 0); }
public JugProblemSolver(JugProblemInputs inputs, IOzLogger <JugProblemSolver> logger, JugConfig config) { _firstCapacity = inputs.FirstJugCapacity; _secondCapacity = inputs.SecondJugCapacity; _targetFillAmount = inputs.TargetFillAmount; _config = config; _logger = logger; if (!IsPossibleToFill()) { throw new ArgumentException(nameof(inputs.TargetFillAmount)); } if (inputs.TargetFillAmount > Math.Max(inputs.FirstJugCapacity, inputs.SecondJugCapacity)) { throw new ArgumentException(nameof(inputs.TargetFillAmount)); } }