difftreelog
feat implement builtins for trivial numeric functions
in: master
3 files changed
crates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth77 ("member", builtin_member::INST),77 ("member", builtin_member::INST),78 ("count", builtin_count::INST),78 ("count", builtin_count::INST),79 // Math79 // Math80 ("abs", builtin_abs::INST),81 ("sign", builtin_sign::INST),82 ("max", builtin_max::INST),83 ("min", builtin_min::INST),84 ("clamp", builtin_clamp::INST),80 ("modulo", builtin_modulo::INST),85 ("modulo", builtin_modulo::INST),81 ("floor", builtin_floor::INST),86 ("floor", builtin_floor::INST),82 ("ceil", builtin_ceil::INST),87 ("ceil", builtin_ceil::INST),crates/jrsonnet-stdlib/src/math.rsdiffbeforeafterboth1use jrsonnet_evaluator::{error::Result, function::builtin, typed::PositiveF64};1use jrsonnet_evaluator::{error::Result, function::builtin, typed::PositiveF64};23#[builtin]4pub fn builtin_abs(x: f64) -> Result<f64> {5 Ok(x.abs())6}78#[builtin]9pub fn builtin_sign(x: f64) -> Result<f64> {10 Ok(if x == 0. { 0. } else { x.signum() })11}1213#[builtin]14pub fn builtin_max(x: f64, y: f64) -> Result<f64> {15 Ok(x.max(y))16}1718#[builtin]19pub fn builtin_min(x: f64, y: f64) -> Result<f64> {20 Ok(x.min(y))21}2223#[builtin]24pub fn builtin_clamp(x: f64, min_val: f64, max_val: f64) -> Result<f64> {25 debug_assert!(x.is_finite(), "jsonnet number are always finite");26 debug_assert!(min_val.is_finite(), "jsonnet number are always finite");27 debug_assert!(max_val.is_finite(), "jsonnet number are always finite");2829 // `f64::clamp` should noe be used here since it requires extra checks to guarantee NaN-safety30 Ok(if x < min_val {31 min_val32 } else if x > max_val {33 max_val34 } else {35 x36 })37}2383#[builtin]39#[builtin]4pub fn builtin_modulo(a: f64, b: f64) -> Result<f64> {40pub fn builtin_modulo(a: f64, b: f64) -> Result<f64> {crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth77 else77 else78 error 'Assertion failed. ' + a + ' != ' + b,78 error 'Assertion failed. ' + a + ' != ' + b,797980 abs(n)::81 if !std.isNumber(n) then82 error 'std.abs expected number, got ' + std.type(n)83 else84 if n > 0 then n else -n,8586 sign(n)::87 if !std.isNumber(n) then88 error 'std.sign expected number, got ' + std.type(n)89 else90 if n > 0 then91 192 else if n < 0 then93 -194 else 0,9596 max(a, b)::97 if !std.isNumber(a) then98 error 'std.max first param expected number, got ' + std.type(a)99 else if !std.isNumber(b) then100 error 'std.max second param expected number, got ' + std.type(b)101 else102 if a > b then a else b,103104 min(a, b)::105 if !std.isNumber(a) then106 error 'std.min first param expected number, got ' + std.type(a)107 else if !std.isNumber(b) then108 error 'std.min second param expected number, got ' + std.type(b)109 else110 if a < b then a else b,111112 clamp(x, minVal, maxVal)::80 clamp(x, minVal, maxVal)::113 if x < minVal then minVal81 if x < minVal then minVal114 else if x > maxVal then maxVal82 else if x > maxVal then maxVal