debugAssertSubtreeSizeConsistent method

void debugAssertSubtreeSizeConsistent()

Debug-only: walks the tree and verifies every live nid's subtree-size slot equals the structural definition (own-presence + sum of children's sizes). Wrapped in assert(...) so release builds skip it.

Implementation

void debugAssertSubtreeSizeConsistent() {
  assert(() {
    for (int nid = 0; nid < _nids.length; nid++) {
      final key = _nids.keyOf(nid);
      if (key == null) continue;
      int expected = _indexByNid[nid] == kNotVisible ? 0 : 1;
      final children = _childKeysOf(key);
      if (children != null) {
        for (final child in children) {
          final childNid = _nids[child];
          if (childNid != null) {
            expected += _subtreeSizeByNid[childNid];
          }
        }
      }
      if (_subtreeSizeByNid[nid] != expected) {
        throw StateError(
          "_subtreeSizeByNid[$nid] (key=$key) = "
          "${_subtreeSizeByNid[nid]}, expected $expected",
        );
      }
    }
    return true;
  }());
}