System.CodeDom.Tests.CSharpCodeGenerationTests.ForLoops C# (CSharp) Method

ForLoops() private method

private ForLoops ( ) : void
return void
        public void ForLoops()
        {
            var nspace = new CodeNamespace("NSPC");

            CodeTypeDeclaration class1 = new CodeTypeDeclaration("ClassWithMethod");
            class1.IsClass = true;
            nspace.Types.Add(class1);

            var cmm = new CodeMemberMethod();
            cmm.Name = "TestBasicIterationStatement";
            cmm.Attributes = MemberAttributes.Public | MemberAttributes.Static;
            cmm.Statements.Add(new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(int)), "i"));
            cmm.Statements.Add(new CodeIterationStatement(new CodeAssignStatement(new
                CodeVariableReferenceExpression("i"), new CodePrimitiveExpression(1)),
                new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("i"),
                CodeBinaryOperatorType.LessThan, new CodePrimitiveExpression(8)),
                new CodeAssignStatement(new CodeVariableReferenceExpression("i"),
                new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("i"), CodeBinaryOperatorType.Multiply,
                new CodePrimitiveExpression(2)))));
            cmm.ReturnType = new CodeTypeReference(typeof(int));
            cmm.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression("i")));
            class1.Members.Add(cmm);

            cmm = new CodeMemberMethod();
            cmm.Name = "TestComplexIterationStatement";
            cmm.Attributes = MemberAttributes.Public | MemberAttributes.Static;
            cmm.ReturnType = new CodeTypeReference(typeof(int));
            cmm.Statements.Add(new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(int)), "i"));
            cmm.Statements.Add(new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(int)), "a", new CodePrimitiveExpression(7)));
            cmm.Statements.Add(new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(int)), "b"));
            cmm.Statements.Add(new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(int)), "c", new CodePrimitiveExpression(9)));
            cmm.Statements.Add(new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(int)), "d", new CodePrimitiveExpression(2)));
            CodeIterationStatement iteration = new CodeIterationStatement();
            iteration.IncrementStatement = new CodeAssignStatement(new CodeVariableReferenceExpression("i"),
                new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("i"), CodeBinaryOperatorType.Add,
                new CodePrimitiveExpression(1)));
            iteration.InitStatement = new CodeAssignStatement(new CodeVariableReferenceExpression("i"), new
                CodePrimitiveExpression(0));
            iteration.TestExpression = (new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("i"),
                CodeBinaryOperatorType.LessThan, new CodePrimitiveExpression(2)));
            CodeConditionStatement secondIf = new CodeConditionStatement(new CodeBinaryOperatorExpression(
                new CodeVariableReferenceExpression("c"), CodeBinaryOperatorType.LessThan, new CodePrimitiveExpression(10)),
                new CodeAssignStatement(new CodeVariableReferenceExpression("d"), new CodeBinaryOperatorExpression(
                new CodeVariableReferenceExpression("d"), CodeBinaryOperatorType.Subtract, new CodePrimitiveExpression(1))));

            CodeIterationStatement secondFor = new CodeIterationStatement();
            secondFor.Statements.Add(secondIf);
            secondFor.IncrementStatement = new CodeAssignStatement(new CodeVariableReferenceExpression("b"),
                new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("b"), CodeBinaryOperatorType.Add,
                new CodePrimitiveExpression(1)));
            secondFor.InitStatement = new CodeAssignStatement(new CodeVariableReferenceExpression("b"), new
                CodePrimitiveExpression(0));
            secondFor.TestExpression = (new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("b"),
                CodeBinaryOperatorType.LessThan, new CodePrimitiveExpression(2)));
            secondFor.Statements.Add(new CodeAssignStatement(new CodeVariableReferenceExpression("d"),
                new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("d"), CodeBinaryOperatorType.Multiply,
                new CodePrimitiveExpression(2))));

            CodeConditionStatement firstIf = new CodeConditionStatement();
            firstIf.Condition = new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("a"), CodeBinaryOperatorType.LessThan,
                new CodePrimitiveExpression(16));
            firstIf.TrueStatements.Add(secondFor);

            iteration.Statements.Add(firstIf);
            cmm.Statements.Add(iteration);
            cmm.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression("d")));
            class1.Members.Add(cmm);

            AssertEqual(nspace,
                @"namespace NSPC {
                      public class ClassWithMethod {
                          public static int TestBasicIterationStatement() {
                              int i;
                              for (i = 1; (i < 8); i = (i * 2)) {
                              }
                              return i;
                          }
                          public static int TestComplexIterationStatement() {
                              int i;
                              int a = 7;
                              int b;
                              int c = 9;
                              int d = 2;
                              for (i = 0; (i < 2); i = (i + 1)) {
                                  if ((a < 16)) {
                                      for (b = 0; (b < 2); b = (b + 1)) {
                                          if ((c < 10)) {
                                              d = (d - 1);
                                          }
                                          d = (d * 2);
                                      }
                                  }
                              }
                              return d;
                          }
                      }
                  }");
        }