@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (!(obj instanceof TraceSchedule)) {
			return false;
		}
		TraceSchedule that = (TraceSchedule) obj;
		if (this.snap != that.snap) {
			return false;
		}
		if (!Objects.equals(this.steps, that.steps)) {
			return false;
		}
		if (!Objects.equals(this.pSteps, that.pSteps)) {
			return false;
		}
		return true;
	}
Richly compare two schedules

<p>
Schedules starting at different snapshots are never related, because there is no
emulator/simulator stepping action which advances to the next snapshot. Though p-code steps
may comprise a partial step, we do not consider a partial step to be a prefix of a full step,
since we cannot know <em>a priori</em> how many p-code steps comprise a full instruction
step. Consider, e.g., the user may specify 100 p-code steps, which could effect 20
instruction steps.

@param that the object of comparison (this being the subject)
@return a result describing the relationship from subject to object
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/time/schedule/TraceSchedule.java