Add tests for evaluating operator tree and fix correct error for eval_number functions.
This commit is contained in:
parent
56a5f7b0e8
commit
97c5fc1c21
@ -190,7 +190,7 @@ impl Node {
|
|||||||
match self.eval_with_context(context) {
|
match self.eval_with_context(context) {
|
||||||
Ok(Value::Int(int)) => Ok(int as FloatType),
|
Ok(Value::Int(int)) => Ok(int as FloatType),
|
||||||
Ok(Value::Float(float)) => Ok(float),
|
Ok(Value::Float(float)) => Ok(float),
|
||||||
Ok(value) => Err(EvalexprError::expected_int(value)),
|
Ok(value) => Err(EvalexprError::expected_number(value)),
|
||||||
Err(error) => Err(error),
|
Err(error) => Err(error),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -281,7 +281,7 @@ impl Node {
|
|||||||
match self.eval_with_context_mut(context) {
|
match self.eval_with_context_mut(context) {
|
||||||
Ok(Value::Int(int)) => Ok(int as FloatType),
|
Ok(Value::Int(int)) => Ok(int as FloatType),
|
||||||
Ok(Value::Float(float)) => Ok(float),
|
Ok(Value::Float(float)) => Ok(float),
|
||||||
Ok(value) => Err(EvalexprError::expected_int(value)),
|
Ok(value) => Err(EvalexprError::expected_number(value)),
|
||||||
Err(error) => Err(error),
|
Err(error) => Err(error),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -683,105 +683,402 @@ fn test_shortcut_functions() {
|
|||||||
// With detour via build_operator_tree
|
// With detour via build_operator_tree
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
build_operator_tree("\"???\"").unwrap().eval_string(),
|
build_operator_tree("\"3.3\"").unwrap().eval_string(),
|
||||||
Ok("???".to_owned())
|
Ok("3.3".to_owned())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3.3").unwrap().eval_string(),
|
||||||
|
Err(EvalexprError::ExpectedString {
|
||||||
|
actual: Value::Float(3.3)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3..3").unwrap().eval_string(),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("3..3".to_owned()))
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
build_operator_tree("string")
|
build_operator_tree("string")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.eval_string_with_context(&context),
|
.eval_string_with_context(&context),
|
||||||
Ok("a string".to_string())
|
Ok("a string".to_owned())
|
||||||
);
|
);
|
||||||
assert_eq!(build_operator_tree("3.3").unwrap().eval_float(), Ok(3.3));
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
build_operator_tree("3.3")
|
build_operator_tree("3.3")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.eval_float_with_context(&context),
|
.eval_string_with_context(&context),
|
||||||
Ok(3.3)
|
Err(EvalexprError::ExpectedString {
|
||||||
|
actual: Value::Float(3.3)
|
||||||
|
})
|
||||||
);
|
);
|
||||||
assert_eq!(build_operator_tree("3").unwrap().eval_int(), Ok(3));
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
build_operator_tree("3")
|
build_operator_tree("3..3")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.eval_int_with_context(&context),
|
.eval_string_with_context(&context),
|
||||||
Ok(3)
|
Err(EvalexprError::VariableIdentifierNotFound("3..3".to_owned()))
|
||||||
);
|
);
|
||||||
assert_eq!(build_operator_tree("3").unwrap().eval_number(), Ok(3.0));
|
|
||||||
assert_eq!(
|
|
||||||
build_operator_tree("3")
|
|
||||||
.unwrap()
|
|
||||||
.eval_number_with_context(&context),
|
|
||||||
Ok(3.0)
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
build_operator_tree("true").unwrap().eval_boolean(),
|
|
||||||
Ok(true)
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
build_operator_tree("true")
|
|
||||||
.unwrap()
|
|
||||||
.eval_boolean_with_context(&context),
|
|
||||||
Ok(true)
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
build_operator_tree("3,3").unwrap().eval_tuple(),
|
|
||||||
Ok(vec![Value::Int(3), Value::Int(3)])
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
build_operator_tree("3,3")
|
|
||||||
.unwrap()
|
|
||||||
.eval_tuple_with_context(&context),
|
|
||||||
Ok(vec![Value::Int(3), Value::Int(3)])
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
build_operator_tree("")
|
|
||||||
.unwrap()
|
|
||||||
.eval_empty_with_context(&context),
|
|
||||||
Ok(EMPTY_VALUE)
|
|
||||||
);
|
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
build_operator_tree("string")
|
build_operator_tree("string")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.eval_string_with_context_mut(&mut context),
|
.eval_string_with_context_mut(&mut context),
|
||||||
Ok("a string".to_string())
|
Ok("a string".to_string())
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3.3")
|
||||||
|
.unwrap()
|
||||||
|
.eval_string_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::ExpectedString {
|
||||||
|
actual: Value::Float(3.3)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3..3")
|
||||||
|
.unwrap()
|
||||||
|
.eval_string_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("3..3".to_owned()))
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(build_operator_tree("3.3").unwrap().eval_float(), Ok(3.3));
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("33").unwrap().eval_float(),
|
||||||
|
Err(EvalexprError::ExpectedFloat {
|
||||||
|
actual: Value::Int(33)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("asd()").unwrap().eval_float(),
|
||||||
|
Err(EvalexprError::FunctionIdentifierNotFound("asd".to_owned()))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3.3")
|
||||||
|
.unwrap()
|
||||||
|
.eval_float_with_context(&context),
|
||||||
|
Ok(3.3)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("33")
|
||||||
|
.unwrap()
|
||||||
|
.eval_float_with_context(&context),
|
||||||
|
Err(EvalexprError::ExpectedFloat {
|
||||||
|
actual: Value::Int(33)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("asd")
|
||||||
|
.unwrap()
|
||||||
|
.eval_float_with_context(&context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("asd".to_owned()))
|
||||||
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
build_operator_tree("3.3")
|
build_operator_tree("3.3")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.eval_float_with_context_mut(&mut context),
|
.eval_float_with_context_mut(&mut context),
|
||||||
Ok(3.3)
|
Ok(3.3)
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("33")
|
||||||
|
.unwrap()
|
||||||
|
.eval_float_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::ExpectedFloat {
|
||||||
|
actual: Value::Int(33)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("asd")
|
||||||
|
.unwrap()
|
||||||
|
.eval_float_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("asd".to_owned()))
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(build_operator_tree("3").unwrap().eval_int(), Ok(3));
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3.3").unwrap().eval_int(),
|
||||||
|
Err(EvalexprError::ExpectedInt {
|
||||||
|
actual: Value::Float(3.3)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("(,);.").unwrap().eval_int(),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound(".".to_owned()))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3")
|
||||||
|
.unwrap()
|
||||||
|
.eval_int_with_context(&context),
|
||||||
|
Ok(3)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3.3")
|
||||||
|
.unwrap()
|
||||||
|
.eval_int_with_context(&context),
|
||||||
|
Err(EvalexprError::ExpectedInt {
|
||||||
|
actual: Value::Float(3.3)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("(,);.")
|
||||||
|
.unwrap()
|
||||||
|
.eval_int_with_context(&context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound(".".to_owned()))
|
||||||
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
build_operator_tree("3")
|
build_operator_tree("3")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.eval_int_with_context_mut(&mut context),
|
.eval_int_with_context_mut(&mut context),
|
||||||
Ok(3)
|
Ok(3)
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3.3")
|
||||||
|
.unwrap()
|
||||||
|
.eval_int_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::ExpectedInt {
|
||||||
|
actual: Value::Float(3.3)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("(,);.")
|
||||||
|
.unwrap()
|
||||||
|
.eval_int_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound(".".to_owned()))
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(build_operator_tree("3").unwrap().eval_number(), Ok(3.0));
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("true").unwrap().eval_number(),
|
||||||
|
Err(EvalexprError::ExpectedNumber {
|
||||||
|
actual: Value::Boolean(true)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("abc").unwrap().eval_number(),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("abc".to_owned()))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3")
|
||||||
|
.unwrap()
|
||||||
|
.eval_number_with_context(&context),
|
||||||
|
Ok(3.0)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("true")
|
||||||
|
.unwrap()
|
||||||
|
.eval_number_with_context(&context),
|
||||||
|
Err(EvalexprError::ExpectedNumber {
|
||||||
|
actual: Value::Boolean(true)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("abc")
|
||||||
|
.unwrap()
|
||||||
|
.eval_number_with_context(&context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("abc".to_owned()))
|
||||||
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
build_operator_tree("3")
|
build_operator_tree("3")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.eval_number_with_context_mut(&mut context),
|
.eval_number_with_context_mut(&mut context),
|
||||||
Ok(3.0)
|
Ok(3.0)
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("true")
|
||||||
|
.unwrap()
|
||||||
|
.eval_number_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::ExpectedNumber {
|
||||||
|
actual: Value::Boolean(true)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("abc")
|
||||||
|
.unwrap()
|
||||||
|
.eval_number_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("abc".to_owned()))
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("true").unwrap().eval_boolean(),
|
||||||
|
Ok(true)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("4").unwrap().eval_boolean(),
|
||||||
|
Err(EvalexprError::ExpectedBoolean {
|
||||||
|
actual: Value::Int(4)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("trueee").unwrap().eval_boolean(),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound(
|
||||||
|
"trueee".to_owned()
|
||||||
|
))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("true")
|
||||||
|
.unwrap()
|
||||||
|
.eval_boolean_with_context(&context),
|
||||||
|
Ok(true)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("4")
|
||||||
|
.unwrap()
|
||||||
|
.eval_boolean_with_context(&context),
|
||||||
|
Err(EvalexprError::ExpectedBoolean {
|
||||||
|
actual: Value::Int(4)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("trueee")
|
||||||
|
.unwrap()
|
||||||
|
.eval_boolean_with_context(&context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound(
|
||||||
|
"trueee".to_owned()
|
||||||
|
))
|
||||||
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
build_operator_tree("true")
|
build_operator_tree("true")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.eval_boolean_with_context_mut(&mut context),
|
.eval_boolean_with_context_mut(&mut context),
|
||||||
Ok(true)
|
Ok(true)
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("4")
|
||||||
|
.unwrap()
|
||||||
|
.eval_boolean_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::ExpectedBoolean {
|
||||||
|
actual: Value::Int(4)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("trueee")
|
||||||
|
.unwrap()
|
||||||
|
.eval_boolean_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound(
|
||||||
|
"trueee".to_owned()
|
||||||
|
))
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3,3").unwrap().eval_tuple(),
|
||||||
|
Ok(vec![Value::Int(3), Value::Int(3)])
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("33").unwrap().eval_tuple(),
|
||||||
|
Err(EvalexprError::ExpectedTuple {
|
||||||
|
actual: Value::Int(33)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3a3").unwrap().eval_tuple(),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("3a3".to_owned()))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3,3")
|
||||||
|
.unwrap()
|
||||||
|
.eval_tuple_with_context(&context),
|
||||||
|
Ok(vec![Value::Int(3), Value::Int(3)])
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("33")
|
||||||
|
.unwrap()
|
||||||
|
.eval_tuple_with_context(&context),
|
||||||
|
Err(EvalexprError::ExpectedTuple {
|
||||||
|
actual: Value::Int(33)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3a3")
|
||||||
|
.unwrap()
|
||||||
|
.eval_tuple_with_context(&context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("3a3".to_owned()))
|
||||||
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
build_operator_tree("3,3")
|
build_operator_tree("3,3")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.eval_tuple_with_context_mut(&mut context),
|
.eval_tuple_with_context_mut(&mut context),
|
||||||
Ok(vec![Value::Int(3), Value::Int(3)])
|
Ok(vec![Value::Int(3), Value::Int(3)])
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("33")
|
||||||
|
.unwrap()
|
||||||
|
.eval_tuple_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::ExpectedTuple {
|
||||||
|
actual: Value::Int(33)
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("3a3")
|
||||||
|
.unwrap()
|
||||||
|
.eval_tuple_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("3a3".to_owned()))
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("").unwrap().eval_empty(),
|
||||||
|
Ok(EMPTY_VALUE)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("()").unwrap().eval_empty(),
|
||||||
|
Ok(EMPTY_VALUE)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("(,)").unwrap().eval_empty(),
|
||||||
|
Err(EvalexprError::ExpectedEmpty {
|
||||||
|
actual: Value::Tuple(vec![Value::Empty, Value::Empty])
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("xaq").unwrap().eval_empty(),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("xaq".to_owned()))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("")
|
||||||
|
.unwrap()
|
||||||
|
.eval_empty_with_context(&context),
|
||||||
|
Ok(EMPTY_VALUE)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("()")
|
||||||
|
.unwrap()
|
||||||
|
.eval_empty_with_context(&context),
|
||||||
|
Ok(EMPTY_VALUE)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("(,)")
|
||||||
|
.unwrap()
|
||||||
|
.eval_empty_with_context(&context),
|
||||||
|
Err(EvalexprError::ExpectedEmpty {
|
||||||
|
actual: Value::Tuple(vec![Value::Empty, Value::Empty])
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("xaq")
|
||||||
|
.unwrap()
|
||||||
|
.eval_empty_with_context(&context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("xaq".to_owned()))
|
||||||
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
build_operator_tree("")
|
build_operator_tree("")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.eval_empty_with_context_mut(&mut context),
|
.eval_empty_with_context_mut(&mut context),
|
||||||
Ok(EMPTY_VALUE)
|
Ok(EMPTY_VALUE)
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("()")
|
||||||
|
.unwrap()
|
||||||
|
.eval_empty_with_context_mut(&mut context),
|
||||||
|
Ok(EMPTY_VALUE)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("(,)")
|
||||||
|
.unwrap()
|
||||||
|
.eval_empty_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::ExpectedEmpty {
|
||||||
|
actual: Value::Tuple(vec![Value::Empty, Value::Empty])
|
||||||
|
})
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
build_operator_tree("xaq")
|
||||||
|
.unwrap()
|
||||||
|
.eval_empty_with_context_mut(&mut context),
|
||||||
|
Err(EvalexprError::VariableIdentifierNotFound("xaq".to_owned()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
Loading…
Reference in New Issue
Block a user