Ziyang Hu 1 year ago
parent d057bcd35d
commit a5d393bdb0

@ -1069,6 +1069,9 @@ define_op!(OP_MOD, 2, false);
pub(crate) fn op_mod(args: &[DataValue]) -> Result<DataValue> {
Ok(match (&args[0], &args[1]) {
(DataValue::Num(Num::Int(a)), DataValue::Num(Num::Int(b))) => {
if *b == 0 {
bail!("'mod' requires non-zero divisor")
}
DataValue::Num(Num::Int(a.rem(b)))
}
(DataValue::Num(Num::Float(a)), DataValue::Num(Num::Float(b))) => {

@ -80,6 +80,7 @@ fn test_div() {
op_div(&[DataValue::from(7.0), DataValue::from(0.5)]).unwrap(),
DataValue::from(14.0)
);
assert!(op_div(&[DataValue::from(1), DataValue::from(0)]).is_ok());
}
#[test]
@ -538,6 +539,10 @@ fn test_mod() {
op_mod(&[DataValue::from(-10), DataValue::from(7)]).unwrap(),
DataValue::from(-3)
);
assert!(op_mod(&[DataValue::from(5), DataValue::from(0.)]).is_ok());
assert!(op_mod(&[DataValue::from(5.), DataValue::from(0.)]).is_ok());
assert!(op_mod(&[DataValue::from(5.), DataValue::from(0)]).is_ok());
assert!(op_mod(&[DataValue::from(5), DataValue::from(0)]).is_err());
}
#[test]

Loading…
Cancel
Save