public void TestInstructionStreamMemory_SimpleWorkflow01() { List <string> codes = new List <string>() { "a = 1;", "a = 2;" }; Guid guid = System.Guid.NewGuid(); // First run // a = 1 List <Subtree> added = new List <Subtree>(); added.Add(ProtoTestFx.TD.TestFrameWork.CreateSubTreeFromCode(guid, codes[0])); var syncData = new GraphSyncData(null, added, null); liverunner.UpdateGraph(syncData); instrStreamStart = runtimeDiagnostics.GetExecutableInstructionCount(); // Modify // a = 2 List <Subtree> modified = new List <Subtree>(); modified.Add(ProtoTestFx.TD.TestFrameWork.CreateSubTreeFromCode(guid, codes[1])); syncData = new GraphSyncData(null, null, modified); liverunner.UpdateGraph(syncData); instrStreamEnd = runtimeDiagnostics.GetExecutableInstructionCount(); Assert.AreEqual(instrStreamStart, instrStreamEnd); }
public void TestPreviewModify1Node02() { List <string> codes = new List <string>() { // guid1 @" a = 1; ", // guid2 @" x = a; y = x; ", // guid3 @" z = a; ", // guid1 @" a = 10; ", }; Guid guid1 = System.Guid.NewGuid(); Guid guid2 = System.Guid.NewGuid(); Guid guid3 = System.Guid.NewGuid(); // Create and run the graph ProtoScript.Runners.LiveRunner liveRunner = new ProtoScript.Runners.LiveRunner(); List <Subtree> added = new List <Subtree>(); added.Add(CreateSubTreeFromCode(guid1, codes[0])); added.Add(CreateSubTreeFromCode(guid2, codes[1])); added.Add(CreateSubTreeFromCode(guid3, codes[2])); var syncData = new GraphSyncData(null, added, null); liveRunner.UpdateGraph(syncData); // Modify [a = 1;] to [a = 10;] List <Subtree> modified = new List <Subtree>(); modified.Add(CreateSubTreeFromCode(guid1, codes[3])); syncData = new GraphSyncData(null, null, modified); // Get astlist from ChangeSetComputer ChangeSetComputer changeSetState = new ProtoScript.Runners.ChangeSetComputer(liveRunner.Core); List <AssociativeNode> astList = changeSetState.GetDeltaASTList(syncData); // Get the preview guids (affected graphs) List <Guid> reachableGuidList = changeSetState.EstimateNodesAffectedByASTList(astList); // Check if the the affected guids are in the list List <Guid> expectedGuid = new List <Guid> { guid2, guid3 }; AssertPreview(reachableGuidList, expectedGuid, 2); }
public void TestPreviewModify1Node01() { List<string> codes = new List<string>() { @" a = 1; ", @" x = a; y = x; ", @" a = 10; ", }; Guid guid1 = System.Guid.NewGuid(); Guid guid2 = System.Guid.NewGuid(); // Create and run the graph [a = 1;] and [x = a; y = x;] ProtoScript.Runners.LiveRunner liveRunner = new ProtoScript.Runners.LiveRunner(); List<Subtree> added = new List<Subtree>(); added.Add(CreateSubTreeFromCode(guid1, codes[0])); added.Add(CreateSubTreeFromCode(guid2, codes[1])); var syncData = new GraphSyncData(null, added, null); liveRunner.UpdateGraph(syncData); // Modify [a = 1;] to [a = 10;] List<Subtree> modified = new List<Subtree>(); modified.Add(CreateSubTreeFromCode(guid1, codes[2])); syncData = new GraphSyncData(null, null, modified); // Get astlist from ChangeSetComputer ChangeSetComputer changeSetState = new ProtoScript.Runners.ChangeSetComputer(liveRunner.Core); List<AssociativeNode> astList = changeSetState.GetDeltaASTList(syncData); // Get the the preview guids (affected graphs) List<Guid> reachableGuidList = changeSetState.EstimateNodesAffectedByASTList(astList); // Check if the the affected guids are in the list List<Guid> expectedGuid = new List<Guid>{guid2}; AssertPreview(reachableGuidList, expectedGuid, 1); }
public void GraphILTest_Assign01_AstInput() { // Build the AST trees ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IntNode(10), ProtoCore.DSASM.Operator.assign); List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); astList.Add(assign); // Update graph using AST node input ProtoScript.Runners.ILiveRunner liveRunner = new ProtoScript.Runners.LiveRunner(); liveRunner.UpdateGraph(assign); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); }
public void GraphILTest_Assign01() { // Build the AST trees ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IntNode(10), ProtoCore.DSASM.Operator.assign); List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); astList.Add(assign); // Instantiate GraphSyncData List<Subtree> addedList = new List<Subtree>(); addedList.Add(new Subtree(astList, System.Guid.NewGuid())); GraphSyncData syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree ProtoScript.Runners.ILiveRunner liveRunner = new ProtoScript.Runners.LiveRunner(); liveRunner.UpdateGraph(syncData); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); }
public void TestInstructionStreamMemory_SimpleWorkflow01() { List <string> codes = new List <string>() { "a = 1;", "a = 2;" }; Guid guid = System.Guid.NewGuid(); // First run // a = 1 List <Subtree> added = new List <Subtree>(); Subtree st = ProtoTestFx.TD.TestFrameWork.CreateSubTreeFromCode(guid, codes[0]); st.IsInput = true; added.Add(st); var syncData = new GraphSyncData(null, added, null); liverunner.UpdateGraph(syncData); instrStreamStart = runtimeDiagnostics.GetExecutableInstructionCount(); ProtoCore.Mirror.RuntimeMirror mirror = liverunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 1); // Modify // a = 2 List <Subtree> modified = new List <Subtree>(); st = ProtoTestFx.TD.TestFrameWork.CreateSubTreeFromCode(guid, codes[1]); st.IsInput = true; modified.Add(st); syncData = new GraphSyncData(null, null, modified); liverunner.UpdateGraph(syncData); instrStreamEnd = runtimeDiagnostics.GetExecutableInstructionCount(); mirror = liverunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 2); Assert.AreEqual(instrStreamStart, instrStreamEnd); }
public void GraphILTest_Assign05() { //////////////////////////////////////////////////////////////////// // Adds nodes => a = 10; // executes it // Adds node => c = 20; // executes it // Adds node => b = a + c; // executes it // deletes node => c = 20; // executes updated graph //////////////////////////////////////////////////////////////////// liveRunner = new ProtoScript.Runners.LiveRunner(); List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); // Build the AST trees ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign1 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IntNode(10), ProtoCore.DSASM.Operator.assign); astList.Add(assign1); List<Subtree> addedList = new List<Subtree>(); addedList.Add(new Subtree(astList, System.Guid.NewGuid())); // Instantiate GraphSyncData GraphSyncData syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); //string o = liveRunner.GetCoreDump(); astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign2 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("c"), new ProtoCore.AST.AssociativeAST.IntNode(20), ProtoCore.DSASM.Operator.assign); astList.Add(assign2); addedList = new List<Subtree>(); System.Guid guid1 = System.Guid.NewGuid(); addedList.Add(new Subtree(astList, guid1)); syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); mirror = liveRunner.InspectNodeValue("c"); Assert.IsTrue((Int64)mirror.GetData().Data == 20); //string o = liveRunner.GetCoreDump(); astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign3 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("b"), new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IdentifierNode("c"), ProtoCore.DSASM.Operator.add), ProtoCore.DSASM.Operator.assign); astList.Add(assign3); addedList = new List<Subtree>(); addedList.Add(new Subtree(astList, System.Guid.NewGuid())); syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); mirror = liveRunner.InspectNodeValue("c"); Assert.IsTrue((Int64)mirror.GetData().Data == 20); mirror = liveRunner.InspectNodeValue("b"); Assert.IsTrue((Int64)mirror.GetData().Data == 30); //o = liveRunner.GetCoreDump(); astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); astList.Add(assign2); List<Subtree> deletedList = new List<Subtree>(); deletedList.Add(new Subtree(astList, guid1)); syncData = new GraphSyncData(deletedList, null, null); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); mirror = liveRunner.InspectNodeValue("c"); Assert.IsTrue(mirror.GetData().IsNull); mirror = liveRunner.InspectNodeValue("b"); Assert.IsTrue(mirror.GetData().IsNull); //o = liveRunner.GetCoreDump(); }
public void GraphILTest_Assign03_astInput() { //////////////////////////////////////////////////////////////////// // Adds nodes => a = 10; c = 20; b = a + c; // Creates 3 separate Subtrees //////////////////////////////////////////////////////////////////// List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); // Build the AST trees ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign1 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IntNode(10), ProtoCore.DSASM.Operator.assign); astList.Add(assign1); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign2 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("c"), new ProtoCore.AST.AssociativeAST.IntNode(20), ProtoCore.DSASM.Operator.assign); astList.Add(assign2); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign3 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("b"), new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IdentifierNode("c"), ProtoCore.DSASM.Operator.add), ProtoCore.DSASM.Operator.assign); astList.Add(assign3); // update graph with ast input CodeBlockNode cNode = new CodeBlockNode(); cNode.Body = astList; liveRunner = new ProtoScript.Runners.LiveRunner(); liveRunner.UpdateGraph(cNode); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("b"); Assert.IsTrue((Int64)mirror.GetData().Data == 30); }
public void GraphILTest_Assign04_astInput() { //////////////////////////////////////////////////////////////////// // Adds nodes => a = 10; // executes it // Adds node => c = 20; // executes it // Adds node => b = a + c; // executes it //////////////////////////////////////////////////////////////////// liveRunner = new ProtoScript.Runners.LiveRunner(); // Build the AST trees ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign1 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IntNode(10), ProtoCore.DSASM.Operator.assign); // update graph liveRunner.UpdateGraph(assign1); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign2 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("c"), new ProtoCore.AST.AssociativeAST.IntNode(20), ProtoCore.DSASM.Operator.assign); // update graph liveRunner.UpdateGraph(assign2); mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); mirror = liveRunner.InspectNodeValue("c"); Assert.IsTrue((Int64)mirror.GetData().Data == 20); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign3 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("b"), new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IdentifierNode("c"), ProtoCore.DSASM.Operator.add), ProtoCore.DSASM.Operator.assign); // update graph liveRunner.UpdateGraph(assign3); mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); mirror = liveRunner.InspectNodeValue("c"); Assert.IsTrue((Int64)mirror.GetData().Data == 20); mirror = liveRunner.InspectNodeValue("b"); Assert.IsTrue((Int64)mirror.GetData().Data == 30); }
public void TestFunctionObjectInApply() { liveRunner = new ProtoScript.Runners.LiveRunner(); liveRunner.ResetVMAndResyncGraph(new List<string> { "FunctionObject.ds" }); string code = @" def foo(x,y ) { return = x + y; } f = _SingleFunctionObject(foo, 2, {1}, {null, 42}, true); r = __Apply(f, 3); "; Guid guid = System.Guid.NewGuid(); List<Subtree> added = new List<Subtree>(); { added.Add(ProtoTestFx.TD.TestFrameWork.CreateSubTreeFromCode(guid, code)); var syncData = new GraphSyncData(null, added, null); liveRunner.UpdateGraph(syncData); AssertValue("r", 45); } }
public void GraphILTest_Assign02_AstInput() { //////////////////////////////////////////////////////////////////// // Adds a node => a = 10 + 20; // Creates Subtree and sync data and executes it via delta execution //////////////////////////////////////////////////////////////////// // Build the AST tree ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IntNode(10), new ProtoCore.AST.AssociativeAST.IntNode(20), ProtoCore.DSASM.Operator.add), ProtoCore.DSASM.Operator.assign); // emit the DS code from the AST tree liveRunner = new ProtoScript.Runners.LiveRunner(); liveRunner.UpdateGraph(assign); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 30); }
public void GraphILTest_FFIClassUsage_04() { // // a=2; // x=1..10; // var_79153f69593b4fde9bb50646a1aaea96=(x+a); // var_347c1113204a4d15a22f7daf83bbe20e=Point.ByCoordinates(var_79153f69593b4fde9bb50646a1aaea96,a,a); // ProtoScript.Runners.ILiveRunner liveRunner = new ProtoScript.Runners.LiveRunner(); //============================================== // Build the import Nodes //============================================== List<string> libs = new List<string>(); libs.Add("ProtoGeometry.dll"); liveRunner.ResetVMAndResyncGraph(libs); string code = null; ProtoCore.AST.Node codeBlockNode = null; ProtoCore.AST.AssociativeAST.CodeBlockNode commentNode = null; List<ProtoCore.AST.Node> nodes = new List<ProtoCore.AST.Node>(); List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); code = null; nodes = new List<ProtoCore.AST.Node>(); astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); codeBlockNode = null; code = @" a=2; x=1..10; y=(x+a); z=Point.ByCoordinates(y,a,a); "; commentNode = null; codeBlockNode = GraphToDSCompiler.GraphUtilities.Parse(code, out commentNode); nodes = ProtoCore.Utils.ParserUtils.GetAstNodes(codeBlockNode); foreach (ProtoCore.AST.Node node in nodes) { astList.Add(node as ProtoCore.AST.AssociativeAST.AssociativeNode); } //============================================== // emit the DS code from the AST tree //============================================== Guid guid = System.Guid.NewGuid(); // Instantiate GraphSyncData List<Subtree> addedList = new List<Subtree>(); addedList.Add(new Subtree(astList, guid)); GraphSyncData syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); const int rep = 2; for (int n = 0; n < rep; ++n) { ////// code = null; nodes = new List<ProtoCore.AST.Node>(); astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); codeBlockNode = null; code = @" a = null; a=2; x = null; x=1..10; y = null; y=(x+a); z= null; z=Point.ByCoordinates(y,a,a); "; commentNode = null; codeBlockNode = GraphToDSCompiler.GraphUtilities.Parse(code, out commentNode); nodes = ProtoCore.Utils.ParserUtils.GetAstNodes(codeBlockNode); foreach (ProtoCore.AST.Node node in nodes) { astList.Add(node as ProtoCore.AST.AssociativeAST.AssociativeNode); } // Instantiate GraphSyncData addedList = new List<Subtree>(); addedList.Add(new Subtree(astList, guid)); syncData = new GraphSyncData(null, null, addedList); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("z"); var zValues = mirror.GetData().GetElements(); Assert.IsTrue(zValues != null && zValues.Count == 10); Assert.IsTrue(zValues[0].Class.ClassName == "Point"); } }
public void GraphILTest_Assign01a() { //////////////////////////////////////////////////////////////////// // Adds a node => a = 10; // Creates Subtree, Deletes the node, // Creates Subtree and sync data and executes it via delta execution //////////////////////////////////////////////////////////////////// // Build the AST trees ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IntNode(10), ProtoCore.DSASM.Operator.assign); List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); astList.Add(assign); // Instantiate GraphSyncData List<Subtree> addedList = new List<Subtree>(); System.Guid guid1 = System.Guid.NewGuid(); addedList.Add(new Subtree(astList, guid1)); GraphSyncData syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner = new ProtoScript.Runners.LiveRunner(); liveRunner.UpdateGraph(syncData); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); astList.Add(assign); List<Subtree> deletedList = new List<Subtree>(); deletedList.Add(new Subtree(astList, guid1)); syncData = new GraphSyncData(deletedList, null, null); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue(mirror.GetData().IsNull); }
public void GraphILTest_DeletedNode01() { //==================================== // Create a = 10 // Execute and verify a = 10 // Delete a = 10 // Create b = a // Execute and verify b = null //==================================== // Create a = 10 // Execute and verify a = 10 ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IntNode(10), ProtoCore.DSASM.Operator.assign); List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); astList.Add(assign); Guid guid = System.Guid.NewGuid(); // Instantiate GraphSyncData List<Subtree> addedList = new List<Subtree>(); addedList.Add(new Subtree(astList, guid)); GraphSyncData syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner = new ProtoScript.Runners.LiveRunner(); liveRunner.UpdateGraph(syncData); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); // Delete a = 10 List<Subtree> deletedList = new List<Subtree>(); deletedList.Add(new Subtree(null, guid)); syncData = new GraphSyncData(deletedList, null, null); liveRunner.UpdateGraph(syncData); // Create b = a // Execute and verify b = null ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign2 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("b"), new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), ProtoCore.DSASM.Operator.assign); astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); astList.Add(assign2); guid = System.Guid.NewGuid(); // Instantiate GraphSyncData addedList = new List<Subtree>(); addedList.Add(new Subtree(astList, guid)); syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); mirror = liveRunner.InspectNodeValue("b"); Assert.IsTrue(mirror.GetData().IsNull); }
public void GraphILTest_ModifiedNode01() { //////////////////////////////////////////////////////////////////// // Adds nodes => c = 78; d = a; // Create subtree, execute // Adds nodes => a = 10; // Adds node => b = a; // Create subtree, execute // Modify subtree => a = b; // execute updated graph (cylcic dependency should not occur) //////////////////////////////////////////////////////////////////// liveRunner = new ProtoScript.Runners.LiveRunner(); List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign0 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("c"), new ProtoCore.AST.AssociativeAST.IntNode(78), ProtoCore.DSASM.Operator.assign); astList.Add(assign0); assign0 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("d"), new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), ProtoCore.DSASM.Operator.assign); astList.Add(assign0); List<Subtree> addedList = new List<Subtree>(); System.Guid guid0 = System.Guid.NewGuid(); addedList.Add(new Subtree(astList, guid0)); GraphSyncData syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("c"); Assert.IsTrue((Int64)mirror.GetData().Data == 78); mirror = liveRunner.InspectNodeValue("d"); Assert.IsTrue(mirror.GetData().IsNull); // Build the AST trees astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign1 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IntNode(10), ProtoCore.DSASM.Operator.assign); astList.Add(assign1); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign2 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("b"), new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), ProtoCore.DSASM.Operator.assign); astList.Add(assign2); addedList = new List<Subtree>(); System.Guid guid1 = System.Guid.NewGuid(); addedList.Add(new Subtree(astList, guid1)); syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); mirror = liveRunner.InspectNodeValue("b"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); mirror = liveRunner.InspectNodeValue("c"); Assert.IsTrue((Int64)mirror.GetData().Data == 78); mirror = liveRunner.InspectNodeValue("d"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign3 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IdentifierNode("b"), ProtoCore.DSASM.Operator.assign); astList.Add(assign3); List<Subtree> modifiedList = new List<Subtree>(); modifiedList.Add(new Subtree(astList, guid1)); syncData = new GraphSyncData(null, null, modifiedList); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); mirror = liveRunner.InspectNodeValue("a"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); mirror = liveRunner.InspectNodeValue("b"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); mirror = liveRunner.InspectNodeValue("c"); Assert.IsTrue((Int64)mirror.GetData().Data == 78); mirror = liveRunner.InspectNodeValue("d"); Assert.IsTrue((Int64)mirror.GetData().Data == 10); }
public void GraphILTest_FFIClassUsage_01() { List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); //============================================== // Build the import Nodes //============================================== ProtoScript.Runners.ILiveRunner liveRunner = new ProtoScript.Runners.LiveRunner(); List<string> libs = new List<string>(); libs.Add("ProtoGeometry.dll"); liveRunner.ResetVMAndResyncGraph(libs); //============================================== // Build the constructor call nodes // Point.ByCoordinates(10,10,10) //============================================== astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); ProtoCore.AST.AssociativeAST.FunctionCallNode constructorCall = new ProtoCore.AST.AssociativeAST.FunctionCallNode(); constructorCall.Function = new ProtoCore.AST.AssociativeAST.IdentifierNode("ByCoordinates"); List<ProtoCore.AST.AssociativeAST.AssociativeNode> listArgs = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(10.0)); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(10.0)); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(10.0)); constructorCall.FormalArguments = listArgs; string className = "Point"; ProtoCore.AST.AssociativeAST.IdentifierNode inode = new ProtoCore.AST.AssociativeAST.IdentifierNode(className); ProtoCore.AST.AssociativeAST.FunctionDotCallNode dotCall = ProtoCore.Utils.CoreUtils.GenerateCallDotNode(inode, constructorCall, liveRunner.Core); //============================================== // Build the binary expression // p = Point.ByCoordinates(10,10,10) //============================================== ProtoCore.AST.AssociativeAST.BinaryExpressionNode stmt1 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("p"), dotCall, ProtoCore.DSASM.Operator.assign); astList.Add(stmt1); //============================================== // Build a binary expression to retirieve the x property // xval = p.X; //============================================== ProtoCore.AST.AssociativeAST.IdentifierListNode identListNode = new ProtoCore.AST.AssociativeAST.IdentifierListNode(); identListNode.LeftNode = new ProtoCore.AST.AssociativeAST.IdentifierNode("p"); identListNode.Optr = ProtoCore.DSASM.Operator.dot; identListNode.RightNode = new ProtoCore.AST.AssociativeAST.IdentifierNode("X"); ProtoCore.AST.AssociativeAST.BinaryExpressionNode stmt2 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("xval"), identListNode, ProtoCore.DSASM.Operator.assign); astList.Add(stmt2); //============================================== // emit the DS code from the AST tree // // import("ProtoGeometry.dll"); // p = Point.Bycoordinates(10.0, 10.0, 10.0); // xval = p.X; // //============================================== // Instantiate GraphSyncData List<Subtree> addedList = new List<Subtree>(); addedList.Add(new Subtree(astList, System.Guid.NewGuid())); GraphSyncData syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("xval"); Assert.IsTrue((double)mirror.GetData().Data == 10.0); /////////////////////////////////////////////////////////////////////////////// libs = new List<string>(); libs.Add("ProtoGeometry.dll"); liveRunner.ResetVMAndResyncGraph(libs); astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); constructorCall = new ProtoCore.AST.AssociativeAST.FunctionCallNode(); constructorCall.Function = new ProtoCore.AST.AssociativeAST.IdentifierNode("ByCoordinates"); listArgs = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(10.0)); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(10.0)); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(10.0)); constructorCall.FormalArguments = listArgs; className = "Point"; inode = new ProtoCore.AST.AssociativeAST.IdentifierNode(className); dotCall = ProtoCore.Utils.CoreUtils.GenerateCallDotNode(inode, constructorCall, liveRunner.Core); //============================================== // Build the binary expression // p = Point.ByCoordinates(10,10,10) //============================================== stmt1 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("p"), dotCall, ProtoCore.DSASM.Operator.assign); astList.Add(stmt1); //============================================== // Build a binary expression to retirieve the x property // xval = p.X; //============================================== identListNode = new ProtoCore.AST.AssociativeAST.IdentifierListNode(); identListNode.LeftNode = new ProtoCore.AST.AssociativeAST.IdentifierNode("p"); identListNode.Optr = ProtoCore.DSASM.Operator.dot; identListNode.RightNode = new ProtoCore.AST.AssociativeAST.IdentifierNode("X"); stmt2 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("xval"), identListNode, ProtoCore.DSASM.Operator.assign); astList.Add(stmt2); //============================================== // emit the DS code from the AST tree // // import("ProtoGeometry.dll"); // p = Point.Bycoordinates(10.0, 10.0, 10.0); // xval = p.X; // //============================================== // Instantiate GraphSyncData addedList = new List<Subtree>(); addedList.Add(new Subtree(astList, System.Guid.NewGuid())); syncData = new GraphSyncData(null, addedList, null); liveRunner.UpdateGraph(syncData); mirror = liveRunner.InspectNodeValue("xval"); Assert.IsTrue((double)mirror.GetData().Data == 10.0); }
public void GraphILTest_FFIClassUsage_03() { // // a=2; // tSSA_150=1..10; // x= tSSA_150; // tSSA_151=x; // tSSA_152=a; // tSSA_153=( tSSA_151+ tSSA_152); // var_79153f69593b4fde9bb50646a1aaea96= tSSA_153; // tSSA_154=Point.ByCoordinates(var_79153f69593b4fde9bb50646a1aaea96,a,a); // var_347c1113204a4d15a22f7daf83bbe20e= tSSA_154; // // // a=2; // x=1..10; // var_79153f69593b4fde9bb50646a1aaea96=(x+a); // var_347c1113204a4d15a22f7daf83bbe20e=Point.ByCoordinates(var_79153f69593b4fde9bb50646a1aaea96,a,a); // ProtoScript.Runners.ILiveRunner liveRunner = new ProtoScript.Runners.LiveRunner(); List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); //============================================== // Build the import Nodes //============================================== //ProtoCore.AST.AssociativeAST.ImportNode importNode = new ProtoCore.AST.AssociativeAST.ImportNode(); //importNode.ModuleName = "ProtoGeometry.dll"; //astList.Add(importNode); List<string> libs = new List<string>(); libs.Add("ProtoGeometry.dll"); liveRunner.ResetVMAndResyncGraph(libs); // Build the AST trees // a = 2 ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign1 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), new ProtoCore.AST.AssociativeAST.IntNode(2), ProtoCore.DSASM.Operator.assign); astList.Add(assign1); // x = 1..10; ProtoCore.AST.AssociativeAST.RangeExprNode rangeExpr = new ProtoCore.AST.AssociativeAST.RangeExprNode(); rangeExpr.FromNode = new ProtoCore.AST.AssociativeAST.IntNode(1); rangeExpr.ToNode = new ProtoCore.AST.AssociativeAST.IntNode(10); rangeExpr.StepNode = new ProtoCore.AST.AssociativeAST.IntNode(1); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign2 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("x"), rangeExpr, ProtoCore.DSASM.Operator.assign); astList.Add(assign2); // var_79153f69593b4fde9bb50646a1aaea96 = (x + a); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign3 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("dude"), new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("x"), new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), ProtoCore.DSASM.Operator.add), ProtoCore.DSASM.Operator.assign); astList.Add(assign3); //============================================== // Build the constructor call nodes // Point.ByCoordinates(10,10,10) //============================================== ProtoCore.AST.AssociativeAST.FunctionCallNode constructorCall = new ProtoCore.AST.AssociativeAST.FunctionCallNode(); constructorCall.Function = new ProtoCore.AST.AssociativeAST.IdentifierNode("ByCoordinates"); List<ProtoCore.AST.AssociativeAST.AssociativeNode> listArgs = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); listArgs.Add(new ProtoCore.AST.AssociativeAST.IdentifierNode("dude")); listArgs.Add(new ProtoCore.AST.AssociativeAST.IdentifierNode("a")); listArgs.Add(new ProtoCore.AST.AssociativeAST.IdentifierNode("a")); constructorCall.FormalArguments = listArgs; string className = "Point"; ProtoCore.AST.AssociativeAST.IdentifierNode inode = new ProtoCore.AST.AssociativeAST.IdentifierNode(className); ProtoCore.AST.AssociativeAST.FunctionDotCallNode dotCall = ProtoCore.Utils.CoreUtils.GenerateCallDotNode(inode, constructorCall, liveRunner.Core); //============================================== // Build the binary expression // p = Point.ByCoordinates(10,10,10) //============================================== ProtoCore.AST.AssociativeAST.BinaryExpressionNode stmt1 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("final"), dotCall, ProtoCore.DSASM.Operator.assign); astList.Add(stmt1); //============================================== // emit the DS code from the AST tree //============================================== // Instantiate GraphSyncData List<Subtree> addedList = new List<Subtree>(); addedList.Add(new Subtree(astList, System.Guid.NewGuid())); GraphSyncData syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner.UpdateGraph(syncData); }
public void GraphILTest_FFIClassUsage_02_astInput() { ProtoScript.Runners.ILiveRunner liveRunner = new ProtoScript.Runners.LiveRunner(); List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); //============================================== // Build the import Nodes //============================================== List<string> libs = new List<string>(); libs.Add("ProtoGeometry.dll"); List<LibraryMirror> libMirrors = liveRunner.ResetVMAndImportLibrary(libs); //============================================== // Build the constructor call nodes // Point.ByCoordinates(10,10,10) //============================================== ProtoCore.AST.AssociativeAST.FunctionCallNode constructorCall = new ProtoCore.AST.AssociativeAST.FunctionCallNode(); constructorCall.Function = new ProtoCore.AST.AssociativeAST.IdentifierNode("ByCoordinates"); List<ProtoCore.AST.AssociativeAST.AssociativeNode> listArgs = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(10.0)); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(10.0)); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(10.0)); constructorCall.FormalArguments = listArgs; string className = "Point"; ProtoCore.AST.AssociativeAST.IdentifierNode inode = new ProtoCore.AST.AssociativeAST.IdentifierNode(className); ProtoCore.AST.AssociativeAST.FunctionDotCallNode dotCall = ProtoCore.Utils.CoreUtils.GenerateCallDotNode(inode, constructorCall, liveRunner.Core); //============================================== // Build the binary expression // p = Point.ByCoordinates(10,10,10) //============================================== ProtoCore.AST.AssociativeAST.BinaryExpressionNode stmt1 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("p"), dotCall, ProtoCore.DSASM.Operator.assign); astList.Add(stmt1); //============================================== // Translate the point // newPoint = p.Translate(1,2,3); //============================================== ProtoCore.AST.AssociativeAST.FunctionCallNode functionCallTranslate = new ProtoCore.AST.AssociativeAST.FunctionCallNode(); functionCallTranslate.Function = new ProtoCore.AST.AssociativeAST.IdentifierNode("Translate"); listArgs = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(1.0)); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(2.0)); listArgs.Add(new ProtoCore.AST.AssociativeAST.DoubleNode(3.0)); functionCallTranslate.FormalArguments = listArgs; //ProtoCore.AST.AssociativeAST.FunctionDotCallNode dotCallTranslate = new ProtoCore.AST.AssociativeAST.FunctionDotCallNode("p", functionCallTranslate); className = "p"; inode = new ProtoCore.AST.AssociativeAST.IdentifierNode(className); ProtoCore.AST.AssociativeAST.FunctionDotCallNode dotCallTranslate = ProtoCore.Utils.CoreUtils.GenerateCallDotNode(inode, functionCallTranslate, liveRunner.Core); //============================================== // Build the binary expression //============================================== ProtoCore.AST.AssociativeAST.BinaryExpressionNode stmt2 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("newPoint"), dotCallTranslate, ProtoCore.DSASM.Operator.assign); astList.Add(stmt2); //============================================== // Build a binary expression to retirieve the x property // xval = newPoint.X //============================================== ProtoCore.AST.AssociativeAST.IdentifierListNode identListNode = new ProtoCore.AST.AssociativeAST.IdentifierListNode(); identListNode.LeftNode = new ProtoCore.AST.AssociativeAST.IdentifierNode("newPoint"); identListNode.Optr = ProtoCore.DSASM.Operator.dot; identListNode.RightNode = new ProtoCore.AST.AssociativeAST.IdentifierNode("X"); ProtoCore.AST.AssociativeAST.BinaryExpressionNode stmt3 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("xval"), identListNode, ProtoCore.DSASM.Operator.assign); astList.Add(stmt3); //============================================== // // import ("ProtoGeometry.dll"); // p = Point.Bycoordinates(10.0, 10.0, 10.0); // newPoint = p.Translate(1.0,2.0,3.0); // xval = newPoint.X; // //============================================== // update graph CodeBlockNode cNode = new CodeBlockNode(); cNode.Body = astList; liveRunner.UpdateGraph(cNode); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("xval"); Assert.IsTrue((double)mirror.GetData().Data == 11.0); }
public void GraphILTest_ComplexWatch01() { // Build the AST trees // x = 1..10; ProtoCore.AST.AssociativeAST.RangeExprNode rangeExpr = new ProtoCore.AST.AssociativeAST.RangeExprNode(); rangeExpr.FromNode = new ProtoCore.AST.AssociativeAST.IntNode(0); rangeExpr.ToNode = new ProtoCore.AST.AssociativeAST.IntNode(5); rangeExpr.StepNode = new ProtoCore.AST.AssociativeAST.IntNode(1); ProtoCore.AST.AssociativeAST.BinaryExpressionNode assign = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("a"), rangeExpr, ProtoCore.DSASM.Operator.assign); List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); astList.Add(assign); // Instantiate GraphSyncData List<Subtree> addedList = new List<Subtree>(); addedList.Add(new Subtree(astList, System.Guid.NewGuid())); GraphSyncData syncData = new GraphSyncData(null, addedList, null); // emit the DS code from the AST tree liveRunner = new ProtoScript.Runners.LiveRunner(); liveRunner.UpdateGraph(syncData); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("a"); var collection = mirror.GetData().GetElements(); Assert.IsTrue((Int64)collection[1].Data == 1); }
public void TestBuildAST_01() { //============================================== // // import("ProtoGeometry.dll"); // p = Point.Bycoordinates(0.0, 2.0, 1.0); // xval = p.X; // //============================================== //============================================== // Build the import Nodes //============================================== ProtoScript.Runners.ILiveRunner liveRunner = new ProtoScript.Runners.LiveRunner(); List<string> libs = new List<string>(); libs.Add("ProtoGeometry.dll"); liveRunner.ResetVMAndImportLibrary(libs); string type = "Point"; long hostInstancePtr = 0; string functionName = "ByCoordinates"; List<IntPtr> userDefinedArgs = null; List<string> primitiveArgs = new List<string>(); primitiveArgs.Add("0"); primitiveArgs.Add("2"); primitiveArgs.Add("1"); string formatString = "ddd"; string symbolName = ""; string code = ""; AssociativeNode assign1 = ASTCompilerUtils.BuildAST(type, hostInstancePtr, functionName, userDefinedArgs, primitiveArgs, formatString, liveRunner.Core, ref symbolName, ref code); liveRunner.UpdateGraph(assign1); primitiveArgs.Clear(); primitiveArgs.Add("10"); primitiveArgs.Add("0"); primitiveArgs.Add("0"); functionName = "Translate"; AssociativeNode assign2 = ASTCompilerUtils.BuildAST(symbolName, hostInstancePtr, functionName, userDefinedArgs, primitiveArgs, formatString, liveRunner.Core, ref symbolName, ref code); liveRunner.UpdateGraph(assign2); //============================================== // Build a binary expression to retirieve the x property // xval = p.X; //============================================== List<ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List<ProtoCore.AST.AssociativeAST.AssociativeNode>(); ProtoCore.AST.AssociativeAST.IdentifierListNode identListNode = new ProtoCore.AST.AssociativeAST.IdentifierListNode(); identListNode.LeftNode = new ProtoCore.AST.AssociativeAST.IdentifierNode(symbolName); identListNode.Optr = ProtoCore.DSASM.Operator.dot; identListNode.RightNode = new ProtoCore.AST.AssociativeAST.IdentifierNode("X"); ProtoCore.AST.AssociativeAST.BinaryExpressionNode stmt2 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("xval"), identListNode, ProtoCore.DSASM.Operator.assign); astList.Add(stmt2); //============================================== // // import("ProtoGeometry.dll"); // p = Point.Bycoordinates(0.0, 20.0, 1.0); // q = p.Translate(10.0, 0.0, 0.0); // xval = p.X; // //============================================== // update graph CodeBlockNode cNode = new CodeBlockNode(); cNode.Body = astList; liveRunner.UpdateGraph(cNode); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("xval"); Assert.IsTrue((double)mirror.GetData().Data == 10.0); }
public void TestAdd01() { List<string> codes = new List<string>() { "a = 1;", "x = a; y = a; z = a; p = DummyPoint.ByCoordinates(x, y, z); px = p.X;", }; List<Guid> guids = Enumerable.Range(0, codes.Count).Select(_ => System.Guid.NewGuid()).ToList(); IEnumerable<int> index = Enumerable.Range(0, codes.Count); int shuffleCount = codes.Count; // in which add order, LiveRunner should get the same result. for (int i = 0; i < shuffleCount; ++i) { ILiveRunner liveRunner = new ProtoScript.Runners.LiveRunner(); liveRunner.ResetVMAndResyncGraph(new List<string> { "FFITarget.dll" }); index = index.OrderBy(_ => randomGen.Next()); var added = index.Select(idx => ProtoTestFx.TD.TestFrameWork.CreateSubTreeFromCode(guids[idx], codes[idx])).ToList(); var syncData = new GraphSyncData(null, added, null); liveRunner.UpdateGraph(syncData); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("px"); var value = (double)mirror.GetData().Data; Assert.AreEqual(value, 1); } }
public void TestBuildAST_01() { //============================================== // // import("ProtoGeometry.dll"); // p = Point.Bycoordinates(0.0, 2.0, 1.0); // xval = p.X; // //============================================== //============================================== // Build the import Nodes //============================================== ProtoScript.Runners.ILiveRunner liveRunner = new ProtoScript.Runners.LiveRunner(); List <string> libs = new List <string>(); libs.Add("ProtoGeometry.dll"); liveRunner.ResetVMAndImportLibrary(libs); string type = "Point"; long hostInstancePtr = 0; string functionName = "ByCoordinates"; List <IntPtr> userDefinedArgs = null; List <string> primitiveArgs = new List <string>(); primitiveArgs.Add("0"); primitiveArgs.Add("2"); primitiveArgs.Add("1"); string formatString = "ddd"; string symbolName = ""; string code = ""; AssociativeNode assign1 = ASTCompilerUtils.BuildAST(type, hostInstancePtr, functionName, userDefinedArgs, primitiveArgs, formatString, liveRunner.Core, ref symbolName, ref code); liveRunner.UpdateGraph(assign1); primitiveArgs.Clear(); primitiveArgs.Add("10"); primitiveArgs.Add("0"); primitiveArgs.Add("0"); functionName = "Translate"; AssociativeNode assign2 = ASTCompilerUtils.BuildAST(symbolName, hostInstancePtr, functionName, userDefinedArgs, primitiveArgs, formatString, liveRunner.Core, ref symbolName, ref code); liveRunner.UpdateGraph(assign2); //============================================== // Build a binary expression to retirieve the x property // xval = p.X; //============================================== List <ProtoCore.AST.AssociativeAST.AssociativeNode> astList = new List <ProtoCore.AST.AssociativeAST.AssociativeNode>(); ProtoCore.AST.AssociativeAST.IdentifierListNode identListNode = new ProtoCore.AST.AssociativeAST.IdentifierListNode(); identListNode.LeftNode = new ProtoCore.AST.AssociativeAST.IdentifierNode(symbolName); identListNode.Optr = ProtoCore.DSASM.Operator.dot; identListNode.RightNode = new ProtoCore.AST.AssociativeAST.IdentifierNode("X"); ProtoCore.AST.AssociativeAST.BinaryExpressionNode stmt2 = new ProtoCore.AST.AssociativeAST.BinaryExpressionNode( new ProtoCore.AST.AssociativeAST.IdentifierNode("xval"), identListNode, ProtoCore.DSASM.Operator.assign); astList.Add(stmt2); //============================================== // // import("ProtoGeometry.dll"); // p = Point.Bycoordinates(0.0, 20.0, 1.0); // q = p.Translate(10.0, 0.0, 0.0); // xval = p.X; // //============================================== // update graph CodeBlockNode cNode = new CodeBlockNode(); cNode.Body = astList; liveRunner.UpdateGraph(cNode); ProtoCore.Mirror.RuntimeMirror mirror = liveRunner.InspectNodeValue("xval"); Assert.IsTrue((double)mirror.GetData().Data == 10.0); }