Exemplo n.º 1
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);
        }
Exemplo n.º 2
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);
            });
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
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));
            }
        }