# `Supertester.PropertyHelpers`
[🔗](https://github.com/nshkrdotcom/supertester/blob/v0.6.0/lib/supertester/property_helpers.ex#L1)

StreamData generators tailored for Supertester's concurrent harness.

# `concurrent_scenario`

```elixir
@spec concurrent_scenario(keyword()) :: StreamData.t(map())
```

Generates concurrent scenario configs consumable by `ConcurrentHarness.from_property_config/3`.

## Options

* `:operations` - Required list passed to `genserver_operation_sequence/2`
* `:min_threads` / `:max_threads` - Thread bounds (defaults: 2..4)
* `:min_ops_per_thread` / `:max_ops_per_thread`
* `:call_timeout_ms`, `:timeout_ms`, `:metadata`, `:mailbox`

# `genserver_operation_sequence`

```elixir
@spec genserver_operation_sequence(
  [term() | Supertester.ConcurrentHarness.operation()],
  keyword()
) :: StreamData.t([Supertester.ConcurrentHarness.operation()])
```

Generates sequences of GenServer operations suitable for ConcurrentHarness threads.

## Options

* `:default_operation` - Tag bare terms as `:call` or `:cast` (default: `:call`)
* `:min_length` / `:max_length` - Bounds for sequence length

---

*Consult [api-reference.md](api-reference.md) for complete listing*
