Example #1
0
        public void TestProductRecursively()
        {
            ImmediateScheduler.Instance.With(_ =>
            {
                MainViewModel main             = new MainViewModel();
                OutputNodeViewModel outputNode =
                    main.NetworkViewModel.Nodes.Items.OfType <OutputNodeViewModel>().First();

                ProductNodeViewModel productNodeA = new ProductNodeViewModel();
                main.NetworkViewModel.Nodes.Add(productNodeA);
                main.NetworkViewModel.Connections.Add(
                    main.NetworkViewModel.ConnectionFactory(outputNode.ResultInput, productNodeA.Output));

                ProductNodeViewModel productNodeB = new ProductNodeViewModel();
                main.NetworkViewModel.Nodes.Add(productNodeB);
                main.NetworkViewModel.Connections.Add(
                    main.NetworkViewModel.ConnectionFactory(productNodeA.Input1, productNodeB.Output));

                main.NetworkViewModel.Connections.Add(
                    main.NetworkViewModel.ConnectionFactory(productNodeB.Input1, productNodeA.Output));

                Assert.IsFalse(main.NetworkViewModel.LatestValidation.IsValid);
                Assert.AreEqual(null, outputNode.ResultInput.Value);
            });
        }
Example #2
0
        public void TestLongChain()
        {
            new TestScheduler().With(_ =>
            {
                MainViewModel main             = new MainViewModel();
                OutputNodeViewModel outputNode =
                    main.NetworkViewModel.Nodes.Items.OfType <OutputNodeViewModel>().First();

                ConstantNodeViewModel constantNode = new ConstantNodeViewModel();
                main.NetworkViewModel.Nodes.Add(constantNode);

                ProductNodeViewModel productNode = new ProductNodeViewModel();
                main.NetworkViewModel.Nodes.Add(productNode);

                DivisionNodeViewModel divisionNode = new DivisionNodeViewModel();
                main.NetworkViewModel.Nodes.Add(divisionNode);

                SubtractionNodeViewModel subtractionNode = new SubtractionNodeViewModel();
                main.NetworkViewModel.Nodes.Add(subtractionNode);

                SumNodeViewModel sumNode = new SumNodeViewModel();
                main.NetworkViewModel.Nodes.Add(sumNode);

                main.NetworkViewModel.Connections.Add(
                    main.NetworkViewModel.ConnectionFactory(subtractionNode.Input1, constantNode.Output));
                main.NetworkViewModel.Connections.Add(
                    main.NetworkViewModel.ConnectionFactory(sumNode.Input1, constantNode.Output));
                main.NetworkViewModel.Connections.Add(
                    main.NetworkViewModel.ConnectionFactory(divisionNode.Input1, subtractionNode.Output));
                main.NetworkViewModel.Connections.Add(
                    main.NetworkViewModel.ConnectionFactory(productNode.Input1, divisionNode.Output));
                main.NetworkViewModel.Connections.Add(
                    main.NetworkViewModel.ConnectionFactory(productNode.Input2, sumNode.Output));
                main.NetworkViewModel.Connections.Add(
                    main.NetworkViewModel.ConnectionFactory(outputNode.ResultInput, productNode.Output));

                constantNode.ValueEditor.Value = 10;
                ((IntegerValueEditorViewModel)subtractionNode.Input2.Editor).Value = 2;
                ((IntegerValueEditorViewModel)sumNode.Input2.Editor).Value         = 4;
                ((IntegerValueEditorViewModel)divisionNode.Input2.Editor).Value    = 4;

                //TODO: this is hacky, but test fails without it because the propagation updates are
                //scheduled after the assertion. Ideally, this should be resolved by using TestScheduler
                //but it isn't. However, it seems this is only a problem in tests.
                _.AdvanceByMs(100);

                Assert.AreEqual(28, outputNode.ResultInput.Value);
                Assert.IsTrue(main.NetworkViewModel.LatestValidation.IsValid);
            });
        }
        public void TestLongChain()
        {
            MainViewModel       main       = new MainViewModel();
            OutputNodeViewModel outputNode = main.NetworkViewModel.Nodes.Items.OfType <OutputNodeViewModel>().First();

            ConstantNodeViewModel constantNode = new ConstantNodeViewModel();

            main.NetworkViewModel.Nodes.Add(constantNode);

            ProductNodeViewModel productNode = new ProductNodeViewModel();

            main.NetworkViewModel.Nodes.Add(productNode);

            DivisionNodeViewModel divisionNode = new DivisionNodeViewModel();

            main.NetworkViewModel.Nodes.Add(divisionNode);

            SubtractionNodeViewModel subtractionNode = new SubtractionNodeViewModel();

            main.NetworkViewModel.Nodes.Add(subtractionNode);

            SumNodeViewModel sumNode = new SumNodeViewModel();

            main.NetworkViewModel.Nodes.Add(sumNode);

            main.NetworkViewModel.Connections.Add(main.NetworkViewModel.ConnectionFactory(subtractionNode.Input1, constantNode.Output));
            main.NetworkViewModel.Connections.Add(main.NetworkViewModel.ConnectionFactory(sumNode.Input1, constantNode.Output));
            main.NetworkViewModel.Connections.Add(main.NetworkViewModel.ConnectionFactory(divisionNode.Input1, subtractionNode.Output));
            main.NetworkViewModel.Connections.Add(main.NetworkViewModel.ConnectionFactory(productNode.Input1, divisionNode.Output));
            main.NetworkViewModel.Connections.Add(main.NetworkViewModel.ConnectionFactory(productNode.Input2, sumNode.Output));
            main.NetworkViewModel.Connections.Add(main.NetworkViewModel.ConnectionFactory(outputNode.ResultInput, productNode.Output));

            constantNode.ValueEditor.Value = 10;
            ((IntegerValueEditorViewModel)subtractionNode.Input2.Editor).Value = 2;
            ((IntegerValueEditorViewModel)sumNode.Input2.Editor).Value         = 4;
            ((IntegerValueEditorViewModel)divisionNode.Input2.Editor).Value    = 4;

            Assert.AreEqual(28, outputNode.ResultInput.Value);
            Assert.IsTrue(main.NetworkViewModel.LatestValidation.IsValid);
        }