コード例 #1
0
        public void ForkChildren()
        {
            var a = Helpers.BuildActivity();
            var f = new ForkBlock(a, 1);

            var wi = new WorkItem(Helpers.Integer(), Helpers.Integer(), 0, WorkflowType.Fork, Helpers.String())
            {
                InputId = Helpers.Integer()
            };
            _navigator.Find(wi.WorkflowPath).Returns(f);
            _dataStore.SplitAndGetIds(wi.InputId.Value).Returns(new[] {1, 2});

            wi.Id = Helpers.Integer();

            var items = _workItemBuilder.BuildChildren(wi).ToArray();
            var item1 = items[0];
            var item2 = items[1];

            Assert.Equal(2, items.Count());

            Assert.Equal(wi.JobId, item1.JobId);
            Assert.Equal(wi.Id, item1.ParentId);
            Assert.Equal(0, item1.Order);
            Assert.Equal(1, item1.InputId);
            Assert.Equal(WorkflowType.Activity, item1.Type);

            Assert.Equal(wi.JobId, item2.JobId);
            Assert.Equal(wi.Id, item2.ParentId);
            Assert.Equal(1, item2.Order);
            Assert.Equal(2, item2.InputId);
            Assert.Equal(WorkflowType.Activity, item2.Type);

            _navigator.Received(2).Path(a);
        }
コード例 #2
0
        public void Test()
        {
            var a1 = Helpers.BuildActivity();
            var a2 = Helpers.BuildActivity();
            var a3 = Helpers.BuildActivity();
            var a4 = Helpers.BuildActivity();
            var a5 = Helpers.BuildActivity();
            var c1 = new SequenceBlock(new[] {a1});
            var f = new ForkBlock(a2, 1);
            var p = new ParallelBlock(new[] {a4, a5}, 1);
            var c2 = new SequenceBlock(new WorkflowBlock[] {f, c1, a3, p});

            var navigator = new WorkflowPathNavigator(c2);

            Assert.Equal("Sequence[0].Sequence[1].Activity[0]", navigator.Path(a1));
            Assert.Equal("Sequence[0].Fork[0].Activity[0]", navigator.Path(a2));
            Assert.Equal("Sequence[0].Activity[2]", navigator.Path(a3));
            Assert.Equal("Sequence[0].Sequence[1]", navigator.Path(c1));
            Assert.Equal("Sequence[0].Fork[0]", navigator.Path(f));
            Assert.Equal("Sequence[0]", navigator.Path(c2));
            Assert.Equal("Sequence[0].Parallel[3]", navigator.Path(p));
            Assert.Equal("Sequence[0].Parallel[3].Activity[0]", navigator.Path(a4));
            Assert.Equal("Sequence[0].Parallel[3].Activity[1]", navigator.Path(a5));

            Assert.Equal(a1, navigator.Find("Sequence[0].Sequence[1].Activity[0]"));
            Assert.Equal(a2, navigator.Find("Sequence[0].Fork[0].Activity[0]"));
            Assert.Equal(a3, navigator.Find("Sequence[0].Activity[2]"));
            Assert.Equal(c1, navigator.Find("Sequence[0].Sequence[1]"));
            Assert.Equal(f, navigator.Find("Sequence[0].Fork[0]"));
            Assert.Equal(c2, navigator.Find("Sequence[0]"));

            Assert.Equal(p, navigator.Find("Sequence[0].Parallel[3]"));
            Assert.Equal(a4, navigator.Find("Sequence[0].Parallel[3].Activity[0]"));
            Assert.Equal(a5, navigator.Find("Sequence[0].Parallel[3].Activity[1]"));
        }
コード例 #3
0
        public async Task TestFork()
        {
            Func<int, int> twice = x => 2*x;

            var activity = new ActivityBlock(twice);
            var fork = new ForkBlock(activity, 2);

            var workflow = new Workflow<int[], IEnumerable<int>>("test", fork);
            var output = await WorkflowRunner.Run(workflow, new[] {1, 2, 3});
            //int[] would work but not recommended

            Assert.Equal(new[] {2, 4, 6}, output);
        }
コード例 #4
0
        public void MapConstruction()
        {
            Func<int, int> pow = x => x*x;

            var map = new ForkBlock(new ActivityBlock(pow), 2);

            Assert.Equal(WorkflowType.Fork, map.Type);
            Assert.Equal(2, map.MaxWorkers);
            Assert.Equal(new[] {typeof (int)}, map.InputTypes);
            Assert.Equal(typeof (IEnumerable<int>), map.OutputType);

            // test method with signature void(void)
            map = new ForkBlock(new ActivityBlock(new Action(delegate { })), 1);
            Assert.Equal(typeof (void), map.OutputType);
        }
コード例 #5
0
        public async Task TestLargeChunckOfFork()
        {
            Func<int, int> identity = x => x;

            var activity = new ActivityBlock(identity);
            var fork = new ForkBlock(activity, 1);

            var workflow = new Workflow<IEnumerable<int>, IEnumerable<int>>("test", fork);
            var input = Enumerable.Repeat(1, 1000).ToArray();
            var output = await WorkflowRunner.Run(workflow, input);
            //int[] would work but not recommended

            Assert.Equal(input, output);
        }
コード例 #6
0
        public async Task TestChainedFork()
        {
            Func<int, int> identity = x => x;

            var activity = new ActivityBlock(identity);
            var fork = new ForkBlock(new ForkBlock(new ForkBlock(activity, 1), 1), 1);

            var workflow = new Workflow<int[][][], IEnumerable<IEnumerable<IEnumerable<int>>>>("test", fork);
            var output =
                await
                    WorkflowRunner.Run(workflow, new[] {new[] {new[] {1}}});

            Assert.Equal(new[] {1}, output.SelectMany(_ => _).SelectMany(_ => _));
        }