Exemplo n.º 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);
            });
        }
        public void TestOutputNodeOnly()
        {
            MainViewModel       main       = new MainViewModel();
            OutputNodeViewModel outputNode = main.NetworkViewModel.Nodes.Items.OfType <OutputNodeViewModel>().First();

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

            DivisionNodeViewModel divisionNode = new DivisionNodeViewModel();

            main.NetworkViewModel.Nodes.Add(divisionNode);
            main.NetworkViewModel.Connections.Add(main.NetworkViewModel.ConnectionFactory(outputNode.ResultInput, divisionNode.Output));

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

            outputNode.ResultInput.ValueChanged.Zip(Observable.Range(0, 100), (val, i) => (value: val, index: i)).Subscribe(t =>
            {
                var validation = main.NetworkViewModel.LatestValidation;

                switch (t.index)
                {
                case 0:
                    Assert.AreEqual(0, t.value);
                    Assert.IsTrue(validation.IsValid);
                    Assert.IsTrue(validation.NetworkIsTraversable);
                    return;

                case 1:
                    Assert.AreEqual(null, t.value);
                    Assert.IsFalse(validation.IsValid);
                    Assert.IsTrue(validation.NetworkIsTraversable);
                    return;

                case 2:
                    Assert.AreEqual(1, t.value);
                    Assert.IsTrue(validation.IsValid);
                    Assert.IsTrue(validation.NetworkIsTraversable);
                    return;

                default: throw new Exception("too many updates");
                }
            });

            DivisionNodeViewModel divisionNode = new DivisionNodeViewModel();

            ((IntegerValueEditorViewModel)divisionNode.Input1.Editor).Value = 1;
            main.NetworkViewModel.Nodes.Add(divisionNode);

            ConstantNodeViewModel constantNode = new ConstantNodeViewModel();

            constantNode.ValueEditor.Value = 1;
            main.NetworkViewModel.Nodes.Add(constantNode);

            var connection1 = main.NetworkViewModel.ConnectionFactory(outputNode.ResultInput, divisionNode.Output);

            main.NetworkViewModel.Connections.Add(connection1);

            var connection2 = main.NetworkViewModel.ConnectionFactory(divisionNode.Input2, constantNode.Output);

            main.NetworkViewModel.Connections.Add(connection2);
        }
        public void TestConstantToOutput()
        {
            MainViewModel       main       = new MainViewModel();
            OutputNodeViewModel outputNode = main.NetworkViewModel.Nodes.Items.OfType <OutputNodeViewModel>().First();

            ConstantNodeViewModel constantNode = new ConstantNodeViewModel();

            constantNode.ValueEditor.Value = 5;
            main.NetworkViewModel.Nodes.Add(constantNode);
            main.NetworkViewModel.Connections.Add(main.NetworkViewModel.ConnectionFactory(outputNode.ResultInput, constantNode.Output));

            Assert.AreEqual(5, outputNode.ResultInput.Value);
            Assert.IsTrue(main.NetworkViewModel.LatestValidation.IsValid);
        }
Exemplo n.º 6
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);
            });
        }
Exemplo n.º 7
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // ObservableCollection<ConnectionViewModel> test = new ObservableCollection<ConnectionViewModel>();

                AnimationNodeViewModel evm  = new AnimationNodeViewModel();
                OutputNodeViewModel    onvm = new OutputNodeViewModel();

                OutputConnectorViewModel opcvm = new OutputConnectorViewModel()
                {
                    Element = evm
                };
                InputConnectorViewModel ipcvm = new InputConnectorViewModel()
                {
                    Element = onvm
                };

                var cvm = new ConnectionViewModel()
                {
                    From = opcvm, To = ipcvm
                };
                //test.Add();

                List <Type> knownTypes = new List <Type>()
                {
                    typeof(AnimationNodeViewModel), typeof(OutputNodeViewModel)
                };

                AnimationComponent ac = new AnimationComponent();
                ac.FB_AnimationComponent.AnimationBlendTree.AnimNodes.Add(evm);
                ac.FB_AnimationComponent.AnimationBlendTree.AnimNodes.Add(onvm);
                ac.FB_AnimationComponent.AnimationBlendTree.NodeConnections.Add(cvm);

                ObjectSerialize.Serialize(ac, "./test", knownTypes);

                //   var testRes = ObjectSerialize.Deserialize<AnimationComponent>("./test");
                var testRes = ObjectSerialize.Deserialize <VEXProjectModel>(@"F:\Projekte\coop\XGame\data\Editor\New VEX Project xyy.oideProj");
            }
            catch (Exception ex)
            {
            }
        }
        public void TestConstantToDivideToOutputObservable()
        {
            MainViewModel       main       = new MainViewModel();
            OutputNodeViewModel outputNode = main.NetworkViewModel.Nodes.Items.OfType <OutputNodeViewModel>().First();

            outputNode.ResultInput.ValueChanged.Zip(Observable.Range(0, 100), (val, i) => (value: val, index: i)).Subscribe(t =>
            {
                var validation = main.NetworkViewModel.LatestValidation;

                switch (t.index)
                {
                case 0:
                    Assert.AreEqual(0, t.value);
                    Assert.IsTrue(validation.IsValid);
                    Assert.IsTrue(validation.NetworkIsTraversable);
                    return;

                case 1:
                    Assert.AreEqual(null, t.value);
                    Assert.IsFalse(validation.IsValid);
                    Assert.IsTrue(validation.NetworkIsTraversable);
                    return;

                case 2:
                    Assert.AreEqual(0, t.value);
                    Assert.IsTrue(validation.IsValid);
                    Assert.IsTrue(validation.NetworkIsTraversable);
                    return;
                }
            });

            DivisionNodeViewModel divisionNode = new DivisionNodeViewModel();

            main.NetworkViewModel.Nodes.Add(divisionNode);
            main.NetworkViewModel.Connections.Add(main.NetworkViewModel.ConnectionFactory(outputNode.ResultInput, divisionNode.Output));

            ConstantNodeViewModel constantNode = new ConstantNodeViewModel();

            constantNode.ValueEditor.Value = 1;
            main.NetworkViewModel.Nodes.Add(constantNode);
            main.NetworkViewModel.Connections.Add(main.NetworkViewModel.ConnectionFactory(divisionNode.Input2, constantNode.Output));
        }
        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);
        }