Comp (ash v3.5.6)
View SourceProvides utilities to implement and work with Comparable types
Summary
Functions
Compare left and right term
Helper to define ordering relation for pair of types,
accepts two term :: type pairs
and block of code where relation is described.
Is left term equal to right term?
Is left term greater or equal to right term?
Is left term greater than right term?
Is left term less or equal to right term?
Is left term less than right term?
Returns the biggest of the two given terms, if terms are equal - then the first one is returned
Returns the smallest of the two given terms, if terms are equal - then the first one is returned
Is left term not equal to right term?
Types
Functions
@spec compare(left(), right()) :: Comparable.ord()
Compare left and right term
Examples
iex> Comp.compare(1, 2)
:lt
iex> Comp.compare(2, 1)
:gt
iex> Comp.compare(1, 1)
:eq
  Helper to define ordering relation for pair of types,
accepts two term :: type pairs
and block of code where relation is described.
Examples
iex> quote do
...>   use Comp
...>   defmodule Foo do
...>     defstruct [:value, :meta]
...>   end
...>   defmodule Bar do
...>     defstruct [:value, :meta]
...>   end
...>   defcomparable %Foo{value: left} :: Foo, %Foo{value: right} :: Foo do
...>     Comp.compare(left, right)
...>   end
...>   defcomparable %Foo{value: left} :: Foo, %Bar{value: right} :: Bar do
...>     Comp.compare(left, right)
...>   end
...>   defcomparable %Foo{value: left} :: Foo, right :: Integer do
...>     Comp.compare(left, right)
...>   end
...> end
...> |> Code.compile_quoted
iex> quote do
...>   x = %Foo{value: 1, meta: 1}
...>   y = %Foo{value: 1, meta: 2}
...>   Comp.equal?(x, y) && Comp.equal?(y, x)
...> end
...> |> Code.eval_quoted
...> |> elem(0)
true
iex> quote do
...>   x = %Foo{value: 1, meta: 1}
...>   y = %Bar{value: 1, meta: 2}
...>   Comp.equal?(x, y) && Comp.equal?(y, x)
...> end
...> |> Code.eval_quoted
...> |> elem(0)
true
iex> quote do
...>   x = %Foo{value: 1, meta: 1}
...>   y = 1
...>   Comp.equal?(x, y) && Comp.equal?(y, x)
...> end
...> |> Code.eval_quoted
...> |> elem(0)
true
  Is left term equal to right term?
Examples
iex> Comp.equal?(1, 1)
true
iex> Comp.equal?(1, :hello)
false
  Is left term greater or equal to right term?
Examples
iex> Comp.greater_or_equal?(1, 1)
true
iex> Comp.greater_or_equal?(1, 2)
false
iex> Comp.greater_or_equal?(2, 1)
true
  Is left term greater than right term?
Examples
iex> Comp.greater_than?(1, 1)
false
iex> Comp.greater_than?(1, 2)
false
iex> Comp.greater_than?(2, 1)
true
  Is left term less or equal to right term?
Examples
iex> Comp.less_or_equal?(1, 1)
true
iex> Comp.less_or_equal?(1, 2)
true
iex> Comp.less_or_equal?(2, 1)
false
  Is left term less than right term?
Examples
iex> Comp.less_than?(1, 1)
false
iex> Comp.less_than?(1, 2)
true
iex> Comp.less_than?(2, 1)
false
  Returns the biggest of the two given terms, if terms are equal - then the first one is returned
Examples
iex> Comp.max(1, 1)
1
iex> Comp.max(1, 2)
2
iex> Comp.max(2, 1)
2
  Returns the smallest of the two given terms, if terms are equal - then the first one is returned
Examples
iex> Comp.min(1, 1)
1
iex> Comp.min(1, 2)
1
iex> Comp.min(2, 1)
1
  Is left term not equal to right term?
Examples
iex> Comp.not_equal?(1, 1)
false
iex> Comp.not_equal?(1, :hello)
true