Example #1
0
 public void LoopFinder_WhileGoto2_TagNodes()
 {
     var sa = new StructureAnalysis(new MockWhileGoto2().Procedure);
     sa.BuildProcedureStructure();
     sa.FindStructures();
     sa.ProcedureStructure.Write(Console.Out);
 }
 private void CompileTest(ProcedureBuilder mock)
 {
     proc = mock.Procedure;
     StructureAnalysis sa = new StructureAnalysis(mock.Procedure);
     sa.BuildProcedureStructure();
     sa.FindStructures();
     curProc = sa.ProcedureStructure;
 }
Example #3
0
        private void RunTest(string sExp, Procedure proc)
        {
            var ps  = new StructureAnalysis(new FakeDecompilerEventListener(), new Program(), proc);
            var reg = ps.Execute();
            var sb  = new StringWriter();

            reg.Write(sb);
            sb.GetStringBuilder().Replace("\t", "    ");
            var s = sb.ToString();

            if (sExp != s)
            {
                Debug.WriteLine(s);
                Assert.AreEqual(sExp, s);
            }
        }
Example #4
0
 public string AnalysisWhile(string structure)
 {
     try
     {
         bool analysis = StructureAnalysis.CheckStructWhile(structure);
         return(analysis ? "Конструкция while выполнится хотя бы 1 раз." : "Конструкция while не выполнится ни разу.");
     }
     catch (ArgumentException ex)
     {
         return(ex.Message);
     }
     catch (Exception)
     {
         return("Строка должна быть конструкцией языка C#.");
     }
 }
Example #5
0
 public string AnalysisFor(string structure)
 {
     try
     {
         int analysis = StructureAnalysis.CheckStructFor(structure);
         return("Конструкция for выполниться " + analysis + " раз.");
     }
     catch (ArgumentException ex)
     {
         return(ex.Message);
     }
     catch (Exception)
     {
         return("Строка должна быть конструкцией языка C#.");
     }
 }
Example #6
0
        private void RunTest32(string expected, Program program)
        {
            var sw = new StringWriter();

            foreach (var proc in program.Procedures.Values)
            {
                var cfgc = new ControlFlowGraphCleaner(proc);
                cfgc.Transform();
                var sa = new StructureAnalysis(proc);
                sa.Structure();
                var fmt = new CodeFormatter(new TextFormatter(sw));
                fmt.Write(proc);
                sw.WriteLine("===");
            }
            Console.WriteLine(sw);
            Assert.AreEqual(expected, sw.ToString());
        }
Example #7
0
        private void RunTest(ProcedureBuilder mock, string outFilename)
        {
            Procedure proc = mock.Procedure;
            using (FileUnitTester fut = new FileUnitTester(outFilename))
            {
                ControlFlowGraphCleaner cfgc = new ControlFlowGraphCleaner(proc);
                cfgc.Transform();
                proc.Write(false, fut.TextWriter);
                fut.TextWriter.WriteLine();

                StructureAnalysis sa = new StructureAnalysis(proc);
                sa.Structure();
                CodeFormatter fmt = new CodeFormatter(new TextFormatter(fut.TextWriter));
                fmt.Write(proc);
                fut.TextWriter.WriteLine("===========================");

                fut.AssertFilesEqual();
            }
        }
Example #8
0
        private void RunTest(ProcedureBuilder mock, string outFilename)
        {
            Procedure proc = mock.Procedure;

            using (FileUnitTester fut = new FileUnitTester(outFilename))
            {
                ControlFlowGraphCleaner cfgc = new ControlFlowGraphCleaner(proc);
                cfgc.Transform();
                proc.Write(false, fut.TextWriter);
                fut.TextWriter.WriteLine();

                StructureAnalysis sa = new StructureAnalysis(proc);
                sa.Structure();
                CodeFormatter fmt = new CodeFormatter(new TextFormatter(fut.TextWriter));
                fmt.Write(proc);
                fut.TextWriter.WriteLine("===========================");

                fut.AssertFilesEqual();
            }
        }
Example #9
0
        private void RunTest16(string sourceFilename, string outFilename, Address addrBase)
        {
            using (FileUnitTester fut = new FileUnitTester(outFilename))
            {
                RewriteProgramMsdos(sourceFilename, addrBase);
                foreach (Procedure proc in program.Procedures.Values)
                {
                    var cfgc = new ControlFlowGraphCleaner(program.Procedures.Values[0]);
                    cfgc.Transform();
                    proc.Write(false, fut.TextWriter);
                    fut.TextWriter.WriteLine();

                    var sa = new StructureAnalysis(proc);
                    sa.Structure();
                    var fmt = new CodeFormatter(new TextFormatter(fut.TextWriter));
                    fmt.Write(proc);
                    fut.TextWriter.WriteLine("===========================");
                }
                fut.AssertFilesEqual();
            }
        }
Example #10
0
        private void RunTest16(string sourceFilename, string outFilename, Address addrBase)
        {
            using (FileUnitTester fut = new FileUnitTester(outFilename))
            {
                RewriteProgramMsdos(sourceFilename, addrBase);
                foreach (Procedure proc in program.Procedures.Values)
                {
                    var cfgc = new ControlFlowGraphCleaner(program.Procedures.Values[0]);
                    cfgc.Transform();
                    proc.Write(false, fut.TextWriter);
                    fut.TextWriter.WriteLine();

                    var sa = new StructureAnalysis(proc);
                    sa.Structure();
                    var fmt = new CodeFormatter(new TextFormatter(fut.TextWriter));
                    fmt.Write(proc);
                    fut.TextWriter.WriteLine("===========================");
                }
                fut.AssertFilesEqual();
            }
        }
Example #11
0
        private void RunTest(string expected, Program program)
        {
            var sw = new StringWriter();

            foreach (var proc in program.Procedures.Values)
            {
                var cfgc = new ControlFlowGraphCleaner(proc);
                cfgc.Transform();
                var sa = new StructureAnalysis(new FakeDecompilerEventListener(), program, proc);
                sa.Structure();
                var fmt = proc.CreateCodeFormatter(new TextFormatter(sw));
                fmt.Write(proc);
                sw.WriteLine("===");
            }
            try
            {
                Assert.AreEqual(expected, sw.ToString());
            } catch
            {
                Console.WriteLine(sw);
                throw;
            }
        }
        private void RunTest(string sExp, Procedure proc)
        {
            var cfgc = new ControlFlowGraphCleaner(proc);

            cfgc.Transform();
            if (ccc != null)
            {
                ccc.Transform();
            }
            var ps  = new StructureAnalysis(new FakeDecompilerEventListener(), new Program(), proc);
            var reg = ps.Execute();
            var sb  = new StringWriter();

            reg.Write(sb);
            sb.GetStringBuilder().Replace("\t", "    ");
            var s = sb.ToString();

            if (sExp != s)
            {
                Debug.WriteLine(s);
                Console.WriteLine(s);
                Assert.AreEqual(sExp, s);
            }
        }
Example #13
0
        private void Select_Members()
        {
            dgv_columns.Rows.Clear();

            chk_sele_all.Checked = true;

            List <MemberIncidence> list_mem   = new List <MemberIncidence>();
            List <int>             list_mem1  = new List <int>();
            List <List <int> >     list_conts = new List <List <int> >();

            for (int i = 0; i < AST_DOC.Members.Count; i++)
            {
                var item = AST_DOC.Members[i];

                if (item.EndNode.X == item.StartNode.X &&
                    item.EndNode.Y != item.StartNode.Y &&
                    item.EndNode.Z == item.StartNode.Z)
                {
                    list_mem.Add(item);
                }
            }

            bool flag = false;


            List <int>         lst_jnt = new List <int>();
            List <List <int> > all_jnt = new List <List <int> >();

            MovingLoadAnalysis.frm_ProgressBar.ON("Reading Members......");
            for (int i = 0; i < list_mem.Count; i++)
            {
                MovingLoadAnalysis.frm_ProgressBar.SetValue(i, list_mem.Count);
                flag = false;
                foreach (var item in list_conts)
                {
                    if (item.Contains(list_mem[i].MemberNo))
                    {
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    JointCoordinateCollection cont_jcc = new JointCoordinateCollection();


                    list_mem1 = Get_Continuous_Members(list_mem[i], ref cont_jcc);
                    list_conts.Add(list_mem1);

                    lst_jnt = new List <int>();
                    foreach (var item in cont_jcc)
                    {
                        lst_jnt.Add(item.NodeNo);
                    }
                    all_jnt.Add(lst_jnt);
                }
            }
            MovingLoadAnalysis.frm_ProgressBar.OFF();


            MemberIncidence mi = null;


            double Pu  = 0.0;
            double Mux = 0.0;
            double Muy = 0.0;

            for (int i = 0; i < list_conts.Count; i++)
            {
                var item = list_conts[i];
                mi = AST_DOC.Members.Get_Member(item[0]);

                //Pu = StructureAnalysis.GetJoint_R1_Axial(all_jnt[i]);
                //Mux = StructureAnalysis.GetJoint_M2_Bending(all_jnt[i]);
                //Muy = StructureAnalysis.GetJoint_M3_Bending(all_jnt[i]);


                Pu = StructureAnalysis.GetJoint_R1_Axial(all_jnt[i]);
                //Mux = StructureAnalysis.GetJoint_M2_Bending(all_jnt[i]);
                Mux = StructureAnalysis.GetJoint_ShearForce(all_jnt[i]);
                Muy = StructureAnalysis.GetJoint_M3_Bending(all_jnt[i]);


                dgv_columns.Rows.Add(true, "C" + (i + 1), MyStrings.Get_Array_Text(item), col_design.Section_Name, col_design.h, Main_Bar_Dia, col_design.bar_nos, Tie_Bar_Dia, Pu, Mux, Muy, "");
            }
        }
Example #14
0
        private void Select_Members()
        {
            double d = MyStrings.StringToDouble(cmb_flr_lvl.Text, 0.0);

            dgv_beams.Rows.Clear();
            cmb_sele_all.Checked = true;

            //for (int i = 0; i < AST_DOC.Members.Count; i++)
            //{
            //    var item = AST_DOC.Members[i];

            //    if (item.EndNode.Y == d && item.StartNode.Y == d)
            //    {
            //        dgv_beams.Rows.Add(true, item.MemberNo, "", item.Property.YD, item.Property.ZD);
            //    }
            //}

            List <MemberIncidence> list_mem   = new List <MemberIncidence>();
            List <int>             list_mem1  = new List <int>();
            List <List <int> >     list_conts = new List <List <int> >();

            for (int c = 0; c < cmb_flr_lvl.Items.Count; c++)
            {
                d = MyStrings.StringToDouble(cmb_flr_lvl.Items[c].ToString(), 0.0);

                for (int i = 0; i < AST_DOC.Members.Count; i++)
                {
                    var item = AST_DOC.Members[i];

                    if (item.EndNode.Y == d && item.StartNode.Y == d)
                    //if (item.EndNode.Y == item.StartNode.Y)
                    {
                        list_mem.Add(item);
                    }
                }
            }
            bool flag = false;

            MovingLoadAnalysis.frm_ProgressBar.On = false;
            MovingLoadAnalysis.frm_ProgressBar.ON("Reading continuous Beam Nos........");


            MemberIncidence mi     = null;
            int             count  = 1;
            double          last_Y = 0.0;

            double am1, am2, am3, am4, av1, av2, av3;

            am1 = am2 = am3 = am4 = av1 = av2 = av3 = 0.0;

            JointCoordinateCollection cont_jcc = new JointCoordinateCollection();
            int cnt = 1;

            for (int i = 0; i < list_mem.Count; i++)
            {
                MovingLoadAnalysis.frm_ProgressBar.SetValue(i, list_mem.Count);
                flag = false;
                foreach (var item in list_conts)
                {
                    if (item.Contains(list_mem[i].MemberNo))
                    {
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    cont_jcc  = new JointCoordinateCollection();
                    list_mem1 = Get_Continuous_Beams(list_mem[i], ref cont_jcc);
                    list_conts.Add(list_mem1);


                    #region

                    var item = list_mem1;


                    var lst_jnt = new List <int>();
                    mi = AST_DOC.Members.Get_Member(item[0]);


                    foreach (var mbr in list_mem1)
                    {
                        mi = AST_DOC.Members.Get_Member(mbr);

                        if (!lst_jnt.Contains(mi.EndNode.NodeNo))
                        {
                            lst_jnt.Add(mi.EndNode.NodeNo);
                        }
                        if (!lst_jnt.Contains(mi.StartNode.NodeNo))
                        {
                            lst_jnt.Add(mi.StartNode.NodeNo);
                        }
                    }

                    if (last_Y != mi.EndNode.Y)
                    {
                        count = 1;
                    }

                    //beamDes.Get_All_Forces(cont_jcc, ref am1, ref am2, ref am3, ref am4, ref av1, ref av2, ref av3);


                    am1 = StructureAnalysis.GetJoint_MomentForce(lst_jnt);
                    am2 = StructureAnalysis.GetJoint_ShearForce(lst_jnt);
                    dgv_beams.Rows.Add(cnt++, true, mi.EndNode.Y.ToString("f4"), "B" + (count++),
                                       MyStrings.Get_Array_Text(item),
                                       //mi.Property.YD, mi.Property.ZD,
                                       beamDes.sectionName,

                                       beamDes.h,
                                       am1, am2,

                                       "");
                    last_Y = mi.EndNode.Y;
                    #endregion
                }
            }
            MovingLoadAnalysis.frm_ProgressBar.OFF();


            //MemberIncidence mi = null;
            //int count = 1;
            //double last_Y = 0.0;

            //double am1, am2, am3, am4, av1, av2, av3;

            //am1 = am2 = am3 = am4 = av1 = av2 = av3 = 0.0;


            //for (int i = 0; i < list_conts.Count; i++)
            //{
            //    var item = list_conts[i];

            //    mi = AST_DOC.Members.Get_Member(item[0]);
            //    if (last_Y != mi.EndNode.Y)
            //    {
            //        count = 1;
            //    }


            //    dgv_beams.Rows.Add(i+1, true, mi.EndNode.Y.ToString("f3"), "B" + (count++),
            //        MyStrings.Get_Array_Text(item),
            //        mi.Property.YD, mi.Property.ZD,
            //        d1, d2, d3, d4, d5, d6,
            //        beamDes.Shear_Bar_dia,
            //        am1.ToString("f3"),
            //        am2.ToString("f3"),
            //        am3.ToString("f3"),
            //        am4.ToString("f3"),
            //        av1.ToString("f3"),
            //        av2.ToString("f3"),
            //        av3.ToString("f3"),
            //         "");
            //    last_Y = mi.EndNode.Y;
            //}
        }
Example #15
0
        private void Select_Members()
        {
            double min_y = 999;

            for (int i = 0; i < AST_DOC.Members.Count; i++)
            {
                var item = AST_DOC.Members[i];

                if (item.StartNode.Y < min_y)
                {
                    min_y = item.StartNode.Y;
                }
                if (item.EndNode.Y < min_y)
                {
                    min_y = item.EndNode.Y;
                }
            }

            dgv_columns.Rows.Clear();

            chk_sele_all.Checked = true;

            List <MemberIncidence> list_mem   = new List <MemberIncidence>();
            List <int>             list_mem1  = new List <int>();
            List <List <int> >     list_conts = new List <List <int> >();

            for (int i = 0; i < AST_DOC.Members.Count; i++)
            {
                var item = AST_DOC.Members[i];

                if (item.EndNode.X == item.StartNode.X &&
                    item.EndNode.Y != item.StartNode.Y &&
                    item.EndNode.Z == item.StartNode.Z)
                {
                    if (item.EndNode.Y == min_y ||
                        item.StartNode.Y == min_y)
                    {
                        list_mem.Add(item);
                    }
                }
            }

            bool flag = false;


            MemberIncidence mi = null;

            double P  = 0.0;
            double Mx = 0.0;

            List <int> all_jnt = new List <int>();

            for (int i = 0; i < list_mem.Count; i++)
            {
                var item = list_mem[i];

                all_jnt.Clear();
                all_jnt.Add(item.StartNode.NodeNo);
                all_jnt.Add(item.EndNode.NodeNo);

                P = StructureAnalysis.GetJoint_R1_Axial(all_jnt);
                //Mx = StructureAnalysis.GetJoint_M1_Torsion(all_jnt);
                Mx = StructureAnalysis.GetJoint_MomentForce(all_jnt);
                mi = item;
                dgv_columns.Rows.Add((i + 1), true, "F" + (i + 1), item.MemberNo,
                                     mi.Property.YD,
                                     mi.Property.ZD,
                                     Foot_Des.l,
                                     Foot_Des.b,
                                     Foot_Des.P1,
                                     Foot_Des.P2,
                                     Foot_Des.ph,
                                     Foot_Des.bar_dia,
                                     P, Mx, "");
            }
        }
Example #16
0
 private void RunTest32(string expected, Program program)
 {
     var sw = new StringWriter();
     foreach (var proc in program.Procedures.Values)
     {
         var cfgc = new ControlFlowGraphCleaner(proc);
         cfgc.Transform();
         var sa = new StructureAnalysis(proc);
         sa.Structure();
         var fmt = new CodeFormatter(new TextFormatter(sw));
         fmt.Write(proc);
         sw.WriteLine("===");
     }
     Console.WriteLine(sw);
     Assert.AreEqual(expected, sw.ToString());
 }