From a5d393bdb034a1102273b7865c620e3501eb4001 Mon Sep 17 00:00:00 2001 From: Ziyang Hu Date: Tue, 9 May 2023 14:59:16 +0800 Subject: [PATCH] Fixes https://github.com/cozodb/cozo/issues/99 --- cozo-core/src/data/functions.rs | 3 +++ cozo-core/src/data/tests/functions.rs | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/cozo-core/src/data/functions.rs b/cozo-core/src/data/functions.rs index aca38beb..5aa07a38 100644 --- a/cozo-core/src/data/functions.rs +++ b/cozo-core/src/data/functions.rs @@ -1069,6 +1069,9 @@ define_op!(OP_MOD, 2, false); pub(crate) fn op_mod(args: &[DataValue]) -> Result { 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))) => { diff --git a/cozo-core/src/data/tests/functions.rs b/cozo-core/src/data/tests/functions.rs index 13a55f4b..1d0e5b13 100644 --- a/cozo-core/src/data/tests/functions.rs +++ b/cozo-core/src/data/tests/functions.rs @@ -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] @@ -1476,4 +1481,4 @@ fn test_range() { .unwrap() .into_json(); assert_eq!(res["rows"][0][0], json!([15, 13, 11, 9, 7, 5])); -} \ No newline at end of file +}