README.md

[![CI](https://github.com/IgnacioGoldchluk/more_stream_data/actions/workflows/ci.yml/badge.svg)](https://github.com/IgnacioGoldchluk/more_stream_data/actions/workflows/ci.yml)
[![License](https://img.shields.io/hexpm/l/more_stream_data.svg)](https://github.com/IgnacioGoldchluk/more_stream_data/blob/main/LICENSE.md)
[![Version](https://img.shields.io/hexpm/v/more_stream_data.svg)](https://hex.pm/packages/more_stream_data)
[![Docs](https://img.shields.io/badge/documentation-gray.svg)](https://hexdocs.pm/more_stream_data)

# MoreStreamData

Additional generators based on `StreamData`.

## Installation
Add `more_stream_data` to your list of dependencies in `mix.exs`
```ex
def deps do
  [
    {:more_stream_data, "~> 0.1", only: :test}
  ]
end
```

Refer to [StreamData](https://hexdocs.pm/stream_data/StreamData.html) documentation for usage.

You can call additional generators directly in any testfile
```ex
defmodule MyTestMoule do
  use ExUnit.Case
  use ExUnitProperties

  property "generates numbers greater than or equal to the minimum" do
    check all number <- MoreStreamData.more_integer(min: 10) do
      assert number >= 10
    end
  end
end
```

## Roadmap
The goal is to port [Python's Hypothesis](https://hypothesis.readthedocs.io/en/latest/) built-in and external strategies considered useful for Elixir ecosystem.

- [ ] Strategies
  - [x] `integers`
  - [x] `floats`
    - [x] `exclude_min` and `exclude_max` options.
  - [x] `decimal`
  - [x] `from_regex`: A bit slow but works
    - [ ] `\b` word boundary
    - [x] `\v` vertica line meta character
    - [x] Non-printable characters (automatically supported with `\x`)
    - [x] `xHH` for hex characters
    - [x] `x{HHH...}` for hex characters
    - [ ] Atomic groups
    - [ ] Lookarounds
      - [ ] Positive lookahead
      - [ ] Negative lookahead
      - [ ] Positive lookbehind
      - [ ] Negative lookbehind
    - [ ] Modifiers
      - [ ] Case insensitive `/i`
      - [ ] Extended `/x`
      - [ ] Unicode `/u`
      - [ ] Dotall `/s`
      - [ ] Multiline `/m`
      - [ ] Firstline `/f`
      - [x] Ungreedy `/U`. Not actually supported but redundant for string generation.
  - [x] `emails`
  - [x] `domains`
  - [x] `urls`
  - [x] `datetime`
  - [x] `time`
  - [x] `timezone`
  - [x] `timedeltas`
  - [x] `ip_address`