Esempio n. 1
0
            protected internal override void Sub(CalculatorContext context, Stack <string> stack)
            {
                Calculator ctxt = context.Owner;

                if (stack.Count >= 2)
                {
                    CalculatorState endState = context.State;

                    context.ClearState();

                    try
                    {
                        ctxt.Sub();
                    }
                    finally
                    {
                        context.State = endState;
                    }
                }
                else
                {
                    context.State.Exit(context);
                    context.State = Map1.ErrorTuple;
                    context.State.Entry(context);
                }

                return;
            }
Esempio n. 2
0
        public void EnteringSeveralDigitsDisplaysTheWholeNumber()
        {
            sut = sut.EnterDigit('2');
            sut = sut.EnterDigit('3');

            Assert.AreEqual("23", sut.Display);
        }
Esempio n. 3
0
        private void buttonEqual_Click(object sender, EventArgs e)
        {
            if (currentState == CalculatorState.secondNumberInput && txtResult.Text != "")
            {
                double result = 0;
                secondNumber = double.Parse(txtResult.Text);

                if (currentOperation == OperationState.add)
                {
                    result = firstNumber + secondNumber;
                }
                else if (currentOperation == OperationState.sub)
                {
                    result = firstNumber - secondNumber;
                }
                else if (currentOperation == OperationState.mul)
                {
                    result = firstNumber * secondNumber;
                }
                else if (currentOperation == OperationState.div)
                {
                    result = firstNumber / secondNumber;
                }

                txtResult.Text = result.ToString();
                currentState   = CalculatorState.firstNumberInput;
            }
        }
Esempio n. 4
0
 private void buttonCancel_Click(object sender, EventArgs e)
 {
     txtResult.Text = "";
     firstNumber    = 0;
     secondNumber   = 0;
     currentState   = CalculatorState.firstNumberInput;
 }
Esempio n. 5
0
        private void allOperationsButtons_click(object sender, EventArgs e)
        {
            if (txtResult.Text != "")
            {
                firstNumber = double.Parse(txtResult.Text);

                txtResult.Text = "";

                currentState = CalculatorState.secondNumberInput;

                Button currentButton = (Button)sender;

                if (currentButton.Name == "buttonPlus")
                {
                    currentOperation = OperationState.add;
                }
                else if (currentButton.Name == "buttonMinus")
                {
                    currentOperation = OperationState.sub;
                }
                else if (currentButton.Name == "buttonMultiply")
                {
                    currentOperation = OperationState.mul;
                }
                else if (currentButton.Name == "buttonDivision")
                {
                    currentOperation = OperationState.div;
                }
            }
        }
Esempio n. 6
0
 public CalculatorViewModel(INavigationService navigation)
 {
     _state            = CalculatorState.PopulatingFirstNumber;
     _currentOperation = Operation.None;
     _navigation       = navigation;
     SubscribeToMessage();
 }
        public override void DoDemo()
        {
            Console.WriteLine("===================[Begin Demo: " + DemoTitle + "]=====================");

            TestFixture.SetUp();
            TestFixture.RunTests();
            TestFixture.TearDown();

            var state = new CalculatorState();
            var proc  = new CalculatorProcessor(state);
            var disp  = new List <CalculatorDisplay>
            {
                new CalculatorDisplay(),
                new CalculatorDisplay(),
                new CalculatorDisplay(),
            };

            var calc = new Calculator(proc, disp.ToArray());

            Console.WriteLine("Running calculator with " + disp.Count + " displays");

            Console.WriteLine("Adding 10 ...");
            calc.Add(10);

            Console.WriteLine("Substracting 5 ...");
            calc.Substract(5);

            Console.WriteLine("===================[End Demo: " + DemoTitle + "]======================");
        }
Esempio n. 8
0
        private void Calculate()
        {
            var     first  = decimal.Parse(_firstNumber);
            var     second = decimal.Parse(_secondNumber);
            decimal result = 0;

            switch (_currentOperation)
            {
            case Operation.Add:
                result = first + second;
                break;

            case Operation.Subtract:
                result = first - second;
                break;

            case Operation.Divide:
                result = first / second;
                break;

            case Operation.Multiply:
                result = first * second;
                break;

            default:
                break;
            }
            DisplayText = result.ToString();
            _calculatorHistory.Add($"{_firstNumber} {GetOperationString()} {_secondNumber} = {result}");
            _currentOperation = Operation.None;
            _state            = CalculatorState.PopulatingFirstNumber;
            _firstNumber      = string.Empty;
            _secondNumber     = string.Empty;
        }
Esempio n. 9
0
        private void NumberButton_Clicked(object sender, EventArgs e)
        {
            if (!(sender is Button button))
            {
                return;
            }

            int.TryParse(button.Text, out int number);

            if (State == CalculatorState.Initial)
            {
                ResultLabel.Text = string.Empty;
                State            = CalculatorState.FistNumber;
            }
            else if (State == CalculatorState.SecondNumber && ResultLabel.Text == "0")
            {
                ResultLabel.Text = string.Empty;
            }

            ResultLabel.Text += number;

            var colors = new string[] { "#FFA500", "#CCFF55", "#AA3399" };
            var random = new Random();
            var index  = random.Next(3);
            var color  = colors[index];

            Resources["OperatorColor"] = Color.FromHex(color);
        }
Esempio n. 10
0
 private void ClearButton_Clicked(object sender, EventArgs e)
 {
     firstNumber      = 0;
     opr              = string.Empty;
     State            = CalculatorState.Initial;
     ResultLabel.Text = "";
 }
Esempio n. 11
0
        public void EnteringAnOperatorChangesTheStateToPostOperator()
        {
            sut = sut.EnterDigit('2');
            sut = sut.EnterOperator(new PlusOperator());

            Assert.IsInstanceOfType(sut, typeof(PostOperatorState));
        }
        public void EnteringTheEqualSignDisplaysTheResult()
        {
            sut = sut.EnterDigit('3');
            sut = sut.EnterDigit('3');
            sut = sut.EnterEqual();

            Assert.AreEqual("55", sut.Display);
        }
Esempio n. 13
0
 public decimal Multiply(decimal value)
 {
     if (Value == 0 && _state == CalculatorState.Cleared)
     {
         _state = CalculatorState.Active;
         return(Value = value);
     }
     return(Value *= value);
 }
        public void EnteringANewOperatorFollowedByADigitDisplaysTheDigit()
        {
            sut = sut.EnterDigit('3');
            sut = sut.EnterDigit('3');
            sut = sut.EnterOperator(new PlusOperator());
            sut = sut.EnterDigit('2');

            Assert.AreEqual("2", sut.Display);
        }
Esempio n. 15
0
 public decimal Divide(decimal value)
 {
     if (Value == 0 && _state == CalculatorState.Cleared)
     {
         _state = CalculatorState.Active;
         return(Value = value);
     }
     return(Value /= value);
 }
Esempio n. 16
0
 private void setRunningState()
 {
     lock (operationLock)
     {
         if (state == CalculatorState.Running)
         {
             throw new CalculationInvalidStateOperationException("Calculation", "Running", "Run");
         }
         state = CalculatorState.Running;
     }
 }
        public void FurtherOperatorsExecuteThePreviousCalculation()
        {
            sut = sut.EnterDigit('3');
            sut = sut.EnterDigit('3');
            sut = sut.EnterOperator(new PlusOperator());
            sut = sut.EnterDigit('2');
            sut = sut.EnterDigit('2');
            sut = sut.EnterEqual();

            Assert.AreEqual("77", sut.Display);
        }
Esempio n. 18
0
 private void PerformOperation(Operation operation)
 {
     if (operation == Operation.Equal &&
         !string.IsNullOrWhiteSpace(_firstNumber) &&
         !string.IsNullOrWhiteSpace(_secondNumber))
     {
         Calculate();
         return;
     }
     _currentOperation = operation;
     DisplayText       = string.Empty;
     _state            = CalculatorState.PopulatingSecondNumber;
 }
        public override void RunTests()
        {
            var state = new CalculatorState();
            var proc  = new CalculatorProcessor(state);
            var calc  = new Calculator(proc, _displays.Select(m => m.Object).ToArray());

            calc.Add(10);
            calc.Substract(5);

            foreach (var disp in _displays)
            {
                disp.VerifyAll();
            }
        }
Esempio n. 20
0
        private void OperatorButton_Clicked(object sender, EventArgs e)
        {
            if (!(sender is Button button))
            {
                return;
            }

            int.TryParse(ResultLabel.Text, out int number);

            if (State == CalculatorState.FistNumber)
            {
                firstNumber = number;
                State       = CalculatorState.SecondNumber;
                opr         = button.Text;

                ResultLabel.Text = "";
            }
        }
Esempio n. 21
0
            protected internal override void ClrAll(CalculatorContext context, Stack <string> stack)
            {
                Calculator ctxt = context.Owner;

                CalculatorState endState = context.State;

                context.ClearState();

                try
                {
                    ctxt.ClrAll();
                }
                finally
                {
                    context.State = endState;
                }



                return;
            }
Esempio n. 22
0
        private void CalculateButton_Clicked(object sender, EventArgs e)
        {
            if (State != CalculatorState.SecondNumber)
            {
                return;
            }

            int.TryParse(ResultLabel.Text, out int secondNumber);

            int result;

            switch (opr)
            {
            case "+":
                result = firstNumber + secondNumber;
                break;

            case "-":
                result = firstNumber - secondNumber;
                break;

            case "x":
                result = firstNumber * secondNumber;
                break;

            case "/":
                result = firstNumber / secondNumber;
                break;

            default:
                result = 0;
                break;
            }

            ResultLabel.Text = result.ToString();

            firstNumber = result;
            opr         = "";
            State       = CalculatorState.FistNumber;
        }
Esempio n. 23
0
 public CalculatorWrongStateActionException(CalculatorState currentState, CalculatorState targetState, Calculator.Action action)
 {
     CurrentState = currentState;
     TargetState  = targetState;
     Action       = action;
 }
Esempio n. 24
0
 public decimal Subtract(decimal value)
 {
     _state = CalculatorState.Active;
     return(Value -= value);
 }
Esempio n. 25
0
 public decimal Add(decimal value)
 {
     _state = CalculatorState.Active;
     return(Value += value);
 }
Esempio n. 26
0
 public CalculatorStateEventArgs(Calculator calculator, CalculatorState stage)
 {
     Calculator = calculator;
     State      = stage;
 }
Esempio n. 27
0
 public CalculatorModel()
 {
     Display = "0";
     calculatorState = CalculatorState.START;
 }
        public void EnteringADigitDisplaysThatDigit()
        {
            sut = sut.EnterDigit('2');

            Assert.AreEqual("2", sut.Display);
        }
Esempio n. 29
0
        private void start(Calculation calculation, bool doResume)
        {
            long totalCalcOperationCount   = 0;
            long preCalcOperationDoneCount = 0;

            calculatorSession = new CalculatorSession {
                PathNo = 1
            };
            if (doResume)
            {
                var calcResult = calculation.CalculationResult;
                foreach (string s in calcResult.Messages)
                {
                    messages.Add(s);
                }
                messages.Add("=====================================================");
                totalCalcOperationCount   = calcResult.TotalEmployeesCount;
                preCalcOperationDoneCount = calcResult.EmployeesCalculatedCount;
                progress.SetProgress(totalCalcOperationCount, preCalcOperationDoneCount);
                if (calcResult.LastCalculatedPath.HasValue)
                {
                    progress.SetLastCalculatedEmployee(calcResult.LastCalculatedEmployeeId, calcResult.LastCalculatedPath.Value);
                    calculatorSession.PathNo = calcResult.LastCalculatedPath.Value;
                }
                var engine = calculatorEngineFactory.Create();
                try
                {
                    calculatorSession.AddCalculationPoints(engine.GetCalculationPiontBy(calculation.Id));
                }
                finally
                {
                    calculatorEngineFactory.Release(engine);
                }
            }

            Policy policy = null;

            messages.Add(DateTime.Now + "شروع محاسبه  ");
            try
            {
                startTrigger.Set();
                CalculationCompletedSub = new DelegateHandler <CalculationCompleted>(e =>
                {
                    var engine = calculatorEngineFactory.Create();
                    try
                    {
                        engine.AddUpdateCalculationPoint(calculatorSession.CalculationPoints);
                        engine.UpdateCalculationResult(calculation, progress, this, messages);
                    }
                    finally
                    {
                        calculatorEngineFactory.Release(engine);
                    }
                });
                publisher.RegisterHandler(CalculationCompletedSub);

                rulsCompiledSub = new DelegateHandler <RulesCompiled>(e =>
                {
                    if (!doResume)
                    {
                        Task.Factory.StartNew(() =>
                        {
                            var engine = calculatorEngineFactory.Create();
                            try
                            {
                                engine.UpdateCompileResult(calculation.Id, e.CompileResult.LibraryText, e.Rules);
                            }
                            finally
                            {
                                calculatorEngineFactory.Release(engine);
                            }

                            messages.Add(DateTime.Now + "  قوانین کامپایل شدند");
                        });
                    }
                });
                publisher.RegisterHandler(rulsCompiledSub);

                publisher.RegisterHandler <JobIndexPointsReady>(jobIndexPointPersister);
                publisher.RegisterHandler <CalculationExceptionReady>(calculationExceptionPersister);
                publisher.RegisterHandler <CalculationCompleted>(jobIndexPointPersister);
                publisher.RegisterHandler <CalculationCompleted>(calculationExceptionPersister);
                publisher.RegisterHandler <CalculationForPathCompleted>(jobIndexPointPersister);
                publisher.RegisterHandler <PathPersisteCompleted>(this);

                Dictionary <int, IList <Employee> > employeesWithPath;
                Period period;
                fetchPolicyAndEmployees(calculation, doResume, calculatorSession.PathNo, out policy, out employeesWithPath, out period);
                deleteCalculationException(calculation);

                long currentCalcOperationCount = 0;
                foreach (var employees in employeesWithPath)
                {
                    currentCalcOperationCount = currentCalcOperationCount + employees.Value.Count();
                }

                if (!doResume)
                {
                    totalCalcOperationCount = currentCalcOperationCount;
                    progress.SetProgress(totalCalcOperationCount, 0);
                }

                messages.Add(DateTime.Now + "  تعداد " + currentCalcOperationCount + " عملیات محاسبه برای  " + calculation.EmployeeCount + " کارمند آماده می باشد");

                var currentCalcOperationDoneCount = preCalcOperationDoneCount;
                var pathCount = employeesWithPath.Count();

                foreach (var emlpoyees in employeesWithPath)
                {
                    calculatorSession.PathNo = emlpoyees.Key;

                    foreach (var employee in emlpoyees.Value)
                    {
                        try
                        {
                            if (doStop || doPause)
                            {
                                break;
                            }

                            var pointsHolder = calculateIndices(calculation, policy, period, employee, calculatorSession);
                            currentCalcOperationDoneCount++;
                            progress.SetProgress(totalCalcOperationCount, currentCalcOperationDoneCount);
                            addOrUpdateCalculationPoints(pointsHolder.CalculationPoints);
                            publisher.Publish(new JobIndexPointsReady(pointsHolder, calculation.Id, employee.Id, calculatorSession.PathNo));
                            progress.SetLastCalculatedEmployee(employee.Id, calculatorSession.PathNo);
                        }
                        catch (Exception ex)
                        {
                            publisher.Publish(new CalculationExceptionReady(calculation.Id, employee.Id, calculatorSession.PathNo, ex));
                            calculatorSession.HasEmployeeCalculationFailed = true;
                            messages.Add("*** خطا در محاسبه شاخص های کارمند " + employee.Id.EmployeeNo + " **** ");
                            var logServiceMngt = LogServiceFactory.Create();
                            try
                            {
                                var logService = logServiceMngt.GetService();
                                logService.AddEventLog("JobIndexPointCalculator_EmpId:" + employee.Id.EmployeeNo,
                                                       LogLevel.Error,
                                                       null, this.GetType().Name, "start", ex.Message, ex.StackTrace);
                                logService.AddExceptionLog(ex);
                            }
                            finally
                            {
                                LogServiceFactory.Release(logServiceMngt);
                            }
                        }
                    }

                    if (pathCount > calculatorSession.PathNo)
                    {
                        publisher.Publish(new CalculationForPathCompleted());
                        pathPersisterTrigger.WaitOne();
                    }

                    if (calculatorSession.HasEmployeeCalculationFailed)
                    {
                        break;
                    }
                }

                messages.Add(DateTime.Now + "  تعداد " + currentCalcOperationDoneCount + " عملیات محاسبه انجام شد");
                if (!(doStop || doPause))
                {
                    publisher.Publish(new CalculationCompleted());
                }
                else if (doStop)
                {
                    messages.Add(DateTime.Now + "  لغو محاسبه.");
                }
                else if (doPause)
                {
                    messages.Add(DateTime.Now + "  وقفه در محاسبه.");
                }
                if (doPause || doStop)
                {
                    var engine = calculatorEngineFactory.Create();
                    try
                    {
                        engine.AddUpdateCalculationPoint(calculatorSession.CalculationPoints);
                    }
                    finally
                    {
                        calculatorEngineFactory.Release(engine);
                    }
                }
                pauseTrigger.Set();
            }
            catch (Exception e)
            {
                startTrigger.Set();
                calculatorSession.HasEmployeeCalculationFailed = true;
                messages.Add(DateTime.Now + "در آماده سازی محاسبه با مشکل مواجه شده است");
                publisher.Publish(new CalculationCompleted());
            }
            finally
            {
                state = CalculatorState.Completed;
                if (policy != null)
                {
                    policy.Dispose();
                }
            }
        }
Esempio n. 30
0
 public void Clear()
 {
     Value  = 0;
     _state = CalculatorState.Cleared;
 }
 public void SetUp()
 {
     sut = new PostOperatorState("22", new PlusOperator());
 }