diff --git a/lib/rule_engine/builtins.py b/lib/rule_engine/builtins.py index 299dd0f..dcb4d04 100644 --- a/lib/rule_engine/builtins.py +++ b/lib/rule_engine/builtins.py @@ -157,6 +157,8 @@ def from_defaults(cls, values=None, **kwargs): 'all': all, 'sum': sum, 'map': _builtin_map, + 'max': max, + 'min': min, 'filter': _builtin_filter, 'parse_datetime': BuiltinValueGenerator(lambda builtins: functools.partial(_builtin_parse_datetime, builtins)), 'parse_timedelta': parse_timedelta, @@ -176,6 +178,8 @@ def from_defaults(cls, values=None, **kwargs): 'any': ast.DataType.FUNCTION('any', return_type=ast.DataType.BOOLEAN, argument_types=(ast.DataType.ARRAY,)), 'sum': ast.DataType.FUNCTION('sum', return_type=ast.DataType.FLOAT, argument_types=(ast.DataType.ARRAY(ast.DataType.FLOAT),)), 'map': ast.DataType.FUNCTION('map', argument_types=(ast.DataType.FUNCTION, ast.DataType.ARRAY)), + 'max': ast.DataType.FUNCTION('max', return_type=ast.DataType.FLOAT, argument_types=(ast.DataType.ARRAY(ast.DataType.FLOAT),)), + 'min': ast.DataType.FUNCTION('min', return_type=ast.DataType.FLOAT, argument_types=(ast.DataType.ARRAY(ast.DataType.FLOAT),)), 'filter': ast.DataType.FUNCTION('filter', argument_types=(ast.DataType.FUNCTION, ast.DataType.ARRAY)), 'parse_datetime': ast.DataType.FUNCTION('parse_datetime', return_type=ast.DataType.DATETIME, argument_types=(ast.DataType.STRING,)), 'parse_timedelta': ast.DataType.FUNCTION('parse_timedelta', return_type=ast.DataType.TIMEDELTA, argument_types=(ast.DataType.STRING,)), diff --git a/tests/builtins.py b/tests/builtins.py index 17f03a4..2044e1d 100644 --- a/tests/builtins.py +++ b/tests/builtins.py @@ -142,6 +142,12 @@ def test_engine_buitins_function_map(self): self.assertBuiltinFunction('map', (2, 4, 6), lambda i: i * 2, [1, 2, 3]) self.assertBuiltinFunction('map', ('A', 'B'), lambda c: c.upper(), ['A', 'B']) + def test_engine_builtins_function_max(self): + self.assertBuiltinFunction('max', 10, [1, 10, -1, 1.5]) + + def test_engine_builtins_function_min(self): + self.assertBuiltinFunction('min', -1, [1, 10, -1, 1.5]) + def test_engine_buitins_function_filter(self): self.assertBuiltinFunction('filter', (1, 3), lambda i: i % 2, [1, 2, 3]) self.assertBuiltinFunction('filter', ('A', 'B'), lambda c: len(c), ['', 'A', 'B'])