StreamData: generating valid tri-tuple date

Hello.
I would like to generate a valid tri-tuple date with StreamData. After some digging and experimentation I arrived at this working code:

defmodule SomeFactory do
  def valid_date?({_y, _m, _d} = date_tuple) do
    case Date.from_erl(date_tuple) do
      {:ok, _date} -> true
      _ -> false
    end
  end

  def date_maybe_invalid_tuple() do
    gen all y <- integer(0..99),
            m <- integer(1..12),
            d <- integer(1..31) do
      {y, m, d}
    end
  end

  def date_valid_tuple() do
    StreamData.filter(date_maybe_invalid_tuple(), &valid_date?/1)
  end
end

Running this gave me a reasonable certainty that the filter indeed stops invalid dates like 2018-02-30 (it returns the empty list as I expected):

Enum.take(SomeFactory.date_valid_tuple(), 1_000_000) |> Enum.reject(&SomeFactory.valid_date?/1)

So, am I doing this right? And is there a way to do the above with only one function?