Last active
March 17, 2024 17:21
-
-
Save LostKobrakai/7137eb20ed59fc8c6af0e94331cf470c to your computer and use it in GitHub Desktop.
stream_data generators to create elixir date/time structs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule DateTimeGenerators do | |
use ExUnitProperties | |
@time_zones ["Etc/UTC"] | |
def date do | |
gen all year <- integer(1970..2050), | |
month <- integer(1..12), | |
day <- integer(1..31), | |
match?({:ok, _}, Date.from_erl({year, month, day})) do | |
Date.from_erl!({year, month, day}) | |
end | |
end | |
def time do | |
gen all hour <- integer(0..23), | |
minute <- integer(0..59), | |
second <- integer(0..59) do | |
Time.from_erl!({hour, minute, second}) | |
end | |
end | |
def naive_datetime do | |
gen all date <- date(), | |
time <- time() do | |
{:ok, naive_datetime} = NaiveDateTime.new(date, time) | |
naive_datetime | |
end | |
end | |
def datetime do | |
gen all naive_datetime <- naive_datetime(), | |
time_zone <- member_of(@time_zones) do | |
DateTime.from_naive!(naive_datetime, time_zone) | |
end | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Connect.GeneratorsTwo do | |
import StreamData | |
@time_zones ["Etc/UTC"] | |
def date do | |
tuple({integer(1970..2050), integer(1..12), integer(1..31)}) | |
|> bind_filter(fn tuple -> | |
case Date.from_erl(tuple) do | |
{:ok, date} -> {:cont, constant(date)} | |
_ -> :skip | |
end | |
end) | |
end | |
def time do | |
tuple({integer(0..23), integer(0..59), integer(0..59)}) | |
|> map(&Time.from_erl!) | |
end | |
def naive_datetime do | |
tuple({date(), time()}) | |
|> map(fn {date, time} -> | |
{:ok, naive_datetime} = NaiveDateTime.new(date, time) | |
naive_datetime | |
end) | |
end | |
def datetime do | |
tuple({naive_datetime(), member_of(@time_zones)}) | |
|> map(fn {naive_datetime, time_zone} -> | |
DateTime.from_naive!(naive_datetime, time_zone) | |
end) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
|> bind_filter(base, fn tuple ->
- this line needs to havebase,
deleted