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); }
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); }); }
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); }