Пример #1
0
        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>()
                })));
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
            });
        }
Пример #4
0
        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);
        }