$ cat elixir-test.prompt
Write an ExUnit test module for the following Elixir function:
```elixir
defmodule StringUtils do
@doc """
Truncates a string to at most `max_len` characters.
If truncated, appends `suffix` (default: "...").
Returns the original string if it is already within `max_len`.
Raises ArgumentError if max_len is negative.
"""
@spec truncate(String.t(), non_neg_integer(), String.t()) :: String.t()
def truncate(str, max_len, suffix \\ "...")
end
```
Requirements:
- Module name: `StringUtilsTest`, `use ExUnit.Case`
- Use `describe` blocks to group related cases
- At least 2 `describe` blocks: one for happy path, one for edge/error cases
- At least 8 test cases total covering: string shorter than limit, exact length, longer string (suffix appended), empty string, custom suffix, max_len of 0, negative max_len (should raise), unicode string
- Use `assert`, `assert_raise`, and pattern matching appropriately
- Add at least one doctest-style `## Examples` in a module comment showing usage