debugAssertConsistent method

void debugAssertConsistent()

Debug-only: verifies the forward and reverse maps agree and that every freed nid has a null reverse entry. Throws StateError on any inconsistency. Wrapped in assert at call sites so release builds pay nothing.

Implementation

void debugAssertConsistent() {
  assert(() {
    for (final entry in _keyToNid.entries) {
      final key = entry.key;
      final nid = entry.value;
      if (nid < 0 || nid >= _nidToKey.length) {
        throw StateError(
          "nid $nid for key $key out of range [0, ${_nidToKey.length})",
        );
      }
      if (_nidToKey[nid] != key) {
        throw StateError(
          "nid $nid reverse mismatch: nidToKey[$nid] = ${_nidToKey[nid]}, "
          "expected $key",
        );
      }
    }
    for (final freed in _freeNids) {
      if (freed < 0 || freed >= _nidToKey.length) {
        throw StateError("freed nid $freed out of range");
      }
      if (_nidToKey[freed] != null) {
        throw StateError(
          "freed nid $freed still has key ${_nidToKey[freed]}",
        );
      }
    }
    return true;
  }());
}