Celixir.Ext.Math (Celixir v0.2.0)

Copy Markdown View Source

Math extension for CEL — mirrors ext.Math() from cel-go.

Provides numeric functions under the math.* namespace.

Usage

env = Celixir.Environment.new() |> Celixir.Ext.Math.register()
Celixir.eval!("math.sqrt(16.0)", env)  # => 4.0
Celixir.eval!("math.ceil(1.2)", env)   # => 2.0

Functions

  • math.ceil(double) — ceiling
  • math.floor(double) — floor
  • math.round(double) — round (ties away from zero)
  • math.trunc(double) — truncate fractional part
  • math.abs(int|uint|double) — absolute value
  • math.sign(int|uint|double) — -1, 0, or 1
  • math.sqrt(int|uint|double) — square root (NaN for negative)
  • math.isNaN(double) — true if NaN
  • math.isInf(double) — true if ±Inf
  • math.isFinite(double) — true if neither NaN nor Inf
  • math.bitAnd(int, int) / math.bitAnd(uint, uint)
  • math.bitOr(int, int) / math.bitOr(uint, uint)
  • math.bitXor(int, int) / math.bitXor(uint, uint)
  • math.bitNot(int) / math.bitNot(uint)
  • math.bitShiftLeft(int|uint, int)
  • math.bitShiftRight(int|uint, int)
  • math.greatest(arg, ...) / math.greatest(list) — variadic max (built-in only)
  • math.least(arg, ...) / math.least(list) — variadic min (built-in only)

Summary

Functions

math_abs(v)

math_bit_and(a, b)

math_bit_not(v)

math_bit_not_uint(v)

math_bit_or(a, b)

math_bit_shift_left(a, b)

math_bit_shift_right(a, b)

math_bit_xor(a, b)

math_ceil(v)

math_floor(v)

math_greatest(list)

math_is_finite(v)

math_is_inf(v)

math_is_nan(v)

math_least(list)

math_round(v)

math_sign(v)

math_sqrt(v)

math_trunc(v)

register(env \\ Environment.new())

Registers math extension functions into the given environment.

Note: math.greatest and math.least are variadic macros handled by the built-in evaluator and do not need explicit registration.