package fsm // IsComplete verifies that every pair or states has a defined transition. // // Complexity: O(V) if the Matrix is the default map implementation. func IsComplete[SK, EK comparable, EV any](Matrix[SK, EK, EV]) bool { panic("not implemented") } // InCompleteWithoutSelfLoops verifies that every pair of different states has a defined transition, // but no same-state transition exists. func InCompleteWithoutSelfLoops[SK, EK comparable, EV any]() bool { panic("not implemented") } // IsReachable verifies that s2 is reachable from s1. func IsReachable[SK, EK comparable, EV any](s1, s2 State[SK, EK, EV]) bool { panic("not implemented") } // IsAccessible verifies that every state except initial is reachable from the initial state. func IsAccessible[SK, EK comparable, EV any]() bool { panic("not implemented") } // IsCoAccessible verifies that final state is reachable from any state except final. func IsCoAccessible[SK, EK comparable, EV any]() bool { panic("not implemented") } // IsTrimmed verifies that the matrix verifies both IsAccessible and IsCoAccessible. func IsTrimmed[SK, EK comparable, EV any]() bool { panic("not implemented") } // IsStronglyConnected verifies that every state is reachable from every other. // // Minimal Complexity O(V+E) using DFS (Tarjan or Kosaraju) func IsStronglyConnected[SK, EK comparable, EV any]() bool { panic("not implemented") } // IsFSMContextCancellable verifies that the context on a FSM is set to a context // that includes a cancelCtx. // // WARNING: this assumes that all context stacked above it implement the context.stringer interface // and respect the unofficial context package naming convention for implementations of that interface. // All types in stdlib context do, but customer context implementations might not. func IsFSMContextCancellable[SK, EK comparable, EV any](FSM[SK, EK, EV]) bool { panic("not implemented") }