aboutsummaryrefslogtreecommitdiff
path: root/delegate/python/test
diff options
context:
space:
mode:
Diffstat (limited to 'delegate/python/test')
-rw-r--r--delegate/python/test/conftest.py30
-rw-r--r--delegate/python/test/pytest.ini9
-rw-r--r--delegate/python/test/test_data/mock_model.tflitebin0 -> 37944 bytes
-rw-r--r--delegate/python/test/test_external_delegate.py65
-rw-r--r--delegate/python/test/utils.py24
5 files changed, 128 insertions, 0 deletions
diff --git a/delegate/python/test/conftest.py b/delegate/python/test/conftest.py
new file mode 100644
index 0000000000..780a0492e1
--- /dev/null
+++ b/delegate/python/test/conftest.py
@@ -0,0 +1,30 @@
+# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+import pytest
+import os
+
+
+@pytest.fixture(scope="module")
+def test_data_folder(request):
+ """
+ This fixture returns path to the folder with the shared test resources
+ """
+ return str(os.path.join(request.fspath.dirname, "test_data"))
+
+
+def pytest_addoption(parser):
+ """
+ Adds the program option 'delegate-dir' to pytest
+ """
+ parser.addoption("--delegate-dir",
+ action="append",
+ help="Directory of the armnn tflite delegate library",
+ required=True)
+
+
+def pytest_generate_tests(metafunc):
+ """
+ Makes the program option 'delegate-dir' available to all tests as a function fixture
+ """
+ if "delegate_dir" in metafunc.fixturenames:
+ metafunc.parametrize("delegate_dir", metafunc.config.getoption("delegate_dir")) \ No newline at end of file
diff --git a/delegate/python/test/pytest.ini b/delegate/python/test/pytest.ini
new file mode 100644
index 0000000000..719af3ce05
--- /dev/null
+++ b/delegate/python/test/pytest.ini
@@ -0,0 +1,9 @@
+# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+
+[pytest]
+addopts = --strict-markers
+markers =
+ CpuRefTest: marks tests that require the CpuRef backend
+ CpuAccTest: marks tests that require the CpuAcc backend
+ GpuAccTest: marks tests that require the GpuAcc backend \ No newline at end of file
diff --git a/delegate/python/test/test_data/mock_model.tflite b/delegate/python/test/test_data/mock_model.tflite
new file mode 100644
index 0000000000..0b8944d3ed
--- /dev/null
+++ b/delegate/python/test/test_data/mock_model.tflite
Binary files differ
diff --git a/delegate/python/test/test_external_delegate.py b/delegate/python/test/test_external_delegate.py
new file mode 100644
index 0000000000..995de8cd70
--- /dev/null
+++ b/delegate/python/test/test_external_delegate.py
@@ -0,0 +1,65 @@
+# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+
+import pytest
+import tflite_runtime.interpreter as tflite
+import os
+from utils import run_mock_model
+
+
+def test_external_delegate_unknown_options(delegate_dir):
+ print(delegate_dir)
+ with pytest.raises(ValueError):
+ tflite.load_delegate(
+ delegate_dir,
+ options={"wrong": "wrong"})
+
+
+def test_external_delegate_options_multiple_backends(delegate_dir):
+ tflite.load_delegate(
+ delegate_dir,
+ options={"backends": "GpuAcc,CpuAcc,CpuRef,Unknown"})
+
+
+@pytest.mark.GpuAccTest
+def test_external_delegate_options_gpu_tuning(delegate_dir, test_data_folder, tmp_path):
+
+ tuning_file = os.path.join(str(tmp_path), "test_gpu.tuning")
+ # cleanup previous test run if necessary
+ if os.path.exists(tuning_file):
+ os.remove(tuning_file)
+
+ # with tuning level 2 a tuning file should be created
+ armnn_delegate = tflite.load_delegate(
+ delegate_dir,
+ options={
+ "backends": "GpuAcc",
+ "gpu-tuning-level": "2",
+ "gpu-tuning-file": tuning_file,
+ "logging-severity": "info"})
+
+ run_mock_model(armnn_delegate, test_data_folder)
+
+ # destroy delegate, otherwise tuning file won't be written to file
+ armnn_delegate.__del__()
+ assert (os.path.exists(tuning_file))
+
+ # if no tuning level is provided it defaults to 0 which means it will use the tuning parameters from a tuning
+ # file if one is provided
+ armnn_delegate2 = tflite.load_delegate(
+ delegate_dir,
+ options={
+ "backends": "GpuAcc",
+ "gpu-tuning-file": tuning_file,
+ "logging-severity": "info"})
+
+ run_mock_model(armnn_delegate2, test_data_folder)
+
+ # cleanup
+ os.remove(tuning_file)
+
+def test_external_delegate_options_wrong_logging_level(delegate_dir):
+ with pytest.raises(ValueError):
+ tflite.load_delegate(
+ delegate_dir,
+ options={"logging-severity": "wrong"})
diff --git a/delegate/python/test/utils.py b/delegate/python/test/utils.py
new file mode 100644
index 0000000000..3adc24fe35
--- /dev/null
+++ b/delegate/python/test/utils.py
@@ -0,0 +1,24 @@
+# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+
+import tflite_runtime.interpreter as tflite
+import numpy as np
+import os
+
+
+def run_mock_model(delegate, test_data_folder):
+ model_path = os.path.join(test_data_folder, 'mock_model.tflite')
+ interpreter = tflite.Interpreter(model_path=model_path,
+ experimental_delegates=[delegate])
+ interpreter.allocate_tensors()
+
+ # Get input and output tensors.
+ input_details = interpreter.get_input_details()
+ output_details = interpreter.get_output_details()
+
+ # Test model on random input data.
+ input_shape = input_details[0]['shape']
+ input_data = np.array(np.random.random_sample(input_shape), dtype=np.uint8)
+ interpreter.set_tensor(input_details[0]['index'], input_data)
+
+ interpreter.invoke() \ No newline at end of file