コード例 #1
0
ファイル: Form1.cs プロジェクト: arulbakr/CalculatorApp
        private void mulButton_Click(object sender, EventArgs e)
        {
            expressionLbl.Text += String.IsNullOrEmpty(displayTxt.Text) ? Constants.Multiply : displayTxt.Text + Constants.Multiply;
            var number = new Number
            {
                EnteredNumber = String.IsNullOrEmpty(displayTxt.Text) ? 1 : Convert.ToDouble(displayTxt.Text),
                IsCalculated  = false
            };
            MultiplyCommand multiplyCommand;

            //Deferred execution
            if (_bracketCount == 0 || _bracketCount % 2 == 0)
            {
                _numbers.Add(number);
                multiplyCommand = new MultiplyCommand(_result, _numbers);
                //Calculating
                _invoker.CalculatingOperations();
            }
            else if (_bracketCount > 0 && _bracketCount % 2 == 0)
            {
                _bracketNumbers.Add(number);
                multiplyCommand = new MultiplyCommand(_result, _bracketNumbers);
                _invoker.CalculatingOperations();
            }
            else
            {
                _bracketNumbers.Add(number);
                multiplyCommand = new MultiplyCommand(_result, _bracketNumbers);
            }
            //Adding current operation into sequence
            _invoker.IncludeOperations(multiplyCommand);
            displayTxt.Clear();
        }
コード例 #2
0
        public void TestMultiplyCommand()
        {
            var c            = new MultiplyCommand(options);
            var actualResult = c.Execute(new long[] { 2, 2, 2 });

            Assert.Equal(8, actualResult);
        }
コード例 #3
0
 public CalculatorViewModel()
 {
     plusCommand     = new PlusCommand(this);
     minusCommand    = new MinusCommand(this);
     multiplyCommand = new MultiplyCommand(this);
     divisionCommand = new DivionCommand(this);
 }
コード例 #4
0
        public double Multiply(double first, double second)
        {
            var cmd = new MultiplyCommand(first, second);

            _multiplyHandler.Handle(cmd);

            return(_store.Result);
        }
コード例 #5
0
        public MultiplyDialog()
        {
            InitializeComponent();
            _MultiplyCommand = new MultiplyCommand();

            //Set command default values
            InitializeUI();
        }
コード例 #6
0
 public SYMathCalculator(ISYReciever reciever)
 {
     _addCommand      = new AddCommand(reciever);
     _subtractCommand = new SubtractCommand(reciever);
     _multiplyCommand = new MultiplyCommand(reciever);
     _divCommand      = new DivCommand(reciever);
     _powCommand      = new PowCommand(reciever);
 }
コード例 #7
0
        public ViewModel()
        {
            AddCommand      = new AddCommand(this);
            SubtractCommand = new SubtractCommand(this);
            MultiplyCommand = new MultiplyCommand(this);
            DivideCommand   = new DivideCommand(this);

            Results = new ObservableCollection <Result>();
        }
コード例 #8
0
 private void SignalsGenerated(object sender, EventArgs args)
 {
     AddCommand.RaiseCanExecuteChanged();
     DivideCommand.RaiseCanExecuteChanged();
     MultiplyCommand.RaiseCanExecuteChanged();
     SubtractCommand.RaiseCanExecuteChanged();
     SwapCommand.RaiseCanExecuteChanged();
     CorrelationCommand.RaiseCanExecuteChanged();
     ConvolutionCommand.RaiseCanExecuteChanged();
 }
コード例 #9
0
        public CalculatorViewModel(ICalculatorOperationsService operationsService = null)
        {
            Calculator         = new CalculatorModel();
            _operationsService = operationsService ?? new CalculatorOperationsService();

            AddCommand      = new AddCommand(this);
            SubtractCommand = new SubtractCommand(this);
            MultiplyCommand = new MultiplyCommand(this);
            DivideCommand   = new DivideCommand(this);
        }
コード例 #10
0
ファイル: UserControl1.cs プロジェクト: Curros/testCommand
        private void UserControl1_Load(object sender, EventArgs e)
        {
            Application.AddMessageFilter(this); //Function to check the events.

            calculator = new Calculator(20, 10);

            addCmd = new AddCommand(calculator);
            subCmd = new SubtractCommand(calculator);
            mulCmd = new MultiplyCommand(calculator);
            divCmd = new DividerCommand(calculator);
        }
コード例 #11
0
        public void MultiplyCommand_WithOneNumberInStack_FailExecute()
        {
            var command = new MultiplyCommand();
            var stack   = new Stack <decimal>();

            stack.Push(1);

            Exception ex = Assert.Throws <CalculateException>(() => command.Calculate(stack));

            Assert.Equal("Невозможно умножить 2 числа", ex.Message);
        }
コード例 #12
0
        static void Main(string[] args)
        {
            var receiver        = new Calculator(345, 9945);
            var addCommand      = new AddCommand(receiver);
            var subtractCommand = new SubtractCommand(receiver);
            var multiplyCommand = new MultiplyCommand(receiver);

            Console.WriteLine($"Add command result: {addCommand.Execute()}");
            Console.WriteLine($"Subtract command result: {subtractCommand.Execute()}");
            Console.WriteLine($"Multiply command result: {multiplyCommand.Execute()}");
            Console.ReadKey();
        }
コード例 #13
0
        public void MultiplyCommand_WithTwoNumberInStack_MultiplyInStack()
        {
            var command = new MultiplyCommand();
            var stack   = new Stack <decimal>();

            stack.Push(3);
            stack.Push(2);

            command.Calculate(stack);

            Assert.Single(stack);
            Assert.Equal(6m, stack.Peek());
        }
コード例 #14
0
        static void Main(string[] args)
        {
            Calculator calc = new Calculator();

            while (true)
            {
                string[] input = Console.ReadLine().Split();

                int value = int.Parse(input[1]);

                ICommmand command = null;

                switch (input[0])
                {
                case "+":
                    command = new PlusCommand(value);
                    break;

                case "-":
                    command = new MinusCommand(value);
                    break;

                case "*":
                    command = new MultiplyCommand(value);
                    break;

                case "undo":
                    calc.Undo(value);
                    break;

                case "redo":
                    calc.Redo(value);
                    break;
                }

                if (command != null)
                {
                    calc.AddCommand(command);
                }


                Console.WriteLine(calc.Result);
            }
        }
コード例 #15
0
ファイル: CommandTest.cs プロジェクト: tstune/designpattern
        public void PlusCommand_ShouldBe_Undone()
        {
            // Arrange
            var initValue = 10;

            // Act
            var command1 = new MultiplyCommand(initValue, 2);
            var command2 = new PlusCommand(Do(command1), 5);
            var command3 = new PlusCommand(Do(command2), 3);
            var command4 = new PlusCommand(Do(command3), 7);
            var result = Do(command4);
            // Undo all plus commands
            var undoResultPlusCommands = Undo(3);
            // Undo multiply command
            var undoResult = Undo(1);

            // Assert
            Assert.AreEqual(initValue * 2 + 5 + 3 + 7, result);
            Assert.AreEqual(initValue * 2, undoResultPlusCommands);
            Assert.AreEqual(initValue, undoResult);
        }
コード例 #16
0
        public void PlusCommand_ShouldBe_Undone()
        {
            // Arrange
            var initValue = 10;

            // Act
            var command1 = new MultiplyCommand(initValue, 2);
            var command2 = new PlusCommand(Do(command1), 5);
            var command3 = new PlusCommand(Do(command2), 3);
            var command4 = new PlusCommand(Do(command3), 7);
            var result   = Do(command4);
            // Undo all plus commands
            var undoResultPlusCommands = Undo(3);
            // Undo multiply command
            var undoResult = Undo(1);

            // Assert
            Assert.AreEqual(initValue * 2 + 5 + 3 + 7, result);
            Assert.AreEqual(initValue * 2, undoResultPlusCommands);
            Assert.AreEqual(initValue, undoResult);
        }
コード例 #17
0
 public void SetUp()
 {
     _numberToMultiply = 3;
     _command          = new MultiplyCommand(_mockCalculator.Object, _numberToMultiply);
 }
コード例 #18
0
 public void Constructor_NullCalculator_ThrowsException()
 {
     Model.Calculator calculator = null;
     _command = new MultiplyCommand(calculator, _numberToMultiply);
 }
コード例 #19
0
        static void Main(string[] args)
        {
            using (reader = File.OpenText("input.txt"))
                using (writer = new StreamWriter(File.Create("output.txt")))
                {
                    QuackVM  vm = new QuackVM();
                    Workflow wf = new Workflow(vm);

                    while (!reader.EndOfStream)
                    {
                        string   str = reader.ReadLine();
                        ICommand cmd = null;
                        switch (str[0])
                        {
                        case '+':
                            cmd = new PlusCommand();
                            break;

                        case '-':
                            cmd = new MinusCommand();
                            break;

                        case '*':
                            cmd = new MultiplyCommand();
                            break;

                        case '/':
                            cmd = new DivideCommand();
                            break;

                        case '%':
                            cmd = new ModuloCommand();
                            break;

                        case '>':
                            cmd = new SetRegisterCommand(str[1]);
                            break;

                        case '<':
                            cmd = new GetRegisterCommand(str[1]);
                            break;

                        case 'P':
                            if (str.Length > 1)
                            {
                                cmd = new PrintRegisterCommand(str[1]);
                            }
                            else
                            {
                                cmd = new PrintCommand();
                            }
                            break;

                        case 'C':
                            if (str.Length > 1)
                            {
                                cmd = new PrintRegisterCharCommand(str[1]);
                            }
                            else
                            {
                                cmd = new PrintCharCommand();
                            }
                            break;

                        case ':':
                            cmd = new LabelCommand(str.Substring(1));
                            break;

                        case 'J':
                            cmd = new GoToLabelCommand(str.Substring(1));
                            break;

                        case 'Z':
                            cmd = new GoToLabelZCommand(str[1], str.Substring(2));
                            break;

                        case 'E':
                            cmd = new GoToLabelECommand(str[1], str[2], str.Substring(3));
                            break;

                        case 'G':
                            cmd = new GoToLabelGCommand(str[1], str[2], str.Substring(3));
                            break;

                        case 'Q':
                            cmd = new QuitCommand();
                            break;

                        default:
                            cmd = new NumberCommand(int.Parse(str));
                            break;
                        }
                        wf.AddCommand(cmd);
                    }

                    while (!wf.IsCompleted())
                    {
                        wf.ExecuteCurrentCommand();
                    }
                }
        }
コード例 #20
0
        public void Priority_MulPriorityEqualsDivPriority_True()
        {
            ICommand mulCommand = new MultiplyCommand();

            Assert.Equal(mulCommand.Priority, divCommand.Priority);
        }
コード例 #21
0
        private ICommand CommandFromString(string name, string[] arguments)
        {
            ICommand command = null;

            switch (name)
            {
            case "SET":
            {
                Register register = Registers[arguments[0]];
                int      value    = int.Parse(arguments[1]);

                command = new SetCommand(register, value);
                break;
            }

            case "ADD":
            {
                Register registerOne = Registers[arguments[0]];
                Register registerTwo = Registers[arguments[1]];
                Register registerOut = Registers[arguments[2]];

                command = new AddCommand(registerOne, registerTwo, registerOut);
                break;
            }

            case "SUB":
            {
                Register registerOne = Registers[arguments[0]];
                Register registerTwo = Registers[arguments[1]];
                Register registerOut = Registers[arguments[2]];

                command = new SubtractCommand(registerOne, registerTwo, registerOut);
                break;
            }

            case "MUL":
            {
                Register registerOne = Registers[arguments[0]];
                Register registerTwo = Registers[arguments[1]];
                Register registerOut = Registers[arguments[2]];

                command = new MultiplyCommand(registerOne, registerTwo, registerOut);
                break;
            }

            case "DIV":
            {
                Register registerOne = Registers[arguments[0]];
                Register registerTwo = Registers[arguments[1]];
                Register registerOut = Registers[arguments[2]];

                command = new DivideCommand(registerOne, registerTwo, registerOut);
                break;
            }

            case "OUT":
            {
                if (Registers.ContainsKey(arguments[0]))
                {
                    Register register = Registers[arguments[0]];
                    command = new OutCommand(register);
                }
                else
                {
                    command = new OutCommand(arguments[0]);
                }

                break;
            }

            case "HLT":
            {
                command = new HaltCommand();
                break;
            }

            case "JMP":
            {
                string label = arguments[0];

                command = new JumpCommand(label);
                break;
            }

            case "JIF":
            {
                Register      registerOne     = Registers[arguments[0]];
                Register      registerTwo     = Registers[arguments[2]];
                string        conditionString = arguments[1];
                JumpCondition jumpCondition   = JumpCondition.Undefined;
                switch (conditionString)
                {
                case "==":
                    jumpCondition = JumpCondition.Equal;
                    break;

                case "<":
                    jumpCondition = JumpCondition.LessThan;
                    break;

                case "<=":
                    jumpCondition = JumpCondition.LessThanOrEqual;
                    break;

                case ">":
                    jumpCondition = JumpCondition.GreaterThan;
                    break;

                case ">=":
                    jumpCondition = JumpCondition.GreaterThanOrEqual;
                    break;

                case "!=":
                    jumpCondition = JumpCondition.NotEqual;
                    break;
                }

                string label = arguments[3];

                command = new JumpIfCommand(registerOne, registerTwo, label, jumpCondition);
                break;
            }

            case "CPY":
            {
                Register registerOne = Registers[arguments[0]];
                Register registerTwo = Registers[arguments[1]];

                command = new CopyCommand(registerOne, registerTwo);
                break;
            }

            default:
                if (name == "str:")
                {
                    string stringKey   = arguments[0];
                    string stringValue = string.Empty;
                    for (int i = 1; i < arguments.Length; i++)
                    {
                        stringValue += arguments[i];
                        if (i < arguments.Length)
                        {
                            stringValue += " ";
                        }
                    }

                    Program.RegisterString(stringKey, stringValue);
                }
                else if (name.Length > 1 && name.EndsWith(":"))
                {
                    Program.MakeLabel(name.Substring(0, name.Length - 1));
                    break;
                }
                break;
            }

            return(command);
        }