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> { pub(crate) fn op_mod(args: &[DataValue]) -> Result<DataValue> {
Ok(match (&args[0], &args[1]) { Ok(match (&args[0], &args[1]) {
(DataValue::Num(Num::Int(a)), DataValue::Num(Num::Int(b))) => { (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::Int(a.rem(b)))
} }
(DataValue::Num(Num::Float(a)), DataValue::Num(Num::Float(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(), op_div(&[DataValue::from(7.0), DataValue::from(0.5)]).unwrap(),
DataValue::from(14.0) DataValue::from(14.0)
); );
assert!(op_div(&[DataValue::from(1), DataValue::from(0)]).is_ok());
} }
#[test] #[test]
@ -538,6 +539,10 @@ fn test_mod() {
op_mod(&[DataValue::from(-10), DataValue::from(7)]).unwrap(), op_mod(&[DataValue::from(-10), DataValue::from(7)]).unwrap(),
DataValue::from(-3) 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] #[test]
@ -1476,4 +1481,4 @@ fn test_range() {
.unwrap() .unwrap()
.into_json(); .into_json();
assert_eq!(res["rows"][0][0], json!([15, 13, 11, 9, 7, 5])); assert_eq!(res["rows"][0][0], json!([15, 13, 11, 9, 7, 5]));
} }

Loading…
Cancel
Save