public void TestResultScopeCurrentScope() { var gc = new GeneratedCode(); var b1 = new StatementInlineBlock(); gc.Add(b1); gc.SetCurrentScopeAsResultScope(); var outterScope = gc.CurrentScope; var b2 = new StatementInlineBlock(); gc.Add(b2); gc.SetCurrentScopeAsResultScope(); gc.AddAtResultScope(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int))); Assert.AreEqual(0, b1.DeclaredVariables.Count(), "variables at outside loop after 0 add"); Assert.AreEqual(1, b2.DeclaredVariables.Count(), "variables at inner loop after 1 add"); gc.CurrentScope = outterScope; gc.AddAtResultScope(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int))); Assert.AreEqual(1, b1.DeclaredVariables.Count(), "variables at outside loop after 1 add"); Assert.AreEqual(1, b2.DeclaredVariables.Count(), "variables at inner loop after 2 add"); }
public void TestChangeScopeSpecificNextLevel() { GeneratedCode target = new GeneratedCode(); target.Add(new StatementInlineBlock()); IStatement s = new StatementInlineBlock(); var deepestStatementLevel = TestUtils.GetDeepestStatementLevel(target); var deepestDeclarLevel = TestUtils.GetDeepestBookingLevel(target); var currentS = target.CurrentScope; var curVars = deepestDeclarLevel.DeclaredVariables.Count(); var curStatements = deepestStatementLevel.Statements.Count(); var v1 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); target.Add(v1); target.Add(s); target.CurrentScope = currentS; var v2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); target.Add(v2); s.Parent = null; target.Add(s); Assert.AreEqual(curStatements + 2, deepestStatementLevel.Statements.Count(), "Scope reset, should always be two extra statements here!"); Assert.AreEqual(curVars + 2, deepestDeclarLevel.DeclaredVariables.Count(), "Scope reset should have also reset where the variable was pointing"); }
public void CombineOneTwoLevelAndOneOneLevelFunctions2() { var q1 = new GeneratedCode(); var q2 = new GeneratedCode(); var f1 = QMFuncUtils.GenerateFunction(); var r1 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); var s1 = new Statements.StatementAssign(r1, new Variables.ValSimple(f1.Name + "()", typeof(int))); var f2 = GenerateFunction2(); var r2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); var s2 = new Statements.StatementAssign(r2, new Variables.ValSimple(f2[1].Name + "()", typeof(int))); q1.Add(f1); q1.Add(s1); q1.SetResult(r1); q2.Add(f2[0]); q2.Add(f2[1]); q2.Add(s2); q2.SetResult(r2); var target = new CombinedGeneratedCode(); target.AddGeneratedCode(q1); target.AddGeneratedCode(q2); target.DumpCodeToConsole(); Assert.AreEqual(2, target.Functions.Count(), "# of functions should be combined to 2"); Assert.AreEqual(1, target.QueryCode().Count(), "# of query code blocks"); Assert.AreEqual(2, target.QueryCode().First().Statements.Count(), "# of statements in the combined block."); Assert.IsFalse(target.DumpCode().Where(l => l.Contains(f2[0].Name)).Any(), "The new function was still in there"); }
public void TestAddOutsideLoopWithOnStatement() { var target = new GeneratedCode(); var blk = new Statements.StatementInlineBlock(); target.Add(blk); target.Add(new LINQToTTreeLib.Tests.TestUtils.SimpleLoop()); target.AddOutsideLoop(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int))); Assert.AreEqual(1, blk.DeclaredVariables.Count(), "# of loop declared variables"); }
public void TestPopUpOneLevelLoopWithLoop() { GeneratedCode gc = new GeneratedCode(); var loopV = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); gc.Add(new StatementForLoop(loopV, new Variables.ValSimple("5", typeof(int)))); gc.Pop(true); Assert.AreEqual(1, gc.CodeBody.Statements.Count(), "# of statements present now"); gc.Add(new StatementAssign(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)), new Variables.ValSimple("ih", typeof(int)))); Assert.AreEqual(2, gc.CodeBody.Statements.Count(), "# of statements present now"); }
public void TestFirstBookingNextLevel() { var i = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); var gc = new GeneratedCode(); gc.Add(i); gc.Add(new StatementFilter(new ValSimple("dude", typeof(bool)))); var r = gc.FirstAllInScopeFromNow(new IDeclaredParameter[] { i }); Assert.AreEqual(r, gc.CodeBody, "Same code body."); }
public void RemoveStatement() { var fixture = new GeneratedCode(); fixture.Add(new StatementInlineBlock()); var s1 = new SimpleStatement(); fixture.Add(s1); Assert.AreEqual(1, (fixture.CodeBody.Statements.First() as IBookingStatementBlock).Statements.Count(), "before removal"); fixture.Remove(s1); Assert.AreEqual(0, (fixture.CodeBody.Statements.First() as IBookingStatementBlock).Statements.Count(), "after removal"); }
public void CheckDepthAndPopWorkTogether() { var target = new GeneratedCode(); var s1 = new StatementInlineBlock(); target.Add(s1); var s2 = new StatementInlineBlock(); target.Add(s2); Assert.AreEqual(3, target.Depth); target.Pop(); Assert.AreEqual(2, target.Depth); }
public void TestCompoundPostInsert() { var gc = new GeneratedCode(); gc.Add(new Statements.StatementSimpleStatement("dir")); var block = new Statements.StatementInlineBlock(); gc.Add(block); gc.Add(new Statements.StatementSimpleStatement("dir")); gc.Add(new Statements.StatementSimpleStatement("fork")); gc.Pop(); gc.Add(new Statements.StatementSimpleStatement("dir")); Assert.AreEqual(3, gc.CodeBody.Statements.Count(), "# of statements"); }
public void TestAddOutsideLoopWithJustInlineBLock() { var target = new GeneratedCode(); target.Add(new Statements.StatementInlineBlock()); target.AddOutsideLoop(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int))); }
public void TestForFunctionNumber() { CPPTranslator target = new CPPTranslator(); var vInt = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); vInt.SetInitialValue("2"); GeneratedCode code = new GeneratedCode(); code.SetResult(vInt); var innerBlock = new StatementInlineBlock(); var vInt2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); vInt2.SetInitialValue("5"); innerBlock.Add(vInt2); code.Add(innerBlock); var r = TranslateGeneratedCode(target, code); Assert.IsTrue(r.ContainsKey("NumberOfQueryFunctions"), "Number of functions isn't here"); Assert.IsInstanceOfType(r["NumberOfQueryFunctions"], typeof(int), "# function type"); Assert.AreEqual(1, r["NumberOfQueryFunctions"], "# of functions"); Assert.IsTrue(r.ContainsKey("QueryFunctionBlocks"), "Missing query function blocks"); Assert.IsInstanceOfType(r["QueryFunctionBlocks"], typeof(IEnumerable <IEnumerable <string> >), "Type is incorrect"); var codeBlocks = r["QueryFunctionBlocks"] as IEnumerable <IEnumerable <string> >; Assert.AreEqual(1, codeBlocks.Count(), "Wrong number of code blocks"); }
public void TestObjectInitalizerInInnerBlock() { CPPTranslator target = new CPPTranslator(); var vInt = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); vInt.SetInitialValue("2"); GeneratedCode code = new GeneratedCode(); code.SetResult(vInt); var innerBlock = new StatementInlineBlock(); var vInt2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); vInt2.SetInitialValue("5"); innerBlock.Add(vInt2); innerBlock.Add(new StatementSimpleStatement("fork = dork")); code.Add(innerBlock); var r = TranslateGeneratedCode(target, code); var st = (r["QueryFunctionBlocks"] as IEnumerable <IEnumerable <string> >).First().ToArray(); Assert.AreEqual(6, st.Length, "incorrect number of statements"); Assert.AreEqual("int " + vInt2.RawValue + " = 5;", st[2].Trim(), "incorrect initialization"); }
public void AddQMFunc() { var gc = new GeneratedCode(); Assert.AreEqual(0, gc.QMFunctions.Count(), "# of functions before add"); gc.Add(new QMFuncSource()); Assert.AreEqual(1, gc.QMFunctions.Count(), "# of functions before add"); }
public void TestForFunctionNumber() { CPPTranslator target = new CPPTranslator(); var vInt = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); vInt.SetInitialValue("2"); GeneratedCode code = new GeneratedCode(); code.SetResult(vInt); var innerBlock = new StatementInlineBlock(); var vInt2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); vInt2.SetInitialValue("5"); innerBlock.Add(vInt2); code.Add(innerBlock); var r = TranslateGeneratedCode(target, code); Assert.IsTrue(r.ContainsKey("NumberOfQueryFunctions"), "Number of functions isn't here"); Assert.IsInstanceOfType(r["NumberOfQueryFunctions"], typeof(int), "# function type"); Assert.AreEqual(1, r["NumberOfQueryFunctions"], "# of functions"); Assert.IsTrue(r.ContainsKey("QueryFunctionBlocks"), "Missing query function blocks"); Assert.IsInstanceOfType(r["QueryFunctionBlocks"], typeof(IEnumerable<IEnumerable<string>>), "Type is incorrect"); var codeBlocks = r["QueryFunctionBlocks"] as IEnumerable<IEnumerable<string>>; Assert.AreEqual(1, codeBlocks.Count(), "Wrong number of code blocks"); }
public void TestPopUpOneLevelLoopInline() { GeneratedCode gc = new GeneratedCode(); gc.Add(new StatementInlineBlock()); gc.Pop(true); }
public void TestInScopeDownOneOK() { var gc = new GeneratedCode(); var sc = gc.CurrentScope; gc.Add(new StatementFilter(new ValSimple("true", typeof(bool)))); Assert.IsTrue(gc.InScopeNow(sc), "current scope should be in scope now."); }
public void TestResultScopeNull() { var gc = new GeneratedCode(); var b = new StatementInlineBlock(); gc.Add(b); gc.AddAtResultScope(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int))); }
public void TestAddOneLevelUpSingleLevel() { GeneratedCode gc = new GeneratedCode(); gc.Add(new Statements.StatementInlineBlock()); gc.AddOneLevelUp(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int))); Assert.AreEqual(1, gc.CodeBody.DeclaredVariables.Count(), "Expected top level declaration"); }
public void RemoveMissingStatement() { var fixture = new GeneratedCode(); fixture.Add(new StatementInlineBlock()); var s1 = new SimpleStatement(); fixture.Remove(s1); }
public void TestFirstBookingThisLevel() { var i = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); var gc = new GeneratedCode(); gc.Add(i); var r = gc.FirstAllInScopeFromNow(new IDeclaredParameter[] { i }); Assert.AreEqual(r, gc.CodeBody, "Same code body."); }
public void TestResultScopePop() { var gc = new GeneratedCode(); var b1 = new StatementInlineBlock(); gc.Add(b1); var b2 = new StatementInlineBlock(); gc.Add(b2); gc.SetCurrentScopeAsResultScope(); gc.AddAtResultScope(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int))); // This pop should remove the result scope, and it should be back to "null" now, which // should cause an exception. gc.Pop(); gc.AddAtResultScope(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int))); }
public void CheckPopAndCurrentScopeWorkTogether() { GeneratedCode target = new GeneratedCode(); IStatement s1 = new StatementInlineBlock(); target.Add(s1); var depth = target.Depth; var s2 = new StatementInlineBlock(); target.Add(s2); var firstTwoDown = target.CurrentScope; var s3 = new StatementInlineBlock(); target.Add(s3); target.CurrentScope = firstTwoDown; // This pop should put us at the s1 level. target.Pop(); Assert.AreEqual(depth, target.Depth); }
public void TestRememberExprPop() { var gc = new GeneratedCode(); var initialScope = gc.CurrentScope; gc.Add(new StatementInlineBlock()); var expr = Expression.Constant(10); var r = new LINQToTTreeLib.Variables.ValSimple("10", typeof(int)); gc.RememberSubexpression(expr, r); gc.CurrentScope = initialScope; Assert.IsNull(gc.LookupSubexpression(Expression.Constant(10)), "Expression after popping"); }
public void Pop(IStatement s, bool popPastLoop) { var gc = new GeneratedCode(); int depth = gc.Depth; gc.Add(s); bool good = s is IBookingStatementBlock; try { gc.Pop(popPastLoop); Assert.AreEqual(depth, gc.Depth, "Depth isn't set correctly"); Assert.IsTrue(good, "booking statement"); } catch (InvalidOperationException) { Assert.IsFalse(good, "a booking statement"); } }
public void TestRememberExprHideAndSeek() { var gc = new GeneratedCode(); var expr = Expression.Constant(5); var r1 = new LINQToTTreeLib.Variables.ValSimple("10", typeof(int)); gc.RememberSubexpression(expr, r1); var initialScope = gc.CurrentScope; gc.Add(new StatementInlineBlock()); var r2 = new LINQToTTreeLib.Variables.ValSimple("11", typeof(int)); gc.RememberSubexpression(expr, r2); Assert.AreEqual(r2, gc.LookupSubexpression(expr), "Is hidden one done right?"); gc.Pop(); Assert.AreEqual(r1, gc.LookupSubexpression(expr), "Is revealed one done right?"); }
public void TestSimpleCombine() { var q1 = new GeneratedCode(); var q2 = new GeneratedCode(); var s1 = new Statements.StatementSimpleStatement("dude1"); var s2 = new Statements.StatementSimpleStatement("dude2"); q1.Add(s1); q2.Add(s2); var v1 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); var v2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); q1.SetResult(v1); q2.SetResult(v2); var target = new CombinedGeneratedCode(); target.AddGeneratedCode(q1); target.AddGeneratedCode(q2); Assert.AreEqual(1, target.QueryCode().Count(), "didn't combine blocks correctly"); var c = target.QueryCode().First(); Assert.AreEqual(2, c.Statements.Count(), "bad # of statements in combined query"); var st1 = c.Statements.First(); var st2 = c.Statements.Skip(1).First(); Assert.IsInstanceOfType(st1, typeof(Statements.StatementSimpleStatement), "st1"); Assert.IsInstanceOfType(st2, typeof(Statements.StatementSimpleStatement), "st2"); var sst1 = st1 as Statements.StatementSimpleStatement; var sst2 = st2 as Statements.StatementSimpleStatement; Assert.IsTrue("dude1" == sst1.Line || "dude1" == sst2.Line, "sst1"); Assert.IsTrue("dude2" == sst1.Line || "dude2" == sst2.Line, "sst2"); }
public void TestAddOutsideLoopWithJustIn2Loops() { var target = new GeneratedCode(); target.Add(new Statements.StatementInlineBlock()); var loop = new LINQToTTreeLib.Tests.TestUtils.SimpleLoop(); target.Add(loop); target.Add(new LINQToTTreeLib.Tests.TestUtils.SimpleLoop()); target.AddOutsideLoop(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int))); Assert.AreEqual(1, loop.DeclaredVariables.Count(), "# of loop declared variables"); }
public void TestRememberExprPop() { var gc = new GeneratedCode(); var initialScope = gc.CurrentScope; gc.Add(new StatementInlineBlock()); var expr = Expression.Constant(10); var r = new LINQToTTreeLib.Variables.ValSimple("10", typeof(int)); gc.RememberSubExpression(expr, r); gc.CurrentScope = initialScope; Assert.IsNull(gc.LookupSubExpression(Expression.Constant(10)), "Expression after popping"); }
public void TestRememberExprHideAndSeek() { var gc = new GeneratedCode(); var expr = Expression.Constant(5); var r1 = new LINQToTTreeLib.Variables.ValSimple("10", typeof(int)); gc.RememberSubExpression(expr, r1); var initialScope = gc.CurrentScope; gc.Add(new StatementInlineBlock()); var r2 = new LINQToTTreeLib.Variables.ValSimple("11", typeof(int)); gc.RememberSubExpression(expr, r2); Assert.AreEqual(r2, gc.LookupSubExpression(expr), "Is hidden one done right?"); gc.Pop(); Assert.AreEqual(r1, gc.LookupSubExpression(expr), "Is revealed one done right?"); }
public void TestFirstBookingNextLevelIt() { var i = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); var gc = new GeneratedCode(); var ifs = new StatementFilter(new ValSimple("dude", typeof(bool))); gc.Add(ifs); gc.Add(i); var r = gc.FirstAllInScopeFromNow(new IDeclaredParameter[] { i }); Assert.AreEqual(r, ifs, "Same code body."); }
public void TestPopUpOneLevelLoopWithLoopDeeper() { GeneratedCode gc = new GeneratedCode(); var loopV = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); gc.Add(new StatementForLoop(loopV, new Variables.ValSimple("5", typeof(int)))); gc.Add(new StatementInlineBlock()); gc.Add(new StatementAssign(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)), new Variables.ValSimple("ih", typeof(int)))); gc.Pop(true); Assert.AreEqual(1, gc.CodeBody.Statements.Count(), "# of statements present now"); gc.Add(new StatementAssign(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)), new Variables.ValSimple("ih", typeof(int)))); Assert.AreEqual(2, gc.CodeBody.Statements.Count(), "# of statements present now"); }
public void TestInScopeUpOneNotOK() { var gc = new GeneratedCode(); gc.Add(new StatementFilter(new ValSimple("true", typeof(bool)))); var sc = gc.CurrentScope; gc.Pop(); Assert.IsFalse(gc.InScopeNow(sc), "current scope should be in scope now."); }
public void TestObjectInitalizerInInnerBlock() { CPPTranslator target = new CPPTranslator(); var vInt = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); vInt.SetInitialValue("2"); GeneratedCode code = new GeneratedCode(); code.SetResult(vInt); var innerBlock = new StatementInlineBlock(); var vInt2 = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)); vInt2.SetInitialValue("5"); innerBlock.Add(vInt2); innerBlock.Add(new StatementSimpleStatement("fork = dork")); code.Add(innerBlock); var r = TranslateGeneratedCode(target, code); var st = (r["QueryFunctionBlocks"] as IEnumerable<IEnumerable<string>>).First().ToArray(); Assert.AreEqual(6, st.Length, "incorrect number of statements"); Assert.AreEqual("int " + vInt2.RawValue + " = 5;", st[2].Trim(), "incorrect initialization"); }