findFirstDivergence function

ReplayDivergence? findFirstDivergence(
  1. List<Object?> expected,
  2. List<Object?> actual
)

Compares 2 ordered outcome lists (e.g. a recorded session's outcomes vs a fresh replay's outcomes) and returns the FIRST point they differ — including a length mismatch, treated as the shorter list "missing" the longer one's extra entries starting there.

Implementation

ReplayDivergence? findFirstDivergence(
  List<Object?> expected,
  List<Object?> actual,
) {
  final shorter = expected.length < actual.length
      ? expected.length
      : actual.length;
  for (var i = 0; i < shorter; i++) {
    if (expected[i] != actual[i]) {
      return ReplayDivergence(
        index: i,
        expected: expected[i],
        actual: actual[i],
      );
    }
  }
  if (expected.length != actual.length) {
    return ReplayDivergence(
      index: shorter,
      expected: shorter < expected.length ? expected[shorter] : null,
      actual: shorter < actual.length ? actual[shorter] : null,
    );
  }
  return null;
}