diff options
author | Martin Braun <martin.braun@ettus.com> | 2020-06-10 01:09:33 +0200 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2020-06-15 13:49:36 -0500 |
commit | 5193d3f9494c977ac4694a1fc6fb0570ce6e92a7 (patch) | |
tree | a4ea929c8d4d0edc071cdded7f56e7c46b65929a | |
parent | f1361234091036fdf7e599c9596151732cbb5683 (diff) | |
download | uhd-5193d3f9494c977ac4694a1fc6fb0570ce6e92a7.tar.gz uhd-5193d3f9494c977ac4694a1fc6fb0570ce6e92a7.tar.bz2 uhd-5193d3f9494c977ac4694a1fc6fb0570ce6e92a7.zip |
tests: Add infrastructure to run Python unit tests
- Add UHD_ADD_PYTEST() CMake macro
- Add CMake code to tests/CMakeLists.txt to auto-run all registered
Python unit tests
- Add a token unit test (it replicates parts of ranges_test.cpp)
The way Python-based unit tests are implemented in UHD is that they can
import uhd, and then operate on the module as usual.
Writing unit tests in Python instead of C++ can have multiple
advantages:
- If they test PyBind-wrapped C++ code, they can test both the binding
and the underlying C++ code at once
- Writing unit tests in Python may be more concise
-rw-r--r-- | host/cmake/Modules/UHDUnitTest.cmake | 12 | ||||
-rw-r--r-- | host/tests/CMakeLists.txt | 17 | ||||
-rw-r--r-- | host/tests/pyranges_test.py | 20 |
3 files changed, 49 insertions, 0 deletions
diff --git a/host/cmake/Modules/UHDUnitTest.cmake b/host/cmake/Modules/UHDUnitTest.cmake index 9a71ca2aa..f1f52addc 100644 --- a/host/cmake/Modules/UHDUnitTest.cmake +++ b/host/cmake/Modules/UHDUnitTest.cmake @@ -104,3 +104,15 @@ function(UHD_ADD_TEST test_name) endif(WIN32) endfunction(UHD_ADD_TEST) + +######################################################################## +# Add a Python unit test +######################################################################## +function(UHD_ADD_PYTEST test_name) + add_test(NAME ${test_name} + COMMAND ${RUNTIME_PYTHON_EXECUTABLE} -m unittest discover + -s ${CMAKE_CURRENT_SOURCE_DIR} + -p "${test_name}.*" + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/python" + ) +endfunction(UHD_ADD_PYTEST) diff --git a/host/tests/CMakeLists.txt b/host/tests/CMakeLists.txt index 6207987ef..bc0ff8b3b 100644 --- a/host/tests/CMakeLists.txt +++ b/host/tests/CMakeLists.txt @@ -64,6 +64,12 @@ set(test_sources multichan_register_iface_test.cpp ) +# Note: Python-based tests cannot have the same name as a C++-based test (i.e., +# only differ in the cpp/py file extension). If in doubt, prepend 'py' +set(pytest_sources + pyranges_test.py +) + #turn each test cpp file into an executable with an int main() function add_definitions(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN) @@ -98,6 +104,17 @@ foreach(benchmark_source ${benchmark_sources}) UHD_INSTALL(TARGETS ${benchmark_name} RUNTIME DESTINATION ${PKG_LIB_DIR}/tests COMPONENT tests) endforeach(benchmark_source) +if(ENABLE_PYTHON_API) + foreach(test_source ${pytest_sources}) + get_filename_component(test_name ${test_source} NAME_WE) + UHD_ADD_PYTEST(${test_name}) + endforeach(test_source) + UHD_INSTALL(FILES ${pytest_sources} + DESTINATION ${PKG_LIB_DIR}/tests + COMPONENT tests + ) +endif(ENABLE_PYTHON_API) + ############################################################################### # Add a unit test that requires linkage to internal parts of UHD which are not # API diff --git a/host/tests/pyranges_test.py b/host/tests/pyranges_test.py new file mode 100644 index 000000000..17137e9f2 --- /dev/null +++ b/host/tests/pyranges_test.py @@ -0,0 +1,20 @@ +# +# Copyright 2020 Ettus Research, a National Instruments Brand +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +""" +Unit test for uhd.types.*Range +""" + +import unittest +import uhd + +class RangesTest(unittest.TestCase): + """ Test Python-wrapped ranges classes """ + def test_meta_range(self): + """ Test MetaRange.clip() """ + my_range = uhd.types.MetaRange(1.0, 10.0, 0.5) + self.assertEqual(my_range.clip(5.0), 5.0) + self.assertEqual(my_range.clip(11.0), 10.0) + self.assertEqual(my_range.clip(5.1, True), 5.0) |