/// <summary> /// Парсит строчку в свойства операндов и оператора /// и возвращает ResultStatus.OK, если парсинг удался, /// или ResultStatus.InvalidInput, если парсинг неудачен. /// </summary> /// <param name="inputStr"></param> /// <returns></returns> public ResultStatus ParseString(string str) { var parsedStr = SplitString(str); var result = new bool[parsedStr.Length]; var status = DoubleOrCommandDecider(result, parsedStr); if (status == ResultStatus.InvalidInput) { return(ResultStatus.InvalidInput); } var elementsCount = parsedStr.Length; if (elementsCount == 1 && !result[0] && CalculatorOperators.IsOneElementCommand(parsedStr[0])) { Operator = StrToOperator(parsedStr[0]); return(ResultStatus.OK); } for (int i = 0; i < elementsCount; i++) { if (CalculatorOperators.IsMR(parsedStr[i])) { parsedStr[i] = Memory.ToString(); result[i] = true; } } if (elementsCount == 2 && !result[0] & result[1] && !CalculatorOperators.IsOneElementCommand(parsedStr[0])) { Operand1 = Result; Operand2 = StrToDouble(parsedStr[1]); Operator = StrToOperator(parsedStr[0]); return(ResultStatus.OK); } if (elementsCount == 3 && result[0] && !result[1] && result[2]) { if (!CalculatorOperators.IsOneElementCommand(parsedStr[1])) { Operand1 = StrToDouble(parsedStr[0]); Operand2 = StrToDouble(parsedStr[2]); Operator = StrToOperator(parsedStr[1]); return(ResultStatus.OK); } } return(ResultStatus.InvalidInput); }
public void CalculatorOperatorsIsMR_Test(string symbols, bool isMR) { Assert.AreEqual(isMR, CalculatorOperators.IsMR(symbols)); }