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;
}());
}