public override async Task <CalculatorResponse> Calculate(CalculatorRequest request, ServerCallContext context)
 {
     return(new CalculatorResponse
     {
         Result = request.A + request.B
     });
 }
        public ActionResult <string> Divide(CalculatorRequest request)
        {
            var a = request.A;
            var b = request.B;

            return($"A: {a} B: {b}, a + b = {a / b}");
        }
        public CalculatorResponse Calculate
            (CalculatorRequest request)
        {
            decimal result;

            switch (request.Action)
            {
            case "+":
                result = request.DigA + request.DigB;
                break;

            case "-":
                result = request.DigA - request.DigB;
                break;

            case "*":
                result = request.DigA * request.DigB;
                break;

            case "/":
                result = request.DigA / request.DigB;
                break;

            case "^":
                result = Pow(request.DigA, request.DigB);
                break;

            default:
                throw new InvalidOperationException();
            }

            return(new CalculatorResponse {
                Result = result
            });
        }
        public ActionResult <string> Multiply(CalculatorRequest request)
        {
            var a = request.A;
            var b = request.B;

            return($"A: {a} B: {b}, a + b = {a * b}");
        }
        public ActionResult <string> Subtract(CalculatorRequest request)
        {
            var a = request.A;
            var b = request.B;

            return($"A: {a} B: {b}, a + b = {a - b}");
        }
        public override Task <CalculatorReply> Calc(CalculatorRequest request, ServerCallContext context)
        {
            var exp    = string.Empty;
            var result = 0;

            switch (request.Op)
            {
            case "+":
                exp    = $"{request.Num1} + {request.Num2}";
                result = request.Num1 + request.Num2;
                break;

            case "-":
                exp    = $"{request.Num1} - {request.Num2}";
                result = request.Num1 - request.Num2;
                break;

            case "*":
                exp    = $"{request.Num1} * {request.Num2}";
                result = request.Num1 * request.Num2;
                break;

            case "/":
                exp    = $"{request.Num1} / {request.Num2}";
                result = request.Num1 / request.Num2;
                break;
            }

            return(Task.FromResult(new CalculatorReply()
            {
                Exp = exp,
                Result = result
            }));
        }
Example #7
0
        async public Task <CalculatorResponse> Post(CalculatorRequest exp)
        {
            string content = exp.Expression;

            if (!string.IsNullOrWhiteSpace(content))
            {
                float  value;
                string errMsg;
                if (EvalStrWorker.EvalStr(content, out value, out errMsg))
                {
                    _logger.LogInformation($"value: {value}");
                    return(new CalculatorResponse
                    {
                        StatusCode = System.Net.HttpStatusCode.OK,
                        Result = value.ToString()
                    });
                }
                else
                {
                    _logger.LogInformation($"errMsg: {errMsg}");
                    return(new CalculatorResponse
                    {
                        StatusCode = System.Net.HttpStatusCode.BadRequest,
                        ErrorMessage = errMsg
                    });
                }
            }
            return(new CalculatorResponse
            {
                StatusCode = System.Net.HttpStatusCode.BadRequest,
                ErrorMessage = "Expression can't be null."
            });
        }
Example #8
0
        public HttpResponseMessage Calcula(CalculatorRequest calculate)
        {
            var response = calculatorBusiness.Calculate(calculate);

            return(Request.CreateResponse(
                       String.IsNullOrEmpty(response) ? HttpStatusCode.OK : HttpStatusCode.ExpectationFailed,
                       response));
        }
Example #9
0
        public override Task <CalculatorResponse> Calc(CalculatorRequest request, ServerCallContext context)
        {
            int result = request.Calculator.FirstNumber + request.Calculator.SecondNumber;

            return(Task.FromResult(new CalculatorResponse()
            {
                Result = result
            }));
        }
Example #10
0
        public IActionResult CalcResult([FromBody] CalculatorRequest request)
        {
            var result = _serv.Evaluate(request.Expression);

            return(Json(new
            {
                result = result != null ?  result.ToString() : "Invalid expression",
            }));
        }
Example #11
0
        public override Task <CalculatorReply> Subtract(CalculatorRequest request, ServerCallContext context)
        {
            if (request.N2 == 0)
            {
                throw new RpcException(new Status(StatusCode.InvalidArgument, "Division by zero."));
            }

            return(Task.FromResult(new CalculatorReply {
                Result = request.N1 - request.N2
            }));
        }
Example #12
0
    public async Task AdderMustAdd()
    {
        var testData = new CalculatorRequest
        {
            CalculatorOperatorType = CalculatorOperatorTypeEnum.Adder,
            LeftVal  = 3,
            RightVal = 6
        };
        int addingResult = await getResultAsync(testData);

        Assert.Equal(9, addingResult);
    }
Example #13
0
    public async Task MultiplierMustMultiply()
    {
        var testData = new CalculatorRequest
        {
            CalculatorOperatorType = CalculatorOperatorTypeEnum.Multiplier,
            LeftVal  = 84,
            RightVal = 37
        };
        int multiplyResult = await getResultAsync(testData);

        Assert.Equal(3108, multiplyResult);
    }
Example #14
0
    public async Task DividerMustDivide()
    {
        var testData = new CalculatorRequest
        {
            CalculatorOperatorType = CalculatorOperatorTypeEnum.Divider,
            LeftVal  = 84,
            RightVal = 14
        };
        int multiplyResult = await getResultAsync(testData);

        Assert.Equal(6, multiplyResult);
    }
        public async void TestProcessor_BadInput(string infix, int value)
        {
            var request = new CalculatorRequest()
            {
                Input = infix
            };

            BResult <CalculatorResponse> result = await new CalculateProcessor().ExecuteAsync(request);

            Assert.Equal(value, result.Result.Output);
            Assert.NotEmpty(result.Error);
        }
Example #16
0
    public async Task SubstracterMustSubstract()
    {
        var testData = new CalculatorRequest
        {
            CalculatorOperatorType = CalculatorOperatorTypeEnum.Substracter,
            LeftVal  = 123,
            RightVal = 43
        };
        int substractResult = await getResultAsync(testData);

        Assert.Equal(80, substractResult);
    }
Example #17
0
    private async Task <int> getResultAsync(CalculatorRequest calculatorRequest)
    {
        var testDataContent       = JsonConvert.SerializeObject(calculatorRequest);
        var testDataStringContent = new StringContent(testDataContent, System.Text.Encoding.UTF8, "application/json");
        var response = await _client.PostAsync("/api/calculator", testDataStringContent);

        response.EnsureSuccessStatusCode();
        var responseString = await response.Content.ReadAsStringAsync();

        var calculatorResponse = JsonConvert.DeserializeObject <CalculatorResponse>(responseString);

        return(calculatorResponse.Result);
    }
Example #18
0
        public async void VerifyAddTwoNumbers_ServiceApi_LocalInstance()
        {
            var service = new Calculator().Service;

            var request = new CalculatorRequest
            {
                I1        = 5,
                I2        = 10,
                Operation = CalculatorOpEnum.Add,
            };

            var result = await service.Execute(request);

            Xunit.Assert.True(result.Answer == 15);
        }
Example #19
0
        public async void VerifyAddTwoNumbers_ServiceApi_SignalrRelay()
        {
            var service = new Calculator(typeof(SignalrRelayProxy <CalculatorRequest, CalculatorResponse>)).Service;

            var request = new CalculatorRequest
            {
                I1        = 5,
                I2        = 10,
                Operation = CalculatorOpEnum.Add,
            };

            var result = await service.Execute(request);

            Xunit.Assert.True(result.Answer == 15);
        }
Example #20
0
        public void CalculatorRequestSum_Success()
        {
            //Arrange
            RabbitRpc         rabbit  = new RabbitRpc("");
            CalculatorRequest request = new CalculatorRequest();

            request.Expression = "2+5";

            string requestMessage = JsonConvert.SerializeObject(request);
            string expected       = "7";
            //Act
            string actual = rabbit.Call(requestMessage);

            //Assert
            Assert.Equal(expected, actual);
        }
Example #21
0
    public async Task UndefinedMustReturnBadRequest()
    {
        var random            = new Random();
        var calculatorRequest = new CalculatorRequest
        {
            CalculatorOperatorType = CalculatorOperatorTypeEnum.Undefined,
            LeftVal  = random.Next(100),
            RightVal = random.Next(100)
        };

        var testDataContent       = JsonConvert.SerializeObject(calculatorRequest);
        var testDataStringContent = new StringContent(testDataContent, System.Text.Encoding.UTF8, "application/json");
        var response = await _client.PostAsync("/api/calculator", testDataStringContent);

        Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
    }
Example #22
0
        public static void Calc(CalculatorService.CalculatorServiceClient client)
        {
            var calc = new Calculator
            {
                FirstNumber  = 10,
                SecondNumber = 10
            };

            var calcRequest = new CalculatorRequest()
            {
                Calculator = calc
            };

            var responseCalc = client.Calc(calcRequest);

            Console.WriteLine(responseCalc.Result);
        }
Example #23
0
        public ActionResult <Adder> Post([FromBody] CalculatorRequest calculatorRequest)
        {
            CalculatorOperatorBase calculator;

            switch (calculatorRequest.CalculatorOperatorType)
            {
            case CalculatorOperatorTypeEnum.Adder:
            {
                calculator = new Adder(calculatorRequest.LeftVal, calculatorRequest.RightVal);
                break;
            }

            case CalculatorOperatorTypeEnum.Substracter:
            {
                calculator = new Substracter(calculatorRequest.LeftVal, calculatorRequest.RightVal);
                break;
            }

            case CalculatorOperatorTypeEnum.Multiplier:
            {
                calculator = new Multiplier(calculatorRequest.LeftVal, calculatorRequest.RightVal);
                break;
            }

            case CalculatorOperatorTypeEnum.Divider:
            {
                calculator = new Divider(calculatorRequest.LeftVal, calculatorRequest.RightVal);
                break;
            }

            default:
            {
                return(BadRequest("Invalid CalculatorOperatorType"));
            }
            }

            calculator.Calculate();

            var calculatorResponse = new CalculatorResponse
            {
                Result = calculator.Result
            };

            return(Ok(calculatorResponse));
        }
Example #24
0
        async Task <CalculatorResponse> CalculateAsync(CalculatorRequest request)
        {
            // Do async requests for the data

            var validationResult = this.Validate(request);

            if (!validationResult.IsValid)
            {
                await _logServiceClient.PostAsync(new LogRequest { Message = $"Failed to Calculate for {request.SupplyPoint}-{request.Date}" });

                return(new CalculatorResponse {
                    Success = false, Errors = validationResult.FormattedErrors
                });
            }

            var taskResult = GetTheDataToMakeCalculationsAsync(request);

            var result = new CalculatorResponse {
                Success = true, Reply = HttpStatusCode.OK
            };
            await _logServiceClient.PostAsync(new LogRequest { Message = $"Calculation complete for: {request.SupplyPoint}-{request.MarketParticipantId}-{request.LLF}-{request.Date}" });

            return(result);
        }
Example #25
0
        public double?Calculate(CalculatorRequest request)
        {
            double?operationResult = null;
            var    calMachine      = new Calculator();

            if (request.Operation.ToLowerInvariant() == "+" || request.Operation.ToLowerInvariant() == "sum")
            {
                operationResult += calMachine.Sum(request.Value1, request.Value2);
            }
            else if (request.Operation.ToLowerInvariant() == "-" || request.Operation.ToLowerInvariant() == "subtract")
            {
                operationResult += calMachine.Subtract(request.Value1, request.Value2);
            }
            else if (request.Operation.ToLowerInvariant() == "*" || request.Operation.ToLowerInvariant() == "multiply")
            {
                operationResult += calMachine.Multiply(request.Value1, request.Value2);
            }
            else if (request.Operation.ToLowerInvariant() == "/" || request.Operation.ToLowerInvariant() == "divide")
            {
                operationResult += calMachine.Divide(request.Value1, request.Value2);
            }

            return(operationResult);
        }
Example #26
0
        public async Task <BResult <CalculatorResponse> > ExecuteAsync(CalculatorRequest request)
        {
            BResult <CalculatorResponse> result = new BResult <CalculatorResponse> {
                Result = new CalculatorResponse()
            };

            try
            {
                if (string.IsNullOrWhiteSpace(request.Input))
                {
                    result.Error.Add(new HError("Calculator", "Invalid request - null input"));
                }
                if (request.Input.Any(c => char.IsLetter(c)))
                {
                    result.Error.Add(new HError("Calculator", "Invalid input - contains letters"));
                }
                if (!request.Input.EndsWith("="))
                {
                    result.Error.Add(new HError("Calculator", "Invalid input - Expression must end with '='"));
                }

                if (_operators == null || _operators.Count == 0)
                {
                    result.Error.Add(new HError("Calculator", "Invalid operator creation"));
                    return(result);
                }

                //  Check input string against valid list of valid operators / digits
                List <char> goodChar = _operators.Keys.SelectMany(s => s.ToCharArray()).ToList();
                goodChar.AddRange(new List <char> {
                    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '=', '(', ')'
                });
                if (request.Input.Except(goodChar).Any())
                {
                    string validChar = string.Join(", ", goodChar.Select(c => c.ToString()).ToArray());
                    result.Error.Add(new HError("Calculator", $"Invalid input - Valid inputs are: {validChar}"));
                }

                if (result.Error.Count > 0)
                {
                    return(result);
                }

                var calculateInputRequest = new CalculateInfixRequest()
                {
                    Input = request.Input, Operators = _operators
                };
                BResult <CalculateInfixResponse> bResultInput = new InfixToPostfixProcessor().InfixToPostfix(calculateInputRequest);
                result.Error.AddRange(bResultInput.Error);
                //if (result.Error.Any())
                //    return result;

                var calulateOutputRequest = new CalculatePostfixRequest()
                {
                    CalculateStack = bResultInput.Result.CalculateStack, Operators = _operators
                };
                BResult <CalculatePostfixResponse> bResultOutput = new CalculatePostfixProcessor().Calculate(calulateOutputRequest);
                result.Error.AddRange(bResultOutput.Error);
                result.Result.Output = bResultOutput.Result.CalculatedValue;
            }
            catch (Exception ex)
            {
                result.Error.Add(new HException(_herrorRepository, "Calculator", "Exception will executing Calculator", ex));
            }


            await Task.Delay(0);

            return(result);
        }
Example #27
0
 public override Task <CalculatorReply> Add(CalculatorRequest request, ServerCallContext context) =>
 Task.FromResult(new CalculatorReply {
     Result = request.N1 + request.N2
 });
Example #28
0
        public async Task <IHttpActionResult> Post([FromBody] CalculatorRequest request)
        {
            BResult <CalculatorResponse> result = await new CalculateProcessor().ExecuteAsync(request);

            return(ResponseMessage(new ActionResponse <CalculatorResponse>().CreateResponse(result)));
        }
Example #29
0
        public string Calculate(CalculatorRequest calc)
        {
            string requestMessage = JsonConvert.SerializeObject(calc);

            return(rabbit.Call(requestMessage));
        }
Example #30
0
        async Task GetTheDataToMakeCalculationsAsync(CalculatorRequest request)
        {
            // This is set up for one off requests at the moment

            var retrievedData = new RetrieveData(request.Date, request.SupplyPoint, request.LLF, request.MarketParticipantId);

            // Get the customer information just in case its needed
            var customer = retrievedData.GetCustomerName();

            var calculated = new CalculatedData(
                retrievedData.GetProfileData(), retrievedData.GetDuosTimeBands(),
                retrievedData.GetDuosTariffs()[0], retrievedData.GetLosses(),
                retrievedData.GetTLossFactor(), retrievedData.GetContractBands());

            calculated.Calculate();

            var total = new TotalledCalculations(
                calculated.CombinedLosses, retrievedData.GetSupplyCapacity(),
                retrievedData.GetDuosTariffs()[0],
                calculated.LossBand, calculated.EnergyBand);

            total.Total();

            var totalledDuos = total.DuosBand
                               .Select(s => new {
                SupplyPointRef = request.SupplyPoint,
                Date           = request.Date,
                Band           = s.Band,
                Units          = s.Units,
                UOM            = s.UOM,
                UnitCharge     = s.UnitCharge,
                Charge         = s.Charge,
                Count          = s.Count
            }).ToList();

            var    doneDuos = new PostDataArray(totalledDuos);
            string duosPath = "http://localhost:1521/api/duos";
            await doneDuos.MakeCallAsync(duosPath);

            var totalledLoss = calculated.LossBand.GroupBy(s => s.Band)
                               .Select(g => new {
                SupplyPointRef = request.SupplyPoint,
                Date           = request.Date,
                Band           = g.Key,
                PencePerKwh    = g.Max(s => s.PencePerKwh),
                TLossKwh       = g.Sum(s => s.TLossKwh),
                DLossKwh       = g.Sum(s => s.DLossKwh),
                Count          = g.Sum(s => s.Count)
            }).ToList();

            var    doneLoss = new PostDataArray(totalledLoss);
            string lossPath = "http://localhost:1521/api/loss";
            await doneLoss.MakeCallAsync(lossPath);

            var totalledEnergy = calculated.EnergyBand.GroupBy(g => g.Band)
                                 .Select(s => new {
                SupplyPointRef = request.SupplyPoint,
                Date           = request.Date,
                Band           = s.Key,
                PencePerKwh    = s.Max(g => g.PencePerKwh),
                Kwh            = s.Sum(g => g.Kwh),
                EnergyCost     = s.Sum(g => g.EnergyCost),
                Count          = s.Sum(g => g.Count)
            }).ToList();

            var    doneEnergy = new PostDataArray(totalledEnergy);
            string energyPath = "http://localhost:1521/api/energy";
            await doneEnergy.MakeCallAsync(energyPath);
        }