Example #1
0
        public void CompositeFlowArrives()
        {
            var testModel         = new IntFlowModel();
            var source            = new IntFlowSource();
            var composite         = new IntFlowComposite();
            var firstInComposite  = new IntFlowInToOut();
            var secondInComposite = new IntFlowInToOut();
            var sink = new IntFlowSink();

            testModel.Components = new IntFlowComponentCollection(source, composite, firstInComposite, secondInComposite, sink);

            source.SendForward      = testModel.CreateForward;
            source.ReceivedBackward = testModel.PrintReceivedBackward;
            sink.SendBackward       = testModel.CreateBackward;
            sink.ReceivedForward    = testModel.PrintReceivedForward;
            testModel.Combinator.ConnectOutWithIn(source, composite);
            testModel.Combinator.ConnectInWithIn(composite, firstInComposite);
            testModel.Combinator.ConnectOutWithIn(firstInComposite, secondInComposite);
            testModel.Combinator.ConnectOutWithOut(secondInComposite, composite);
            testModel.Combinator.ConnectOutWithIn(composite, sink);
            testModel.Combinator.CommitFlow();

            var simulator = new Simulator(testModel);             //Important: Call after all objects have been created

            simulator.SimulateStep();

            var flowCombinatorAfterStep   = (IntFlowCombinator)simulator.Model.Roots[0];
            var flowComponentsAfterStep   = ((IntFlowComponentCollection)simulator.Model.Roots[1]).Components;
            var sourceAfterStep           = (IntFlowSource)flowComponentsAfterStep[0];
            var compositeAfterStep        = (IntFlowComposite)flowComponentsAfterStep[1];
            var firstInCompositeAfterStep = (IntFlowInToOut)flowComponentsAfterStep[2];
            var sinkAfterStep             = (IntFlowSink)flowComponentsAfterStep[4];

            sourceAfterStep.Outgoing.Forward.Should().Be((Int)7);
            compositeAfterStep.Incoming.Forward.Should().Be((Int)7);
            compositeAfterStep.FlowIn.Outgoing.Forward.Should().Be((Int)7);
            firstInCompositeAfterStep.Incoming.Forward.Should().Be((Int)7);
            compositeAfterStep.FlowOut.Outgoing.Forward.Should().Be((Int)7);
            compositeAfterStep.Outgoing.Forward.Should().Be((Int)7);
            sinkAfterStep.Incoming.Forward.Should().Be((Int)7);
            sourceAfterStep.Outgoing.Backward.Should().Be(1);
        }
Example #2
0
        public void MergeFlowWorksWithComposite()
        {
            var testModel     = new IntFlowModel();
            var sourceOutside = new IntFlowSource();
            var sourceInside  = new IntFlowSource();
            var composite     = new IntFlowComposite();
            var way1Direct    = new IntFlowInToOut();
            var way2Direct    = new IntFlowInToOut();
            var sink          = new IntFlowSink();

            testModel.Components = new IntFlowComponentCollection(sourceOutside, sourceInside, composite, way1Direct, way2Direct, sink);

            sourceOutside.SendForward      = testModel.CreateForward;
            sourceOutside.ReceivedBackward = testModel.PrintReceivedBackward;
            sourceInside.SendForward       = testModel.CreateForward;
            sourceInside.ReceivedBackward  = testModel.PrintReceivedBackward;
            sink.SendBackward    = testModel.CreateBackward;
            sink.ReceivedForward = testModel.PrintReceivedForward;
            testModel.Combinator.ConnectOutWithIn(sourceOutside, composite);
            testModel.Combinator.ConnectInWithIn(composite, way1Direct);
            testModel.Combinator.ConnectOutWithIn(sourceInside, way2Direct);
            testModel.Combinator.ConnectOutsWithOut(new IFlowComponentUniqueOutgoing <Int, Int>[] { way1Direct, way2Direct }, composite);
            testModel.Combinator.ConnectOutWithIn(composite, sink);
            testModel.Combinator.CommitFlow();

            var simulator = new Simulator(testModel);             //Important: Call after all objects have been created

            simulator.SimulateStep();

            var flowCombinatorAfterStep = (IntFlowCombinator)simulator.Model.Roots[0];
            var flowComponentsAfterStep = ((IntFlowComponentCollection)simulator.Model.Roots[1]).Components;
            var sourceInsideAfterStep   = (IntFlowSource)flowComponentsAfterStep[1];
            var sourceOutsideAfterStep  = (IntFlowSource)flowComponentsAfterStep[0];
            var sinkAfterStep           = (IntFlowSink)flowComponentsAfterStep[5];

            sinkAfterStep.Incoming.Forward.Should().Be(7);
            sourceOutsideAfterStep.Outgoing.Backward.Should().Be(1);
            sourceInsideAfterStep.Outgoing.Backward.Should().Be(1);
        }
Example #3
0
		public void MergeFlowWorksWithComposite()
		{
			var testModel = new IntFlowModel();
			var sourceOutside = new IntFlowSource();
			var sourceInside = new IntFlowSource();
			var composite = new IntFlowComposite();
			var way1Direct = new IntFlowInToOut();
			var way2Direct = new IntFlowInToOut();
			var sink = new IntFlowSink();
			testModel.Components = new IntFlowComponentCollection(sourceOutside, sourceInside, composite, way1Direct, way2Direct, sink);

			sourceOutside.SendForward = testModel.CreateForward;
			sourceOutside.ReceivedBackward = testModel.PrintReceivedBackward;
			sourceInside.SendForward = testModel.CreateForward;
			sourceInside.ReceivedBackward = testModel.PrintReceivedBackward;
			sink.SendBackward = testModel.CreateBackward;
			sink.ReceivedForward = testModel.PrintReceivedForward;
			testModel.Combinator.ConnectOutWithIn(sourceOutside, composite);
			testModel.Combinator.ConnectInWithIn(composite, way1Direct);
			testModel.Combinator.ConnectOutWithIn(sourceInside, way2Direct);
			testModel.Combinator.ConnectOutsWithOut(new IFlowComponentUniqueOutgoing<Int, Int>[] { way1Direct, way2Direct }, composite);
			testModel.Combinator.ConnectOutWithIn(composite, sink);
			testModel.Combinator.CommitFlow();

			var simulator = new Simulator(testModel); //Important: Call after all objects have been created
			simulator.SimulateStep();

			var flowCombinatorAfterStep = (IntFlowCombinator)simulator.Model.Roots[0];
			var flowComponentsAfterStep = ((IntFlowComponentCollection)simulator.Model.Roots[1]).Components;
			var sourceInsideAfterStep = (IntFlowSource)flowComponentsAfterStep[1];
			var sourceOutsideAfterStep = (IntFlowSource)flowComponentsAfterStep[0];
			var sinkAfterStep = (IntFlowSink)flowComponentsAfterStep[5];
			sinkAfterStep.Incoming.Forward.Should().Be(7);
			sourceOutsideAfterStep.Outgoing.Backward.Should().Be(1);
			sourceInsideAfterStep.Outgoing.Backward.Should().Be(1);
		}
Example #4
0
		public void CompositeFlowArrives()
		{
			var testModel = new IntFlowModel();
			var source = new IntFlowSource();
			var composite = new IntFlowComposite();
			var firstInComposite = new IntFlowInToOut();
			var secondInComposite = new IntFlowInToOut();
			var sink = new IntFlowSink();
			testModel.Components = new IntFlowComponentCollection(source, composite, firstInComposite, secondInComposite, sink);

			source.SendForward = testModel.CreateForward;
			source.ReceivedBackward = testModel.PrintReceivedBackward;
			sink.SendBackward = testModel.CreateBackward;
			sink.ReceivedForward = testModel.PrintReceivedForward;
			testModel.Combinator.ConnectOutWithIn(source, composite);
			testModel.Combinator.ConnectInWithIn(composite, firstInComposite);
			testModel.Combinator.ConnectOutWithIn(firstInComposite, secondInComposite);
			testModel.Combinator.ConnectOutWithOut(secondInComposite, composite);
			testModel.Combinator.ConnectOutWithIn(composite, sink);
			testModel.Combinator.CommitFlow();

			var simulator = new Simulator(testModel); //Important: Call after all objects have been created
			simulator.SimulateStep();

			var flowCombinatorAfterStep = (IntFlowCombinator)simulator.Model.Roots[0];
			var flowComponentsAfterStep = ((IntFlowComponentCollection)simulator.Model.Roots[1]).Components;
			var sourceAfterStep = (IntFlowSource)flowComponentsAfterStep[0];
			var compositeAfterStep = (IntFlowComposite)flowComponentsAfterStep[1];
			var firstInCompositeAfterStep = (IntFlowInToOut)flowComponentsAfterStep[2];
			var sinkAfterStep = (IntFlowSink)flowComponentsAfterStep[4];
			sourceAfterStep.Outgoing.Forward.Should().Be((Int)7);
			compositeAfterStep.Incoming.Forward.Should().Be((Int)7);
			compositeAfterStep.FlowIn.Outgoing.Forward.Should().Be((Int)7);
			firstInCompositeAfterStep.Incoming.Forward.Should().Be((Int)7);
			compositeAfterStep.FlowOut.Outgoing.Forward.Should().Be((Int)7);
			compositeAfterStep.Outgoing.Forward.Should().Be((Int)7);
			sinkAfterStep.Incoming.Forward.Should().Be((Int)7);
			sourceAfterStep.Outgoing.Backward.Should().Be(1);
		}