Exemple #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>()
                })));
            }
        }
Exemple #2
0
        public void Should_Fail_When_Equal_Capacity_But_Target_Is_Not_Gcd()
        {
            var(inputs, config, logger) = ConfigureInputs(20, 20, 15);

            Assert.Throws <ArgumentException>(() =>
            {
                var solver = new JugProblemSolver(inputs, logger, config);
            });
        }
Exemple #3
0
        public void Should_Succeed_When_Equal_Capacity_And_Target_Is_Capacity()
        {
            var(inputs, config, logger) = ConfigureInputs(20, 20, 20);
            var solver = new JugProblemSolver(inputs, logger, config);

            var(success, steps) = solver.RunJugProcess();
            Assert.True(success);
            Assert.True(steps.Any());
            Assert.True(steps.Last().SecondAmount == 0);
            Assert.Equal(20, steps.Last().FirstAmount);
        }
Exemple #4
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);
            });
        }
Exemple #5
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);
        }