/// <summary> /// Add <paramref name="this"/> to abstract successors if <paramref name="this"/> satisfies the invariants. /// </summary> /// <param name="currIndex"></param> /// <param name="pred"></param> /// <param name="abstract_succs"></param> /// <param name="abstract_succs_SW"></param> void AddToAbstractSuccessorsIfInvSat(int currIndex, StateImpl pred, HashSet <int> abstract_succs, StreamWriter abstract_succs_SW) { int p_hash = symmetryReduction ? pred.GetHashCode(true) : pred.GetHashCode(); int hash = symmetryReduction ? GetHashCode(true) : GetHashCode(); // Console.WriteLine(this.ToPrettyString()); if (mode == ExploreMode.Find_A_AP) // if we are locating a and ap { if (succHash == hash) { predHash = p_hash; throw new SuccessorFound(pred, this); } } if (invariant ? CheckAbstractStateInvariant(currIndex) && CheckTransInvariant(currIndex, pred) : true) { if (abstract_succs.Add(hash)) { if (FileDump) { abstract_succs_SW.Write(ToPrettyString()); abstract_succs_SW.WriteLine("=================================================="); } } } }
public void DbgCompare(StateImpl state) { Debug.Assert(implMachines.Count == state.implMachines.Count); for (int i = 0; i < implMachines.Count; i++) { implMachines[i].DbgCompare(state.implMachines[i]); } Debug.Assert(specMachinesMap.Count == state.specMachinesMap.Count); foreach (var tup in specMachinesMap) { Debug.Assert(state.specMachinesMap.ContainsKey(tup.Key)); tup.Value.DbgCompare(state.specMachinesMap[tup.Key]); } Debug.Assert(GetHashCode() == state.GetHashCode()); }