Packages

Provides a set of useful guards to reduce boilerplate code

Current section

Files

Jump to
bottle lib bottle number.ex
Raw

lib/bottle/number.ex

defmodule Bottle.Number do
@moduledoc """
Provides custom guards for numbers
"""
@doc """
Guard that passes when a number is 0 (including float 0.0)
## Examples
iex> is_zero(0)
true
iex> is_zero(0.0)
true
iex> is_zero(1)
false
"""
defguard is_zero(sub) when is_number(sub) and sub in [0, 0.0]
@doc """
Guard that passes when a number is a pos_integer
## Examples
iex> is_pos_integer(1)
true
iex> is_pos_integer(1.1)
false
iex> is_pos_integer(0)
false
iex> is_pos_integer(-1)
false
"""
defguard is_pos_integer(sub) when is_integer(sub) and sub > 0
@doc """
Guard that passes when a number is a pos_number
## Examples
iex> is_pos_number(1)
true
iex> is_pos_number(1.1)
true
iex> is_pos_number(0)
false
iex> is_pos_number(-1)
false
iex> is_pos_number(-1.1)
false
"""
defguard is_pos_number(sub) when is_number(sub) and sub > 0
@doc """
Guard that passes when a number is a non_neg_integer
## Examples
iex> is_non_neg_integer(1)
true
iex> is_non_neg_integer(1.1)
false
iex> is_non_neg_integer(0)
true
iex> is_non_neg_integer(-1)
false
"""
defguard is_non_neg_integer(sub) when is_integer(sub) and sub >= 0
@doc """
Guard that passes when a number is a non_neg_number
## Examples
iex> is_non_neg_number(1)
true
iex> is_non_neg_number(1.1)
true
iex> is_non_neg_number(0)
true
iex> is_non_neg_number(-1)
false
"""
defguard is_non_neg_number(sub) when is_number(sub) and sub >= 0
@doc """
Guard that passes when a number is a non_neg_float
## Examples
iex> is_non_neg_float(1)
false
iex> is_non_neg_float(1.1)
true
iex> is_non_neg_float(0.0)
true
iex> is_non_neg_float(0)
false
iex> is_non_neg_float(-1)
false
iex> is_non_neg_float(-1.1)
false
"""
defguard is_non_neg_float(sub) when is_float(sub) and sub >= 0
@doc """
Guard that passes when for 0.0
## Examples
iex> is_zero_float(0.0)
true
iex> is_zero_float(0)
false
iex> is_zero_float(1)
false
iex> is_zero_float(1.1)
false
iex> is_zero_float(-1)
false
iex> is_zero_float(-1.1)
false
"""
defguard is_zero_float(sub) when is_float(sub) and sub == 0.0
@doc """
Guard that passes when for any float that is not 0.0
## Examples
iex> is_non_zero_float(1.1)
true
iex> is_non_zero_float(-1.1)
true
iex> is_non_zero_float(0.0)
false
iex> is_non_zero_float(0)
false
iex> is_non_zero_float(1)
false
iex> is_non_zero_float(-1)
false
"""
defguard is_non_zero_float(sub) when is_float(sub) and sub != 0.0
@doc """
Guard that passes when for any positive float
## Examples
iex> is_pos_float(1.1)
true
iex> is_pos_float(-1.1)
false
iex> is_pos_float(0.0)
false
iex> is_pos_float(0)
false
iex> is_pos_float(1)
false
iex> is_pos_float(-1)
false
"""
defguard is_pos_float(sub) when is_float(sub) and sub > 0.0
end