public static void TraceDebug(CandidateAction action)
 {
     if (action.IsAsync && TraceDebugIncludeMethodCalls)
     {
         Output("TRACE: " + action);
     }
     else if (action.IsTau && TraceDebugIncludeTau)
     {
         Output("TRACE: " + action);
     }
     else if (action.IsDeadlocked)
     {
         Output("TRACE: " + action);
     }
     else if (!action.IsTau && action.IsSync && TraceDebugOn)
     {
         Output("TRACE: " + action);
     }
 }
        public void NewState(List<ProcessBase> activeProcs, CandidateAction chosenAction)
        {
            StringBuilder builder = new StringBuilder();

            if (chosenAction != null) {
                UpdateProcessActions(chosenAction.Process1);
                if (chosenAction.Process2 != null) {
                  UpdateProcessActions(chosenAction.Process2);
                }
            }
            foreach (ProcessBase pb in activeProcs) {
                string name = pb.ToString();
                Node proc = GetProcess(name);
                RemovePerformedActions(name, ref proc);
                builder.Append("\n\n# " + name + ": \n");
                if (pb.Parent != null) {
                    builder.Append("# Parent chain: ");
                    ProcessBase parent = pb.Parent;

                    List<string> parts = new List<string>();
                    while (parent != null) {
                        Node parentProc = GetProcess(parent.ToString());
                        string oneParent = parent + ": ";
                        if (parentProc.ChildNodes[0] != null) {
                            _formatter.Start(parentProc.ChildNodes[0]);
                            oneParent += (_formatter.GetFormatted());
                        }
                        if (parentProc.ChildNodes[1] != null) {
                            _formatter.Start(parentProc.ChildNodes[1]);
                            oneParent += _formatter.GetFormatted();
                        }
                        parts.Add(oneParent);
                        parent = parent.Parent;
                    }
                    parts.Reverse();
                    builder.Append(string.Join("; ", parts.ToArray()));
                    builder.Append("\n");
                }
                _formatter.Start(proc);
                builder.Append(FormatProc(_formatter.GetFormatted()));
            }
            _string = builder.ToString();
        }
 public static void TraceDebug(CandidateAction action)
 {
     if (action.IsAsync && TraceDebugIncludeMethodCalls) {
         Output("TRACE: " + action);
     } else if (action.IsTau && TraceDebugIncludeTau) {
         Output("TRACE: " + action);
     } else if (action.IsDeadlocked) {
         Output("TRACE: " + action);
     } else if (!action.IsTau && action.IsSync && TraceDebugOn) {
         Output("TRACE: " + action);
     }
 }
 private void StartExecution(object sender, EventArgs e)
 {
     if (_status == RunStatus.Stopped) {
         if (_loadedSystem != null) {
             _visual = new ProcessStateVisualization(_loadedSystem, _parser.Formatter);
         }
         _status = RunStatus.Running;
         ClearAll();
         processThreadWorker.RunWorkerAsync();
     } else if (_status == RunStatus.Stepping) {
         _status = RunStatus.Running;
         if (lstCandidateActions.Items.Count > 0) {
             _chosenAction = (CandidateAction)lstCandidateActions.Items[_rng.Next(lstCandidateActions.Items.Count)];
         }
     }
     EnableControls();
 }
 private void ExecuteSelectedAction(object sender, EventArgs e)
 {
     if (lstCandidateActions.SelectedItem != null) {
         _chosenAction = (CandidateAction)lstCandidateActions.SelectedItem;
     }
 }
 private void ExecuteRandomAction(object sender, EventArgs e)
 {
     if (lstCandidateActions.Items.Count > 0) {
         _chosenAction = (CandidateAction)lstCandidateActions.Items[_rng.Next(lstCandidateActions.Items.Count)];
     }
 }
        private CandidateAction ChooseActionInterActive(List<CandidateAction> candidates)
        {
            if (_status == RunStatus.Stepping) {
                UpdateState();
            }

            _chosenAction = null;
            lstCandidateActions.Invoke(new NewCandidateActionsDelegate(NewCandidateActions), candidates);

            if (_status == RunStatus.Stepping) {
                while (_chosenAction == null) {
                    Thread.Sleep(500); //Wait until user has selected something...
                }
                return _chosenAction;
            } else {
                return candidates[_rng.Next(candidates.Count)];
            }
        }