diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-08-30 16:59:09 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-08-30 16:59:09 +0200 |
| commit | ee84bf74083f5b9cc88a2a0a968dc905b1eef22c (patch) | |
| tree | d2756f462ee242c328c526d2a65de4105830cb27 /src/library/utility.rs | |
| parent | ff25573224400673d08b31e576d5a0d87751dbe1 (diff) | |
Add abs() function
Diffstat (limited to 'src/library/utility.rs')
| -rw-r--r-- | src/library/utility.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/library/utility.rs b/src/library/utility.rs index b26ed154..0ece88ac 100644 --- a/src/library/utility.rs +++ b/src/library/utility.rs @@ -45,6 +45,21 @@ pub fn rgb(_: &mut EvalContext, args: &mut Arguments) -> TypResult<Value> { ))) } +/// `abs`: The absolute value of a numeric value. +pub fn abs(_: &mut EvalContext, args: &mut Arguments) -> TypResult<Value> { + let Spanned { v, span } = args.expect("numeric value")?; + Ok(match v { + Value::Int(v) => Value::Int(v.abs()), + Value::Float(v) => Value::Float(v.abs()), + Value::Length(v) => Value::Length(v.abs()), + Value::Angle(v) => Value::Angle(v.abs()), + Value::Relative(v) => Value::Relative(v.abs()), + Value::Fractional(v) => Value::Fractional(v.abs()), + Value::Linear(_) => bail!(span, "cannot take absolute value of a linear"), + _ => bail!(span, "expected numeric value"), + }) +} + /// `min`: The minimum of a sequence of values. pub fn min(_: &mut EvalContext, args: &mut Arguments) -> TypResult<Value> { minmax(args, Ordering::Less) |
