--- a/crates/jrsonnet-evaluator/src/builtin/mod.rs +++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs @@ -89,6 +89,7 @@ ("ceil".into(), builtin_ceil), ("log".into(), builtin_log), ("pow".into(), builtin_pow), + ("sqrt".into(), builtin_sqrt), ("extVar".into(), builtin_ext_var), ("native".into(), builtin_native), ("filter".into(), builtin_filter), @@ -304,6 +305,14 @@ }) } +fn builtin_sqrt(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result { + parse_args!(context, "sqrt", args, 1, [ + 0, x: ty!(BoundedNumber<(Some(0.0)), (None)>) => Val::Num; + ], { + Ok(Val::Num(x.sqrt())) + }) +} + fn builtin_ext_var(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result { parse_args!(context, "extVar", args, 1, [ 0, x: ty!(string) => Val::Str; --- a/crates/jrsonnet-stdlib/src/std.jsonnet +++ b/crates/jrsonnet-stdlib/src/std.jsonnet @@ -13,8 +13,6 @@ modulo:: $intrinsic(modulo), floor:: $intrinsic(floor), ceil:: $intrinsic(ceil), - log:: $intrinsic(log), - pow:: $intrinsic(pow), extVar:: $intrinsic(extVar), native:: $intrinsic(native), filter:: $intrinsic(filter), @@ -25,6 +23,10 @@ id:: $intrinsic(id), parseJson:: $intrinsic(parseJson), + log:: $intrinsic(log), + pow:: $intrinsic(pow), + sqrt:: $intrinsic(sqrt), + isString(v):: std.type(v) == 'string', isNumber(v):: std.type(v) == 'number', isBoolean(v):: std.type(v) == 'boolean',