From d9698df268490f6ed9ec239cab4a5b939f7d5b95 Mon Sep 17 00:00:00 2001 From: LinuxHeki Date: Sun, 21 May 2023 09:12:12 +0200 Subject: [PATCH] math::abs of int returns int --- src/function/builtin.rs | 11 ++++++++--- tests/integration.rs | 6 ++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/function/builtin.rs b/src/function/builtin.rs index 95aecda..639584e 100644 --- a/src/function/builtin.rs +++ b/src/function/builtin.rs @@ -78,9 +78,6 @@ pub fn builtin_function(identifier: &str) -> Option { "math::cbrt" => simple_math!(cbrt), // Hypotenuse "math::hypot" => simple_math!(hypot, 2), - // Absolute - "math::abs" => simple_math!(abs), - // Rounding "floor" => simple_math!(floor), "round" => simple_math!(round), "ceil" => simple_math!(ceil), @@ -89,6 +86,14 @@ pub fn builtin_function(identifier: &str) -> Option { "math::is_finite" => float_is(FloatType::is_finite), "math::is_infinite" => float_is(FloatType::is_infinite), "math::is_normal" => float_is(FloatType::is_normal), + // Absolute + "math::abs" => Some(Function::new(|argument| { + match argument { + Value::Float(num) => Ok(Value::Float(num.abs())), + Value::Int(num) => Ok(Value::Int(num.abs())), + _ => Err(EvalexprError::ExpectedNumber { actual: argument.clone() }), + } + })), // Other "typeof" => Some(Function::new(move |argument| { Ok(match argument { diff --git a/tests/integration.rs b/tests/integration.rs index ab0bfe4..2665362 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -364,8 +364,10 @@ fn test_builtin_functions() { Ok(Value::Float((8.2 as FloatType).hypot(1.1))) ); // Absolute - assert_eq!(eval("math::abs(15)"), Ok(Value::Float(15.0))); - assert_eq!(eval("math::abs(-15)"), Ok(Value::Float(15.0))); + assert_eq!(eval("math::abs(15.4)"), Ok(Value::Float(15.4))); + assert_eq!(eval("math::abs(-15.4)"), Ok(Value::Float(15.4))); + assert_eq!(eval("math::abs(15)"), Ok(Value::Int(15))); + assert_eq!(eval("math::abs(-15)"), Ok(Value::Int(15))); // Rounding assert_eq!(eval("floor(1.1)"), Ok(Value::Float(1.0))); assert_eq!(eval("floor(1.9)"), Ok(Value::Float(1.0)));