parent
b18521b8aa
commit
7d0abc8406
@ -18,6 +18,7 @@
|
||||
* Rename `Error` to `EvalexprError`
|
||||
* Rename `Configuration` to `Context`
|
||||
* Rename `HashMapConfiguration` to `HashMapContext` and `EmptyConfiguration` to `EmptyContext`
|
||||
* Rename `Value::as_float` to `Value::as_number` and add new `Value::as_float` that fails if value is an integer
|
||||
|
||||
### Fixed
|
||||
|
||||
|
@ -154,7 +154,7 @@ impl Operator for Add {
|
||||
}
|
||||
} else {
|
||||
Ok(Value::Float(
|
||||
arguments[0].as_float().unwrap() + arguments[1].as_float().unwrap(),
|
||||
arguments[0].as_number().unwrap() + arguments[1].as_number().unwrap(),
|
||||
))
|
||||
}
|
||||
}
|
||||
@ -190,7 +190,7 @@ impl Operator for Sub {
|
||||
}
|
||||
} else {
|
||||
Ok(Value::Float(
|
||||
arguments[0].as_float().unwrap() - arguments[1].as_float().unwrap(),
|
||||
arguments[0].as_number().unwrap() - arguments[1].as_number().unwrap(),
|
||||
))
|
||||
}
|
||||
}
|
||||
@ -221,7 +221,7 @@ impl Operator for Neg {
|
||||
Err(EvalexprError::negation_error(arguments[0].clone()))
|
||||
}
|
||||
} else {
|
||||
Ok(Value::Float(-arguments[0].as_float().unwrap()))
|
||||
Ok(Value::Float(-arguments[0].as_number().unwrap()))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -256,7 +256,7 @@ impl Operator for Mul {
|
||||
}
|
||||
} else {
|
||||
Ok(Value::Float(
|
||||
arguments[0].as_float().unwrap() * arguments[1].as_float().unwrap(),
|
||||
arguments[0].as_number().unwrap() * arguments[1].as_number().unwrap(),
|
||||
))
|
||||
}
|
||||
}
|
||||
@ -292,7 +292,7 @@ impl Operator for Div {
|
||||
}
|
||||
} else {
|
||||
Ok(Value::Float(
|
||||
arguments[0].as_float().unwrap() / arguments[1].as_float().unwrap(),
|
||||
arguments[0].as_number().unwrap() / arguments[1].as_number().unwrap(),
|
||||
))
|
||||
}
|
||||
}
|
||||
@ -328,7 +328,7 @@ impl Operator for Mod {
|
||||
}
|
||||
} else {
|
||||
Ok(Value::Float(
|
||||
arguments[0].as_float().unwrap() % arguments[1].as_float().unwrap(),
|
||||
arguments[0].as_number().unwrap() % arguments[1].as_number().unwrap(),
|
||||
))
|
||||
}
|
||||
}
|
||||
@ -354,9 +354,9 @@ impl Operator for Exp {
|
||||
|
||||
Ok(Value::Float(
|
||||
arguments[0]
|
||||
.as_float()
|
||||
.as_number()
|
||||
.unwrap()
|
||||
.powf(arguments[1].as_float().unwrap()),
|
||||
.powf(arguments[1].as_number().unwrap()),
|
||||
))
|
||||
}
|
||||
}
|
||||
@ -434,7 +434,7 @@ impl Operator for Gt {
|
||||
Ok(Value::Boolean(false))
|
||||
}
|
||||
} else {
|
||||
if arguments[0].as_float().unwrap() > arguments[1].as_float().unwrap() {
|
||||
if arguments[0].as_number().unwrap() > arguments[1].as_number().unwrap() {
|
||||
Ok(Value::Boolean(true))
|
||||
} else {
|
||||
Ok(Value::Boolean(false))
|
||||
@ -468,7 +468,7 @@ impl Operator for Lt {
|
||||
Ok(Value::Boolean(false))
|
||||
}
|
||||
} else {
|
||||
if arguments[0].as_float().unwrap() < arguments[1].as_float().unwrap() {
|
||||
if arguments[0].as_number().unwrap() < arguments[1].as_number().unwrap() {
|
||||
Ok(Value::Boolean(true))
|
||||
} else {
|
||||
Ok(Value::Boolean(false))
|
||||
@ -502,7 +502,7 @@ impl Operator for Geq {
|
||||
Ok(Value::Boolean(false))
|
||||
}
|
||||
} else {
|
||||
if arguments[0].as_float().unwrap() >= arguments[1].as_float().unwrap() {
|
||||
if arguments[0].as_number().unwrap() >= arguments[1].as_number().unwrap() {
|
||||
Ok(Value::Boolean(true))
|
||||
} else {
|
||||
Ok(Value::Boolean(false))
|
||||
@ -536,7 +536,7 @@ impl Operator for Leq {
|
||||
Ok(Value::Boolean(false))
|
||||
}
|
||||
} else {
|
||||
if arguments[0].as_float().unwrap() <= arguments[1].as_float().unwrap() {
|
||||
if arguments[0].as_number().unwrap() <= arguments[1].as_number().unwrap() {
|
||||
Ok(Value::Boolean(true))
|
||||
} else {
|
||||
Ok(Value::Boolean(false))
|
||||
|
@ -52,6 +52,14 @@ impl Value {
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns true if `self` is a `Value::Int` or `Value::Float`.
|
||||
pub fn is_number(&self) -> bool {
|
||||
match self {
|
||||
Value::Int(_) | Value::Float(_) => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns true if `self` is a `Value::Boolean`.
|
||||
pub fn is_boolean(&self) -> bool {
|
||||
match self {
|
||||
@ -84,9 +92,17 @@ impl Value {
|
||||
}
|
||||
}
|
||||
|
||||
/// Clones the value stored in `self` as `FloatType`, or returns `Err` if `self` is not a `Value::Float`.
|
||||
pub fn as_float(&self) -> Result<FloatType, EvalexprError> {
|
||||
match self {
|
||||
Value::Float(f) => Ok(*f),
|
||||
value => Err(EvalexprError::expected_float(value.clone())),
|
||||
}
|
||||
}
|
||||
|
||||
/// Clones the value stored in `self` as `FloatType`, or returns `Err` if `self` is not a `Value::Float` or `Value::Int`.
|
||||
/// Note that this method silently converts `IntType` to `FloatType`, if `self` is a `Value::Int`.
|
||||
pub fn as_float(&self) -> Result<FloatType, EvalexprError> {
|
||||
pub fn as_number(&self) -> Result<FloatType, EvalexprError> {
|
||||
match self {
|
||||
Value::Float(f) => Ok(*f),
|
||||
Value::Int(i) => Ok(*i as FloatType),
|
||||
|
Loading…
Reference in New Issue
Block a user