check method

void check()

Implementation

void check() {
  final map = <(String, String), List<Transition>>{};
  _states = {};
  for (final entry in transitions.entries) {
    final transition = entry.value;
    final source = transition.source;
    final target = transition.target;
    _states.add(source.name);
    _states.add(target.name);
    (map[(source.name, target.name)] ??= []).add(transition);
  }

  for (final entry in _paths.entries) {
    final name = entry.key;
    final states = entry.value;
    var count = 0;
    for (var i = 1; i < states.length; i++) {
      final source = states[i - 1];
      final target = states[i];
      _checkState(source, states);
      _checkState(target, states);
      final transition = map[(source, target)];
      if (transition == null) {
        break;
      }

      count++;
    }

    if (count != states.length - 1) {
      throw StateError('''
The graph path '$name' is not complete..
Expected path: ${states.join(' -> ')}
Resolved path: ${states.take(count + 1).join(' -> ')}''');
    }
  }
}