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