public void CalculatorOperatorsFromString() { foreach (var i in CalculatorOperators.List()) { Assert.AreEqual(i, CalculatorOperators.FromString(i.Symbols)); } }
/// <summary> /// Перегрузка конструктора консольного калькулятора. /// Инициализирует нулями свойства "Результат" и регистр памяти. /// В поля операндов и оператора записывает переданные значения. /// </summary> /// <param name="Значение первого операнда"></param> /// <param name="Значение второго операнда"></param> /// <param name="Оператор (действие)"></param> public ConsoleCalculator(double operand1, double operand2, CalculatorOperators operator1) { Memory = 0; Result = 0; Operand1 = operand1; Operand2 = operand2; Operator = operator1; }
/// <summary> /// Перегрузка конструктора консольного калькулятора. /// Инициализирует все имеющиеся свойства переданными значениями. /// Специально для тестов. /// </summary> /// <param name="Хранимое значение в памяти"></param> /// <param name="Хранимый результат"></param> /// <param name="Значение первого операнда"></param> /// <param name="Значение второго операнда"></param> /// <param name="Оператор (действие)"></param> public ConsoleCalculator(double memory, double result, double operand1, double operand2, CalculatorOperators operator1) { Memory = memory; Result = result; Operand1 = operand1; Operand2 = operand2; Operator = operator1; }
public void OneElementCorrectCommand_Test(string input, ResultStatus expectedResult) { var calculator = new ConsoleCalculator(); var resultStatus = calculator.ParseString(input); var expOperation = CalculatorOperators.FromString(input); Assert.AreEqual(expectedResult, resultStatus); Assert.AreEqual(expOperation, calculator.Operator); }
public void CalculatorOperatorsToString_Test() { var id = 20; var name = "Test Operator"; var str = "test"; var oneElement = true; var testOperator = new CalculatorOperators(id, name, str, oneElement); Assert.AreEqual(name, testOperator.ToString()); }
public void CalculatorOperatorsList_Test() { int id = 0; foreach (var i in CalculatorOperators.List()) { Assert.AreEqual(id, i.Id); id++; } }
public void TwoElementCorrectCommand_Test(string input, double memoryField, double resultField, ResultStatus expectedResult, string expectedOperation, double expectedOp2) { var calculator = new ConsoleCalculator(memoryField, resultField, 0, 0, CalculatorOperators.Add); var resultStatus = calculator.ParseString(input); var expOperation = CalculatorOperators.FromString(expectedOperation); Assert.AreEqual(expectedResult, resultStatus); Assert.AreEqual(expOperation, calculator.Operator); Assert.AreEqual(resultField, calculator.Operand1); Assert.AreEqual(expectedOp2, calculator.Operand2); }
public void CalculatorOperatorsEquals_Test() { var id = 20; var name = "Test Operator"; var str = "test"; var oneElement = true; var testOperator = new CalculatorOperators(id, name, str, oneElement); Assert.AreEqual(false, testOperator.Equals(CalculatorOperators.Help)); Assert.AreEqual(true, testOperator.Equals(testOperator)); }
public void CalculatorOperatorsGetHashCode_Test() { var id = 0; foreach (var i in CalculatorOperators.List()) { var a = id.GetHashCode(); var b = i.GetHashCode(); Assert.AreEqual(id.GetHashCode(), i.GetHashCode()); id++; } }
public void CalculatorOperatorsConstructor_Test() { var id = 20; var name = "Test Operator"; var str = "test"; var oneElement = true; var testOperator = new CalculatorOperators(id, name, str, oneElement); Assert.AreEqual(id, testOperator.Id); Assert.AreEqual(name, testOperator.Name); Assert.AreEqual(str, testOperator.Symbols); Assert.AreEqual(oneElement, testOperator.OneElementCommand); }
/// <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); }
/// <summary> /// Метод-решатель, определяет, находится ли на i-ой позиции в массиве распарсеной строки /// вещественное число (тогда в массиве result записываем true), команда из соответствующего класса /// (тогда false) или какой-то мусор (возвращается InvalidInput) /// </summary> /// <param name="result"></param> /// <param name="parsedStr"></param> /// <returns></returns> public static ResultStatus DoubleOrCommandDecider(bool[] result, string[] parsedStr) { double parsedDouble; for (int i = 0; i < parsedStr.Length; i++) { if (double.TryParse(parsedStr[i], System.Globalization.NumberStyles.Any, CultureInfo.InvariantCulture, out parsedDouble)) { result[i] = true; } else { if (!CalculatorOperators.Contains(parsedStr[i])) { return(ResultStatus.InvalidInput); } } } return(ResultStatus.OK); }
public void CalculatorOperatorsContains_Test(string symbols, bool contains) { Assert.AreEqual(contains, CalculatorOperators.Contains(symbols)); }
/// <summary> /// Стандартный конструктор консольного калькулятора. /// Инициализирует нулями свойства "Результат" и регистр памяти. /// </summary> public ConsoleCalculator() { Memory = 0; Result = 0; Operator = CalculatorOperators.Add; }
/// <summary> /// Обертка для превращения строки с оператором (командой) в оператор /// </summary> /// <param name="str"></param> /// <returns></returns> public static CalculatorOperators StrToOperator(string str) { return(CalculatorOperators.FromString(str)); }
public void CalculatorOperatorsIsMR_Test(string symbols, bool isMR) { Assert.AreEqual(isMR, CalculatorOperators.IsMR(symbols)); }
public void CalculatorOperatorsIsOneElementCommand_Test(string symbols, bool isMR) { Assert.AreEqual(isMR, CalculatorOperators.IsOneElementCommand(symbols)); }