View Source Corsa.Pre (corsa v0.1.2)

Preconditions are requirements that must be met before executing a function. It ensures correct behavior and avoids potential errors by specifying conditions for input parameters. In Corsa, preconditions are checked during runtime. If a precondition is not met, an exception or a log is thrown.

Examples

iex> defmodule Elixir.Corsa.Pre.Example do
...>   use Corsa.Assert
...>   use Corsa.Pre
...>   pre f(x, y) do x > y end
...>   def f(x, y) do x + y end
...> end
iex> Elixir.Corsa.Pre.Example.f(2, 1)
3
iex> Elixir.Corsa.Pre.Example.f(1, 2)
** (Corsa.PreViolationError) @pre does not hold in call 'Corsa.Pre.Example.f(1, 2)'

Summary

Functions

Errors

iex> defmodule Elixir.Corsa.Pre.ExampleError1 do
...>   use Corsa.Assert
...>   use Corsa.Pre
...>   pre f(x, y) do x > y end
...>   pre f(x, y) do x > y end
...>   def f(x, y) do x + y end
...> end
** (Corsa.PreError) @pre for function 'f/2' already defined

iex> defmodule Elixir.Corsa.Pre.ExampleError2 do
...>   use Corsa.Assert
...>   use Corsa.Pre
...>   pre f(x, x) do x > y end
...>   def f(x, y) do x + y end
...> end
** (Corsa.PreError) arguments in @pre should contain different names

iex> defmodule Elixir.Corsa.Pre.ExampleError3 do
...>   use Corsa.Assert
...>   use Corsa.Pre
...>   pre f(x, _) do x > y end
...>   def f(x, y) do x + y end
...> end
** (Corsa.PreError) arguments in @pre cannot be ignored with _

Functions

Link to this macro

pre(arg1, arg2)

View Source (macro)

Errors

iex> defmodule Elixir.Corsa.Pre.ExampleError1 do
...>   use Corsa.Assert
...>   use Corsa.Pre
...>   pre f(x, y) do x > y end
...>   pre f(x, y) do x > y end
...>   def f(x, y) do x + y end
...> end
** (Corsa.PreError) @pre for function 'f/2' already defined

iex> defmodule Elixir.Corsa.Pre.ExampleError2 do
...>   use Corsa.Assert
...>   use Corsa.Pre
...>   pre f(x, x) do x > y end
...>   def f(x, y) do x + y end
...> end
** (Corsa.PreError) arguments in @pre should contain different names

iex> defmodule Elixir.Corsa.Pre.ExampleError3 do
...>   use Corsa.Assert
...>   use Corsa.Pre
...>   pre f(x, _) do x > y end
...>   def f(x, y) do x + y end
...> end
** (Corsa.PreError) arguments in @pre cannot be ignored with _