예제 #1
0
    public MainWindow()
    {
      InitializeComponent();

      this.DataContext = viewModel;
      containerManager = new CalculatorManager(viewModel);
      containerManager.InitializeContainer();
     // cm.RefreshExensions();

      BindingOperations.EnableCollectionSynchronization(viewModel.CalcAddInOperators, viewModel.syncCalcAddInOperators);
      BindingOperations.EnableCollectionSynchronization(viewModel.ActivatedExtensions, viewModel.syncActivatedExtensions);

    }
예제 #2
0
        public void Requirement1()
        {
            var calcManager = new CalculatorManager(new CalculatorConfigModel()
            {
                MaximumNumber = int.MaxValue
            });
            var request = _parseManager.ParseRequest("1,5000");
            var answer  = calcManager.ProcessCalculations(request);

            Assert.AreEqual(answer, 5001);

            var request1 = _parseManager.ParseRequest("5,tytyt");
            var answer1  = calcManager.ProcessCalculations(request1);

            Assert.AreEqual(answer1, 5);
        }
예제 #3
0
        public void Execute_PrintsIntroMessage()
        {
            var calcStub = new Mock <ICalculator>();

            calcStub.Setup(x => x.Calculate(It.IsAny <string>())).Returns(new CalculationResult());
            var    consoleMock          = new ConsoleWrapperFake();
            string expectedIntroMessage = "Enter numbers separated by commas or new line (CTRL+ENTER)."
                                          + Environment.NewLine
                                          + "When done, press ENTER.";

            var calcManager = new CalculatorManager(calcStub.Object, consoleMock);

            calcManager.Execute();

            Assert.Contains(expectedIntroMessage, consoleMock.WriteLog);
        }
예제 #4
0
        public void Execute_CalculatorComputesResult_PrintsFormula()
        {
            string formula  = "1+2+3=6";
            var    calcStub = new Mock <ICalculator>();

            calcStub.Setup(x => x.Calculate(It.IsAny <string>())).Returns(new CalculationResult {
                Formula = formula
            });
            var    consoleMock           = new ConsoleWrapperFake();
            string expectedResultMessage = $"Formula: {formula}";

            var calcManager = new CalculatorManager(calcStub.Object, consoleMock);

            calcManager.Execute();

            Assert.Contains(expectedResultMessage, consoleMock.WriteLog);
        }
예제 #5
0
        public void Execute_CalculatorComputesResult_PrintsResult()
        {
            int result   = 123;
            var calcStub = new Mock <ICalculator>();

            calcStub.Setup(x => x.Calculate(It.IsAny <string>())).Returns(new CalculationResult {
                Result = result
            });
            var    consoleMock           = new ConsoleWrapperFake();
            string expectedResultMessage = $"Result: {result}";

            var calcManager = new CalculatorManager(calcStub.Object, consoleMock);

            calcManager.Execute();

            Assert.Contains(expectedResultMessage, consoleMock.WriteLog);
        }
        public CalculatorAddSumSteps(FeatureContext featureContext, ScenarioContext scenarioContext)
        {

            _featureContext = featureContext;
            _scenarioContext = scenarioContext;

            _memories = _featureContext.Get<Memories>("Memories");

            if (_memories == null)
            {

                _memories=new Memories();
                _memories.Numbers=new List<int>();
                _featureContext.Add("Memories", _memories);

            }

            _calculatorManager = new CalculatorManager(_memories);

        }
예제 #7
0
        static void Main(string[] args)
        {
            Console.WriteLine("Command");
            Console.WriteLine("Calculator Example\n");

            var calculator        = new Calculator();
            var calculatorManager = new CalculatorManager();

            calculatorManager.Execute(new CalculatorOperation(calculator, Add, 1000));
            calculatorManager.Execute(new CalculatorOperation(calculator, Subtract, 200));
            calculatorManager.Execute(new CalculatorOperation(calculator, Multiply, 2));
            calculatorManager.Execute(new CalculatorOperation(calculator, Divide, 4));

            calculatorManager.Undo();
            calculatorManager.Undo();
            calculatorManager.Execute(new CalculatorOperation(calculator, Multiply, 3));
            calculatorManager.Execute(new CalculatorOperation(calculator, Divide, 5));
            calculatorManager.Undo();
            calculatorManager.Redo();
        }
예제 #8
0
        public void Execute_EnteringNewLineKey_AddsNewLineCharacterToUserInputString()
        {
            var calcMock = new Mock <ICalculator>();

            calcMock.Setup(x => x.Calculate(It.IsAny <string>())).Returns(new CalculationResult());
            var consoleStub = new ConsoleWrapperFake();

            consoleStub.KeysToRead.Clear();
            consoleStub.KeysToRead.Enqueue(TestHelpers.ConsoleKeyInfoFromChar('1'));
            consoleStub.KeysToRead.Enqueue(TestHelpers.ConsoleKeyInfoFromChar(','));
            consoleStub.KeysToRead.Enqueue(TestHelpers.ConsoleKeyInfoFromChar('2'));
            var newLineKey = new ConsoleKeyInfo('\n', ConsoleKey.Enter, false, false, false);

            consoleStub.KeysToRead.Enqueue(newLineKey);
            consoleStub.KeysToRead.Enqueue(TestHelpers.ConsoleKeyInfoFromChar('3'));
            consoleStub.KeysToRead.Enqueue(consoleStub.EnterKey);
            string expectedInputString = "1,2\n3";

            var calcManager = new CalculatorManager(calcMock.Object, consoleStub);

            calcManager.Execute();

            calcMock.Verify(x => x.Calculate(expectedInputString), Times.Once());
        }
 private void Start()
 {
     calcManager = GetComponentInParent <CalculatorManager>();
 }
예제 #10
0
        public void CalculatirManager()
        {
            var calculatorManager = new CalculatorManager();

            Assert.AreEqual(calculatorManager.CalculateLoan(200, 10), 260.92);
        }
 public void Setup()
 {
     calculator = new CalculatorManager();
 }
예제 #12
0
        static void Main(string[] args)
        {
            CalculatorManager bllCalculate = new CalculatorManager();

            string oneAdd;
            string oneSub;
            string oneMul;
            string oneDivid;
            string oneRemainder;

            Console.WriteLine("Welcome to Malkavian's calculator!\nIf problem occurs during use, please call QQ:635109543");
            string one1;
            string calculateContinue;

            do
            {
                Console.WriteLine("进行历史查询输入s最新10条,如不需要请回车");
                string history = Console.ReadLine();
                if (isS(history))
                {
                    DataTable ds = bllCalculate.GetAllHistory();

                    for (var j = 0; j < ds.Rows.Count; j++)
                    {
                        Console.Write("\0\0\0{0}{1}\0{2}\n运算结果:{3}\n", ds.Rows[j][0].ToString().Trim(), ds.Rows[j][2].ToString().Trim(), ds.Rows[j][1].ToString().Trim(), ds.Rows[j][3].ToString().Trim());

                        //for (int i = 0; i < ds.Columns.Count; i++)
                        //{

                        //}
                    }
                }
                Console.WriteLine("请输入一个数进行计算:");

                do
                {
                    one1 = Console.ReadLine();
                    Console.WriteLine("字符数{0}", one1.Length);/*.Length获取字符个数从1开始数.*/
                }while (!isNumeric(one1) || !islenth(one1));



                decimal one2 = Convert.ToDecimal(one1);
                Console.WriteLine("你输入的数字为:{0}", one2);

                Console.WriteLine("请输入进行的运算:+ - * / %");
                string choice;
                do
                {
                    choice = Console.ReadLine();
                }while (!isSym(choice));
                switch (choice)
                {
                case "+":
                    Console.WriteLine("请再输入一个数:");
                    do
                    {
                        oneAdd = Console.ReadLine();
                    }while (!isNumeric(oneAdd) || !islenth(oneAdd));
                    decimal twoAdd = Convert.ToDecimal(oneAdd);
                    decimal sum    = one2 + twoAdd;
                    Console.WriteLine("{0}{1}{2}=\n{3}", one1, choice, oneAdd, sum);
                    if (bllCalculate.ADDResult(one1, oneAdd, choice, sum.ToString()) > 0)
                    {
                        Console.WriteLine("数据进入SQL添加成功");
                    }
                    break;

                case "-":
                    Console.WriteLine("请再输入一个数:");
                    do
                    {
                        oneSub = Console.ReadLine();
                    }while (!isNumeric(oneSub) || !islenth(oneSub));
                    decimal twoSub = Convert.ToDecimal(oneSub);
                    decimal sub    = one2 - twoSub;
                    Console.WriteLine("{0}{1}{2}=\n{3}", one1, choice, oneSub, sub);
                    if (bllCalculate.ADDResult(one1, oneSub, choice, sub.ToString()) > 0)
                    {
                        Console.WriteLine("数据进入SQL添加成功");
                    }
                    break;

                case "*":
                    Console.WriteLine("请再输入一个数:");
                    do
                    {
                        oneMul = Console.ReadLine();
                    }while (!isNumeric(oneMul) || !islenth(oneMul));
                    decimal twoMul = Convert.ToDecimal(oneMul);
                    decimal Mul    = one2 * twoMul;
                    Console.WriteLine("{0}{1}{2}=\n{3}", one1, choice, oneMul, Mul);
                    if (bllCalculate.ADDResult(one1, oneMul, choice, Mul.ToString()) > 0)
                    {
                        Console.WriteLine("数据进入SQL添加成功");
                    }
                    break;

                case "/":
                    Console.WriteLine("请再输入一个数:");
                    do
                    {
                        oneDivid = Console.ReadLine();
                    }while (!isNumeric(oneDivid) || !isZero(oneDivid) || !islenth(oneDivid));
                    decimal twoDivid = Convert.ToDecimal(oneDivid);
                    if (twoDivid == 0)
                    {
                        Console.WriteLine("警告:除数不能为0!!");
                    }
                    else
                    {
                        decimal Divid = one2 / twoDivid;
                        Console.WriteLine("{0}{1}{2}=\n{3}", one1, choice, oneDivid, Divid);
                        if (bllCalculate.ADDResult(one1, oneDivid, choice, Divid.ToString()) > 0)
                        {
                            Console.WriteLine("数据进入SQL添加成功");
                        }
                    }


                    break;

                case "%":
                    Console.WriteLine("请再输入一个数:");
                    do
                    {
                        oneRemainder = Console.ReadLine();
                    }while (!isNumeric(oneRemainder) || !isZero(oneRemainder) || !islenth(oneRemainder));
                    decimal twoRemainder = Convert.ToDecimal(oneRemainder);
                    if (twoRemainder == 0)
                    {
                        Console.WriteLine("警告:对0取余!!");
                    }
                    else
                    {
                        decimal Remainder = one2 % twoRemainder;
                        Console.WriteLine("{0}{1}{2} 的余数为\n{3}", one1, choice, oneRemainder, Remainder);
                        if (bllCalculate.ADDResult(one1, oneRemainder, choice, Remainder.ToString()) > 0)
                        {
                            Console.WriteLine("数据进入SQL添加成功");
                        }
                    }


                    break;

                default:
                    Console.WriteLine("输入格式错误!请检查");
                    break;
                }
                Console.WriteLine("输入q退出");


                calculateContinue = Console.ReadLine();
            }while (isCalculteContinu(calculateContinue));


            Console.WriteLine("谢谢使用!");
        }
예제 #13
0
        //normalde AutoFixture olmasaydı (SUT) CalculatorManager yukarıda constructor da tanımlanacaktı. Yukarıda örneği mevcut
        public void MaxInt_Degerinden_Negative_Rakam_cikartildiginda_Hata_Patlamalidir(int number, CalculatorManager calculatorManager)
        {
            Action action = () => calculatorManager.SubtractFromMaxInt(number);

            //FluentAssertion
            action.Should().Throw <OverflowException>();
        }
예제 #14
0
        public static void Main(string[] args)
        {
            CalculatorManager _manager = CalculatorManager.Instance;

            _manager.ShowMenu();
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var Calc = new CalculatorManager();

            var inputCode    = CodeTextBox.Text;
            var lines        = inputCode.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
            var names        = new List <string>();
            var additionCode = "";
            int idx          = -1;

            for (int i = 0; i < lines.Length; i++)
            {
                var regex = Regex.Match(lines[i], "^\\s*>\\s*(.*?)\\s*=");
                if (regex.Success)
                {
                    names.Add($"{Regex.Replace(regex.Groups[1].Value, "[[][]]\\s+", "")}"); idx++;
                    additionCode += "\n" + $"Calc.AddNewValue({names[idx]});";
                }
            }

            inputCode = Regex.Replace(inputCode, "out:", "Calc.StringAdd:");
            var worker = new CodeWorker(inputCode + "\n");

            worker.AddNewRule("^\\s*>", "double");
            worker.AddNewRule("//.*?$", "");
            worker.AddNewRule("while ", "while (");
            worker.AddNewRule("for ", "for (");
            worker.AddNewRule("if ", "if (");
            worker.AddNewRule(":\\s*$", ") {");
            worker.AddNewRule(";\\s*$", "}");
            worker.AddNewRule("exit|quit|stop", "goto end");
            worker.AddNewRule("for [(]\\s*", "for (int ");

            foreach (Match m in Regex.Matches(inputCode, "^.*?([<].*?[>]).*?$", RegexOptions.Multiline))
            {
                var arrayItems = m.Groups[1].Value;
                worker.AddNewRule(new ArrayQuotesWorker()
                {
                    InputString = arrayItems
                });
            }

            foreach (Match m in Regex.Matches(inputCode, "^\\s*(Calc.StringAdd:.*?)\\s*.\\s*$", RegexOptions.Multiline))
            {
                var outItems = m.Groups[1].Value;
                worker.AddNewRule(new OutFunctionWorker()
                {
                    InputString = outItems
                });
            }

            worker.AddNewRule("\n+", ";\n");
            worker.AddNewRule("{;", "{");
            worker.AddNewRule("};", ";}");

            worker.ProcessString();
            inputCode = worker.WorkingString;
            inputCode = Regex.Replace(inputCode, "[)][.]|[.][)]", ")");
            inputCode = Regex.Replace(inputCode, "[)]\\s*}", ");}");
            inputCode = Regex.Replace(inputCode, "\\s*}", ";}");

            inputCode = $"Calc.Value = 1; {Calc.CorrectedExpression(inputCode)}" + additionCode;

            try
            {
                using (var sandBox = new Sandbox())
                {
                    var d = CodeGenerator.CreateCode <double>
                                (sandBox,
                                CS.Compiler,
                                inputCode, null, null,
                                CodeParameter.Create("Calc", Calc
                                                     ));

                    d.Execute(Calc);
                }
                OutputTextBox.Text = Calc.StringValue;

                var values = Calc.Values;
                for (int i = 0; i < names.Count; i++)
                {
                    Calc.AddVariable(names[i], values[i]);
                }

                Vars.ItemsSource = Calc.Variables;
            }
            catch
            {
                MessageBox.Show(inputCode);
            }
        }
예제 #16
0
 public CalculatorServices()
 {
     _calculatorManager = new CalculatorManager();
 }
예제 #17
0
        static void Main(string[] args)
        {
            var calcManager = new CalculatorManager(new Calculator(new InputParser()), new ConsoleWrapper());

            calcManager.Execute();
        }
예제 #18
0
 public MainWindow()
 {
     InitializeComponent();
     FillOperationsComboBoxWithSymbols();
     calcManager = new CalculatorManager();
 }
예제 #19
0
        public void AddTest()
        {
            CalculatorManager cm = new CalculatorManager();

            // null check
            try
            {
                cm.Add(null);
                Assert.Fail("FAIL:  NULL value not handled properly.");
            }
            catch (ArgumentException)
            {
                // Pass... should throw an ArgumentException
            }
            catch
            {
                Assert.Fail("FAIL:  NULL value not handled properly.");
            }

            // Requirement 1:  Support two numbers

            Assert.AreEqual(cm.Add(""), 0);        // test for empty string
            Assert.AreEqual(cm.Add("20"), 20);
            Assert.AreEqual(cm.Add("1,500"), 501); // test two numbers
            Assert.AreEqual(cm.Add("5,tytyt"), 5);
            Assert.AreEqual(cm.Add("5.2,5"), 5);   // test that decimals don't break anything
                                                   // Assert.AreEqual(cm.Add("5,2,3"), 7); // three or more values not allowed  (REMOVED for Requirement 2)

            // Requirement 2:  Support unlimited numbers

            Assert.AreEqual(cm.Add("1,2,3,4,5,6,7,8,9,10,11,12"), 78);

            // Requirement 3:  Support a newline character as an alternative delimiter

            Assert.AreEqual(cm.Add("1\n2,3"), 6);
            Assert.AreEqual(cm.Add("1\n2,3\n5"), 11);

            CalculatorManager cmNeg = new CalculatorManager(false);  // For Requirement 3b

            // Requirement 4:  Deny negative numbers
            try
            {
                // Requirement 3b: Toggle whether to deny negative numbers
                Assert.AreEqual(cmNeg.Add("-5,-2,-3"), -10);
                cm.Add("-5,-2,-3");

                Assert.Fail("FAIL:  Negative values not handled properly.");
            }
            catch (ArgumentException)
            {
                // Pass... should throw an ArgumentException
            }
            catch
            {
                Assert.Fail("FAIL:  Negative values not handled properly.");
            }

            // Requirement 5:  Ignore any number greater than 1000

            Assert.AreEqual(cm.Add("2,1001,6"), 8);

            // Requirement 6:  Support 1 custom single character length delimiter

            Assert.AreEqual(cm.Add("//;\n2;5"), 7);

            // Requirement 7:  Support 1 custom delimiter of any length

            Assert.AreEqual(cm.Add("//[***]\n11***22***33"), 66);

            // Requirement 8:  Support 1 custom delimiter of any length

            Assert.AreEqual(cm.Add("//[*][!!][r9r]\n11r9r22*33!!44"), 110);

            // TODO:  Add more test cases for each requirement
        }