示例#1
0
        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");
        }
示例#2
0
        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");
        }
示例#3
0
        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");
        }
示例#4
0
        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");
        }
示例#5
0
        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");
        }
示例#6
0
        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.");
        }
示例#7
0
        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");
        }
示例#8
0
        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);
        }
示例#9
0
        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");
        }
示例#10
0
        public void TestAddOutsideLoopWithJustInlineBLock()
        {
            var target = new GeneratedCode();

            target.Add(new Statements.StatementInlineBlock());
            target.AddOutsideLoop(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)));
        }
示例#11
0
        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");
        }
示例#12
0
        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");
        }
示例#13
0
 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");
 }
示例#14
0
        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");
        }
示例#15
0
        public void TestPopUpOneLevelLoopInline()
        {
            GeneratedCode gc = new GeneratedCode();

            gc.Add(new StatementInlineBlock());
            gc.Pop(true);
        }
示例#16
0
        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.");
        }
示例#17
0
        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");
        }
示例#18
0
        public void TestResultScopeNull()
        {
            var gc = new GeneratedCode();
            var b  = new StatementInlineBlock();

            gc.Add(b);
            gc.AddAtResultScope(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)));
        }
示例#19
0
        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");
        }
示例#20
0
        public void RemoveMissingStatement()
        {
            var fixture = new GeneratedCode();

            fixture.Add(new StatementInlineBlock());
            var s1 = new SimpleStatement();

            fixture.Remove(s1);
        }
示例#21
0
        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.");
        }
示例#22
0
        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)));
        }
示例#23
0
        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);
        }
示例#24
0
        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");
        }
示例#25
0
        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");
            }
        }
示例#26
0
        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?");
        }
示例#27
0
        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");
            }
        }
示例#28
0
        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");
        }
示例#29
0
 public void TestAddOutsideLoopWithJustInlineBLock()
 {
     var target = new GeneratedCode();
     target.Add(new Statements.StatementInlineBlock());
     target.AddOutsideLoop(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)));
 }
示例#30
0
 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");
 }
示例#31
0
 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.");
 }
示例#32
0
        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)));

        }
示例#33
0
        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");
        }
示例#34
0
        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?");
        }
示例#35
0
 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.");
 }
示例#36
0
 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");
 }
示例#37
0
        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");
        }
示例#38
0
        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 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");
        }
示例#40
0
 public void TestResultScopeNull()
 {
     var gc = new GeneratedCode();
     var b = new StatementInlineBlock();
     gc.Add(b);
     gc.AddAtResultScope(DeclarableParameter.CreateDeclarableParameterExpression(typeof(int)));
 }
示例#41
0
        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");
        }
示例#42
0
 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 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");
        }
示例#44
0
 public void TestPopUpOneLevelLoopInline()
 {
     GeneratedCode gc = new GeneratedCode();
     gc.Add(new StatementInlineBlock());
     gc.Pop(true);
 }
示例#45
0
        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");
        }
示例#46
0
 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.");
 }
示例#47
0
 public void RemoveMissingStatement()
 {
     var fixture = new GeneratedCode();
     fixture.Add(new StatementInlineBlock());
     var s1 = new SimpleStatement();
     fixture.Remove(s1);
 }
示例#48
0
        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");
        }