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; }
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); } }
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#."); } }
public string AnalysisFor(string structure) { try { int analysis = StructureAnalysis.CheckStructFor(structure); return("Конструкция for выполниться " + analysis + " раз."); } catch (ArgumentException ex) { return(ex.Message); } catch (Exception) { return("Строка должна быть конструкцией языка C#."); } }
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()); }
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(); } }
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(); } }
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); } }
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, ""); } }
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; //} }
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, ""); } }