public node logic_operation(LogicOperationBlock block) { // Operations 'and', 'or'. var @operator = (block.getFieldValue("OP") == "AND") ? "&&" : "||"; var argument0 = valueToCode(block, "A"); var argument1 = valueToCode(block, "B"); if (argument0 == null && argument1 == null) { // If there are no arguments, then the return value is false. argument0 = new false_node(this); argument1 = new false_node(this); } else { // Single missing arguments have no effect on the return value. var defaultArgument = (@operator == "&&") ? (node) new true_node(this) : (node) new false_node(this); if (argument0 == null) { argument0 = defaultArgument; } if (argument1 == null) { argument1 = defaultArgument; } } if (@operator == "&&") { return(new and_node(this, argument0, argument1)); } else { return(new or_node(this, argument0, argument1)); } }
public void AaTeste11() { var signal1 = new ImportFromTextBlock { Text = "0, 15, -1, 1, 0, -15, 1," }; var signal2 = new ImportFromTextBlock { Text = "0, -1, 11, 0, 1, 0, 1" }; var block = new LogicOperationBlock { Operation = WaveMath.LogicalOperationEnum.And }; signal1.ConnectTo(block); signal2.ConnectTo(block); signal1.Execute(); signal2.Execute(); Console.WriteLine(block.Output[0].ToString(0)); //Console Output: 0 1 1 0 0 0 1 }
public void TestSampleBasedOperationBlockExecute() { System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo("en-US"); var signalBlock1 = new GenerateSignalBlock { TemplateName = "Binary", Start = 0, Finish = 5, SamplingRate = 1, IgnoreLastSample = true }; var signalBlock2 = new GenerateSignalBlock { TemplateName = "Binary", Start = 0, Finish = 5, SamplingRate = 1, IgnoreLastSample = true }; var block = new LogicOperationBlock { Operation = WaveMath.LogicalOperationEnum.Or }; block.Execute(); signalBlock1.OutputNodes[0].ConnectTo(block.InputNodes[0]); signalBlock2.OutputNodes[0].ConnectTo(block.InputNodes[1]); Assert.IsNotNull(block.Name); Assert.IsNotNull(block.Description); Assert.IsNotNull(block.ProcessingType); Assert.AreEqual("Or", block.GetAssemblyClassName()); signalBlock1.Execute(); signalBlock2.Execute(); Assert.AreEqual("0 1 0 1 0", block.OutputNodes[0].Object.ToString(0)); var block2 = (LogicOperationBlock)block.Clone(); block2.Operation = WaveMath.LogicalOperationEnum.NotOr; block.OutputNodes[0].ConnectTo(block2.InputNodes[0]); signalBlock2.OutputNodes[0].ConnectTo(block2.InputNodes[1]); signalBlock1.Execute(); signalBlock2.Execute(); Assert.AreEqual("1 0 1 0 1", block2.OutputNodes[0].Object[0].ToString(0)); block.Cascade = false; block2 = (LogicOperationBlock)block.Clone(); block.OutputNodes[0].ConnectTo(block2.InputNodes[0]); signalBlock1.Execute(); Assert.AreEqual(0, block2.OutputNodes[0].Object.Count); Assert.AreEqual("", block2.OutputNodes[0].Object.ToString(0)); signalBlock1 = new GenerateSignalBlock { TemplateName = "Binary", Start = 0, Finish = 3, SamplingRate = 1, IgnoreLastSample = true }; signalBlock2 = new GenerateSignalBlock { TemplateName = "Binary", Start = 0, Finish = 5, SamplingRate = 1, IgnoreLastSample = true }; signalBlock1.OutputNodes[0].ConnectTo(block.InputNodes[0]); signalBlock2.OutputNodes[0].ConnectTo(block.InputNodes[1]); signalBlock1.Execute(); signalBlock2.Execute(); signalBlock2.OutputNodes[0].Object.Add(new Signal(new double[] { 1, 2, 3, 4 })); block.Execute(); Assert.AreEqual("0 1 0 0 0", block.OutputNodes[0].Object[0].ToString(0)); Assert.AreEqual("1 1 1 0", block.OutputNodes[0].Object[1].ToString(0)); signalBlock2.OutputNodes[0].Object.Clear(); block.Execute(); Assert.AreEqual(1, block.OutputNodes[0].Object.Count); Assert.AreEqual("0 1 0", block.OutputNodes[0].Object[0].ToString(0)); }