From 695664837460bc3f0bf9eeebdb5e68a2fb1cc976 Mon Sep 17 00:00:00 2001 From: rikbellens Date: Tue, 27 Dec 2022 18:37:54 +0100 Subject: [PATCH] feat: support for the truncating division operator ~/ --- lib/src/evaluator.dart | 4 +++- lib/src/parser.dart | 3 ++- test/expressions_test.dart | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/src/evaluator.dart b/lib/src/evaluator.dart index e190d9a..41caf67 100644 --- a/lib/src/evaluator.dart +++ b/lib/src/evaluator.dart @@ -179,7 +179,9 @@ class ExpressionEvaluator { return left / right(); case '%': return left % right(); - case "??": + case '~/': + return left ~/ right(); + case '??': return left ?? right(); } throw ArgumentError( diff --git a/lib/src/parser.dart b/lib/src/parser.dart index a3e1d22..432c507 100644 --- a/lib/src/parser.dart +++ b/lib/src/parser.dart @@ -125,7 +125,8 @@ class ExpressionParser { '-': 9, '*': 10, '/': 10, - '%': 10 + '%': 10, + '~/': 10, }; // This function is responsible for gobbling an individual expression, diff --git a/test/expressions_test.dart b/test/expressions_test.dart index a74cbda..26beed7 100644 --- a/test/expressions_test.dart +++ b/test/expressions_test.dart @@ -186,6 +186,7 @@ void main() { '1+4-5%2*3': 2, 'x*x+y*y==z*z': true, 'n ?? 1': 1, + '5~/2': 2, }; expressions.forEach((e, r) {