public void GetPi_Expression()
        {
            var context = new WorkflowContext();

            context.Variables.Add(new Variable <double> {
                VariableName = "sum", Value = 1.0
            });
            context.Variables.Add(new Variable <double> {
                VariableName = "p", Value = 1.0
            });

            var wf       = new SequentialWorkflow();
            var forRange = new ForRange {
                Start = 3, Count = 50, Step = 2
            };

            forRange.Activities.Add(new Expression {
                Text = "p *= -3"
            });
            forRange.Activities.Add(new Expression {
                Text = "sum += 1 / (i * p)"
            });
            wf.Activities.Add(forRange);
            wf.Activities.Add(new Expression {
                Text = "pi = Math.Sqrt(12) * sum"
            });

            wf.Execute(context);

            AssertNearlyEqual(Math.PI, context.Variables.Get <double>("pi"));
        }
        public void GetPi_Methods()
        {
            var context = new WorkflowContext();

            context.Variables.Add(new Variable <double> {
                VariableName = "sum", Value = 1.0
            });
            context.Variables.Add(new Variable <double> {
                VariableName = "p", Value = 1.0
            });

            var wf       = new SequentialWorkflow();
            var forRange = new ForRange {
                Start = 3, Count = 50, Step = 2
            };

            forRange.Activities.Add(new InvokeMethod {
                Type = typeof(SequentialWorkflowTest), MethodName = "NextP"
            });
            forRange.Activities.Add(new InvokeMethod {
                Type = typeof(SequentialWorkflowTest), MethodName = "AddTerm"
            });
            wf.Activities.Add(forRange);
            wf.Activities.Add(new InvokeMethod {
                Type = typeof(SequentialWorkflowTest), MethodName = "Sqrt12"
            });

            wf.Execute(context);

            AssertNearlyEqual(Math.PI, context.Variables.Get <double>("pi"));
        }
        public void GetSqrt_Expression()
        {
            var context = new WorkflowContext();

            context.Variables.Add(new Variable <double> {
                VariableName = "a", Value = 5.0
            });

            var wf = new SequentialWorkflow();

            wf.Activities.Add(new Expression {
                Text = "x = a"
            });
            var forRange = new ForRange {
                Count = 100
            };

            forRange.Activities.Add(new Expression {
                Text = "xi = (x + a / x) / 2"
            });
            var ifReturn = new If {
                Condition = "x == xi"
            };

            ifReturn.Activities.Add(new Return());
            forRange.Activities.Add(ifReturn);
            forRange.Activities.Add(new Expression {
                Text = "x = xi"
            });
            wf.Activities.Add(forRange);

            wf.Execute(context);

            AssertNearlyEqual(Math.Sqrt(5.0), context.Variables.Get <double>("x"));
        }
示例#4
0
        void ReplayButton_Click(object sender, RoutedEventArgs e)
        {
            ReplayButton.IsEnabled = false;

            Task.Run(() =>
            {
                workflow.Execute(new WorkflowContext());

                Dispatcher.InvokeAsync(() => ReplayButton.IsEnabled = true);
            });
        }