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
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 _