Fixes for pull request #130.
This commit is contained in:
parent
e63a99af80
commit
199a42ebab
@ -388,7 +388,7 @@ Symmetrically, the `EmptyContextWithBuiltinFunctions` has builtin functions enab
|
|||||||
| `math::sqrt` | 1 | Numeric | Returns the square root of a number. Returns NaN for a negative number |
|
| `math::sqrt` | 1 | Numeric | Returns the square root of a number. Returns NaN for a negative number |
|
||||||
| `math::cbrt` | 1 | Numeric | Returns the cube root of a number |
|
| `math::cbrt` | 1 | Numeric | Returns the cube root of a number |
|
||||||
| `math::hypot` | 2 | Numeric | Calculates the length of the hypotenuse of a right-angle triangle given legs of length given by the two arguments |
|
| `math::hypot` | 2 | Numeric | Calculates the length of the hypotenuse of a right-angle triangle given legs of length given by the two arguments |
|
||||||
| `math::abs` | 1 | Numeric | Returns the absolute value of a number |
|
| `math::abs` | 1 | Numeric | Returns the absolute value of a number, returning an integer if the argument was an integer, and a float otherwise |
|
||||||
| `str::regex_matches` | 2 | String, String | Returns true if the first argument matches the regex in the second argument (Requires `regex_support` feature flag) |
|
| `str::regex_matches` | 2 | String, String | Returns true if the first argument matches the regex in the second argument (Requires `regex_support` feature flag) |
|
||||||
| `str::regex_replace` | 3 | String, String, String | Returns the first argument with all matches of the regex in the second argument replaced by the third argument (Requires `regex_support` feature flag) |
|
| `str::regex_replace` | 3 | String, String, String | Returns the first argument with all matches of the regex in the second argument replaced by the third argument (Requires `regex_support` feature flag) |
|
||||||
| `str::to_lowercase` | 1 | String | Returns the lower-case version of the string |
|
| `str::to_lowercase` | 1 | String | Returns the lower-case version of the string |
|
||||||
|
@ -78,6 +78,7 @@ pub fn builtin_function(identifier: &str) -> Option<Function> {
|
|||||||
"math::cbrt" => simple_math!(cbrt),
|
"math::cbrt" => simple_math!(cbrt),
|
||||||
// Hypotenuse
|
// Hypotenuse
|
||||||
"math::hypot" => simple_math!(hypot, 2),
|
"math::hypot" => simple_math!(hypot, 2),
|
||||||
|
// Rounding
|
||||||
"floor" => simple_math!(floor),
|
"floor" => simple_math!(floor),
|
||||||
"round" => simple_math!(round),
|
"round" => simple_math!(round),
|
||||||
"ceil" => simple_math!(ceil),
|
"ceil" => simple_math!(ceil),
|
||||||
@ -87,12 +88,10 @@ pub fn builtin_function(identifier: &str) -> Option<Function> {
|
|||||||
"math::is_infinite" => float_is(FloatType::is_infinite),
|
"math::is_infinite" => float_is(FloatType::is_infinite),
|
||||||
"math::is_normal" => float_is(FloatType::is_normal),
|
"math::is_normal" => float_is(FloatType::is_normal),
|
||||||
// Absolute
|
// Absolute
|
||||||
"math::abs" => Some(Function::new(|argument| {
|
"math::abs" => Some(Function::new(|argument| match argument {
|
||||||
match argument {
|
Value::Float(num) => Ok(Value::Float(num.abs())),
|
||||||
Value::Float(num) => Ok(Value::Float(num.abs())),
|
Value::Int(num) => Ok(Value::Int(num.abs())),
|
||||||
Value::Int(num) => Ok(Value::Int(num.abs())),
|
_ => Err(EvalexprError::expected_number(argument.clone())),
|
||||||
_ => Err(EvalexprError::ExpectedNumber { actual: argument.clone() }),
|
|
||||||
}
|
|
||||||
})),
|
})),
|
||||||
// Other
|
// Other
|
||||||
"typeof" => Some(Function::new(move |argument| {
|
"typeof" => Some(Function::new(move |argument| {
|
||||||
|
@ -371,7 +371,7 @@
|
|||||||
//! | `math::sqrt` | 1 | Numeric | Returns the square root of a number. Returns NaN for a negative number |
|
//! | `math::sqrt` | 1 | Numeric | Returns the square root of a number. Returns NaN for a negative number |
|
||||||
//! | `math::cbrt` | 1 | Numeric | Returns the cube root of a number |
|
//! | `math::cbrt` | 1 | Numeric | Returns the cube root of a number |
|
||||||
//! | `math::hypot` | 2 | Numeric | Calculates the length of the hypotenuse of a right-angle triangle given legs of length given by the two arguments |
|
//! | `math::hypot` | 2 | Numeric | Calculates the length of the hypotenuse of a right-angle triangle given legs of length given by the two arguments |
|
||||||
//! | `math::abs` | 1 | Numeric | Returns the absolute value of a number |
|
//! | `math::abs` | 1 | Numeric | Returns the absolute value of a number, returning an integer if the argument was an integer, and a float otherwise |
|
||||||
//! | `str::regex_matches` | 2 | String, String | Returns true if the first argument matches the regex in the second argument (Requires `regex_support` feature flag) |
|
//! | `str::regex_matches` | 2 | String, String | Returns true if the first argument matches the regex in the second argument (Requires `regex_support` feature flag) |
|
||||||
//! | `str::regex_replace` | 3 | String, String, String | Returns the first argument with all matches of the regex in the second argument replaced by the third argument (Requires `regex_support` feature flag) |
|
//! | `str::regex_replace` | 3 | String, String, String | Returns the first argument with all matches of the regex in the second argument replaced by the third argument (Requires `regex_support` feature flag) |
|
||||||
//! | `str::to_lowercase` | 1 | String | Returns the lower-case version of the string |
|
//! | `str::to_lowercase` | 1 | String | Returns the lower-case version of the string |
|
||||||
|
@ -363,11 +363,6 @@ fn test_builtin_functions() {
|
|||||||
eval("math::hypot(8.2, 1.1)"),
|
eval("math::hypot(8.2, 1.1)"),
|
||||||
Ok(Value::Float((8.2 as FloatType).hypot(1.1)))
|
Ok(Value::Float((8.2 as FloatType).hypot(1.1)))
|
||||||
);
|
);
|
||||||
// Absolute
|
|
||||||
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
|
// Rounding
|
||||||
assert_eq!(eval("floor(1.1)"), Ok(Value::Float(1.0)));
|
assert_eq!(eval("floor(1.1)"), Ok(Value::Float(1.0)));
|
||||||
assert_eq!(eval("floor(1.9)"), Ok(Value::Float(1.0)));
|
assert_eq!(eval("floor(1.9)"), Ok(Value::Float(1.0)));
|
||||||
@ -389,6 +384,11 @@ fn test_builtin_functions() {
|
|||||||
assert_eq!(eval("math::is_infinite(1.0/0.0)"), Ok(Value::Boolean(true)));
|
assert_eq!(eval("math::is_infinite(1.0/0.0)"), Ok(Value::Boolean(true)));
|
||||||
assert_eq!(eval("math::is_normal(1.0/0.0)"), Ok(Value::Boolean(false)));
|
assert_eq!(eval("math::is_normal(1.0/0.0)"), Ok(Value::Boolean(false)));
|
||||||
assert_eq!(eval("math::is_normal(0)"), Ok(Value::Boolean(false)));
|
assert_eq!(eval("math::is_normal(0)"), Ok(Value::Boolean(false)));
|
||||||
|
// Absolute
|
||||||
|
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)));
|
||||||
// Other
|
// Other
|
||||||
assert_eq!(eval("typeof(4.0, 3)"), Ok(Value::String("tuple".into())));
|
assert_eq!(eval("typeof(4.0, 3)"), Ok(Value::String("tuple".into())));
|
||||||
assert_eq!(eval("typeof(4.0)"), Ok(Value::String("float".into())));
|
assert_eq!(eval("typeof(4.0)"), Ok(Value::String("float".into())));
|
||||||
|
Loading…
Reference in New Issue
Block a user