difftreelog
Merge pull request #91 from CertainLach/number-intrinsics
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),80 ("modulo", builtin_modulo::INST),84 ("modulo", builtin_modulo::INST),81 ("floor", builtin_floor::INST),85 ("floor", builtin_floor::INST),82 ("ceil", builtin_ceil::INST),86 ("ceil", builtin_ceil::INST),crates/jrsonnet-stdlib/src/math.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/math.rs
+++ b/crates/jrsonnet-stdlib/src/math.rs
@@ -1,6 +1,26 @@
use jrsonnet_evaluator::{error::Result, function::builtin, typed::PositiveF64};
#[builtin]
+pub fn builtin_abs(x: f64) -> Result<f64> {
+ Ok(x.abs())
+}
+
+#[builtin]
+pub fn builtin_sign(x: f64) -> Result<f64> {
+ Ok(if x == 0. { 0. } else { x.signum() })
+}
+
+#[builtin]
+pub fn builtin_max(x: f64, y: f64) -> Result<f64> {
+ Ok(x.max(y))
+}
+
+#[builtin]
+pub fn builtin_min(x: f64, y: f64) -> Result<f64> {
+ Ok(x.min(y))
+}
+
+#[builtin]
pub fn builtin_modulo(a: f64, b: f64) -> Result<f64> {
Ok(a % b)
}
crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/std.jsonnet
+++ b/crates/jrsonnet-stdlib/src/std.jsonnet
@@ -77,38 +77,6 @@
else
error 'Assertion failed. ' + a + ' != ' + b,
- abs(n)::
- if !std.isNumber(n) then
- error 'std.abs expected number, got ' + std.type(n)
- else
- if n > 0 then n else -n,
-
- sign(n)::
- if !std.isNumber(n) then
- error 'std.sign expected number, got ' + std.type(n)
- else
- if n > 0 then
- 1
- else if n < 0 then
- -1
- else 0,
-
- max(a, b)::
- if !std.isNumber(a) then
- error 'std.max first param expected number, got ' + std.type(a)
- else if !std.isNumber(b) then
- error 'std.max second param expected number, got ' + std.type(b)
- else
- if a > b then a else b,
-
- min(a, b)::
- if !std.isNumber(a) then
- error 'std.min first param expected number, got ' + std.type(a)
- else if !std.isNumber(b) then
- error 'std.min second param expected number, got ' + std.type(b)
- else
- if a < b then a else b,
-
clamp(x, minVal, maxVal)::
if x < minVal then minVal
else if x > maxVal then maxVal