private List <Pair <PDLPred, long> > SynthTimer(PDLPred phi, HashSet <char> al, StringBuilder sb) { PDLEnumerator pdlEnumerator = new PDLEnumerator(); var solver = new CharSetSolver(BitWidth.BV64); Stopwatch sw = new Stopwatch(); var dfa = phi.GetDFA(al, solver); List <Pair <PDLPred, long> > predList = new List <Pair <PDLPred, long> >(); List <PDLPred> phiList = new List <PDLPred>(); PDLPred v; var func = new Func <PDLPred>(() => { sw.Start(); foreach (var p in pdlEnumerator.SynthesizePDL(al, dfa, solver, new StringBuilder(), 5000)) { sw.Stop(); predList.Add(new Pair <PDLPred, long>(p, sw.ElapsedMilliseconds)); sw.Start(); } return(null); }); var test = TryExecute(func, timeout, out v); phi.ToString(sb); sb.AppendLine(); sb.AppendLine("="); foreach (var pair in predList) { sb.AppendLine(); pair.First.ToString(sb); sb.AppendLine(); sb.AppendLine("Elapsed Time: " + pair.Second + " ms"); } return(predList); }
private List <Pair <int, Pair <PDLPred, long> > > SynthTimer(PDLPred phi, HashSet <char> al, StringBuilder sb) { PDLEnumerator pdlEnumerator = new PDLEnumerator(); var solver = new CharSetSolver(BitWidth.BV64); Stopwatch sw = new Stopwatch(); var dfa = DFAUtilities.normalizeDFA(phi.GetDFA(al, solver)).First; List <Pair <int, Pair <PDLPred, long> > > predList = new List <Pair <int, Pair <PDLPred, long> > >(); List <PDLPred> phiList = new List <PDLPred>(); PDLPred v; var func = new Func <PDLPred>(() => { foreach (var state in dfa.States) { var dfaSt = Automaton <BDD> .Create(dfa.InitialState, new int[] { state }, dfa.GetMoves()); dfaSt = dfaSt.Determinize(solver).Minimize(solver); sw.Reset(); sw.Start(); foreach (var p in pdlEnumerator.SynthesizePDL(al, dfaSt, solver, new StringBuilder(), 3000)) { sw.Stop(); predList.Add(new Pair <int, Pair <PDLPred, long> >(state, new Pair <PDLPred, long>(p, sw.ElapsedMilliseconds))); break; } } return(null); }); var test = TryExecute(func, timeout, out v); sb.Append("Language: "); phi.ToString(sb); sb.AppendLine(); //sb.AppendLine("States: "+dfa.StateCount); sb.AppendLine(); sb.AppendLine("---------------------------"); sb.AppendLine("STATE SUMMARY"); sb.AppendLine("---------------------------"); var coveredStates = new HashSet <int>(); foreach (var pair in predList) { sb.AppendLine(); coveredStates.Add(pair.First); sb.AppendLine("State " + pair.First + (((dfa.GetFinalStates()).Contains(pair.First))?(" is final"):(""))); sb.AppendLine("Elapsed Time: " + pair.Second.Second + " ms"); sb.AppendLine("Formula: "); pair.Second.First.ToString(sb); sb.AppendLine(); } sb.AppendLine(); foreach (var state in dfa.States) { if (!coveredStates.Contains(state)) { sb.AppendLine(string.Format("description for state {0} not found", state)); } } return(predList); }