*/ public static function camelToCases(): iterable { yield 'single word, underscore' => ['Todo', '_', 'todo']; yield 'two words, underscore' => ['TodoList', '_', 'todo_list']; yield 'two words, dash' => ['MarkAllDone', '-', 'mark-all-done']; yield 'leading uppercase, no split' => ['Todo', '-', 'todo']; yield 'all caps stay together (acronym preserved)' => ['HTTPClient', '-', 'h-t-t-p-client']; yield 'empty input' => ['', '-', '']; } }