public async Task <IActionResult> GetJugProblem([FromQuery] int firstJugCapacity, [FromQuery] int secondJugCapacity, [FromQuery] int targetAmount) { var solverInputs = new JugProblemInputs(firstJugCapacity, secondJugCapacity, targetAmount); try { var solver = new JugProblemSolver(solverInputs, new OzLogger <JugProblemSolver>(_loggerFactory), _jugConfig.Value); return(await Task.Run(async() => { var(success, steps) = solver.RunJugProcess(); return await Task.FromResult(new OkObjectResult(new { Success = success, Steps = steps })); })); } catch (ArgumentException exception) { return(await Task.FromResult(new OkObjectResult(new { Success = false, Steps = new List <JugStep>() }))); } }
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); }