diff --git a/README.rst b/README.rst
index 2b11f85..878c709 100644
--- a/README.rst
+++ b/README.rst
@@ -109,6 +109,16 @@ Returns a number with the product of arguments:
    >>> dicteval({"=mul": [3, 5]})
    15
 
+Function ``=all``
+'''''''''''''''''
+
+Return True if all elements of the iterable are true (or if the iterable is empty)
+
+   >>> dicteval({"=mul": (True, False)})
+   False
+   >>> dicteval({"=mul": (True, True)})
+   True
+
 To Do
 -----
 
diff --git a/dicteval/__init__.py b/dicteval/__init__.py
index 5978b4e..315fbee 100644
--- a/dicteval/__init__.py
+++ b/dicteval/__init__.py
@@ -35,6 +35,9 @@ class BuiltinLanguage(LanguageSpecification):
     def function_mul(self, value, evaluator, context):
         return functools.reduce(operator.mul, (evaluator(v, context) for v in value))
 
+    def function_all(self, value, evaluator, context):
+        return all(evaluator(v, context) for v in value)
+
 
 class Evaluator:
     def __init__(self, language_spec):

Implement and document builtin function: =all
Equivalent to the Python's builtin.
diff --git a/tests/test_eval.py b/tests/test_eval.py
index 98ca542..52f76cf 100644
--- a/tests/test_eval.py
+++ b/tests/test_eval.py
@@ -17,6 +17,9 @@ from dicteval.exceptions import FunctionNotFound
     ({"=sum": (3, 5)}, 8),
     ({"=sum": {"=": [3, 5]}}, 8),
     ({"=mul": (5, 3, 2, -1)}, -30),
+    ({"=all": (True, True, True)}, True),
+    ({"=all": (True, False, True)}, False),
+    ({"=all": (False, False, False)}, False),
 ])
 def test_basic_eval(expression, result):
     assert dicteval(expression) == result
@@ -45,6 +48,9 @@ def test_json_loads():
     ("not", False, True),
     ("sum", (1, 2), 3),
     ("mul", (2, 4), 8),
+    ("all", tuple(), True),
+    ("all", (True, True), True),
+    ("all", (True, False), False),
 ])
 def test_buitin_language(fn, args, result, context):
     language = BuiltinLanguage()

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
bump2version==1.0.1
bumpversion==0.6.0
-e git+https://github.com/osantana/dicteval.git@5e1970132fd7a6ac55785648a89cf2e3e2131965#egg=dicteval
exceptiongroup==1.2.2
iniconfig==2.1.0
packaging==24.2
pluggy==1.5.0
pytest==8.3.5
pytest-runner==6.0.1
tomli==2.2.1

name: dicteval
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - bump2version==1.0.1
      - bumpversion==0.6.0
      - exceptiongroup==1.2.2
      - iniconfig==2.1.0
      - packaging==24.2
      - pluggy==1.5.0
      - pytest==8.3.5
      - pytest-runner==6.0.1
      - tomli==2.2.1
prefix: /opt/conda/envs/dicteval

tests/test_eval.py::test_basic_eval[expression12-True] tests/test_eval.py::test_basic_eval[expression13-False] tests/test_eval.py::test_basic_eval[expression14-False] tests/test_eval.py::test_buitin_language[all-args9-True] tests/test_eval.py::test_buitin_language[all-args10-True] tests/test_eval.py::test_buitin_language[all-args11-False]
tests/test_eval.py::test_basic_eval[3-3] tests/test_eval.py::test_basic_eval[expression1-result1] tests/test_eval.py::test_basic_eval[expression2-result2] tests/test_eval.py::test_basic_eval[expression3-result3] tests/test_eval.py::test_basic_eval[x-x] tests/test_eval.py::test_basic_eval[expression5-3] tests/test_eval.py::test_basic_eval[expression6-result6] tests/test_eval.py::test_basic_eval[expression7-3] tests/test_eval.py::test_basic_eval[expression8-8] tests/test_eval.py::test_basic_eval[expression9-8] tests/test_eval.py::test_basic_eval[expression10-8] tests/test_eval.py::test_basic_eval[expression11--30] tests/test_eval.py::test_context_eval tests/test_eval.py::test_invalid_expression_object_with_no_result_key tests/test_eval.py::test_json_loads tests/test_eval.py::test_buitin_language[eq-args0-True] tests/test_eval.py::test_buitin_language[eq-args1-False] tests/test_eval.py::test_buitin_language[neq-args2-False] tests/test_eval.py::test_buitin_language[neq-args3-True] tests/test_eval.py::test_buitin_language[nop-4-4] tests/test_eval.py::test_buitin_language[not-True-False] tests/test_eval.py::test_buitin_language[not-False-True] tests/test_eval.py::test_buitin_language[sum-args7-3] tests/test_eval.py::test_buitin_language[mul-args8-8] tests/test_eval.py::test_function_not_found_error
README.rst dicteval/__init__.py
README.rst dicteval/__init__.py