From bc9dd05988454428de1b6efd235d980b8eaa9afe Mon Sep 17 00:00:00 2001 From: Nicholas Corgan Date: Wed, 12 Aug 2015 12:19:20 -0700 Subject: C API cleanup, feature additions * Cleaned up usage of handles vs. handle pointers * Store global string for last error thrown * Removed uhd::device_addr_t handle, added std::vector handle --- host/tests/CMakeLists.txt | 4 +- host/tests/device_addrs_c_test.c | 90 --------------------------------------- host/tests/error_c_test.cpp | 18 ++++---- host/tests/string_vector_c_test.c | 90 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 102 insertions(+), 100 deletions(-) delete mode 100644 host/tests/device_addrs_c_test.c create mode 100644 host/tests/string_vector_c_test.c (limited to 'host/tests') diff --git a/host/tests/CMakeLists.txt b/host/tests/CMakeLists.txt index ac0486f2e..e41d61bde 100644 --- a/host/tests/CMakeLists.txt +++ b/host/tests/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright 2010-2011 Ettus Research LLC +# Copyright 2010-2015 Ettus Research LLC # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -55,11 +55,11 @@ SET(UHD_TEST_LIBRARY_DIRS ${Boost_LIBRARY_DIRS}) IF(ENABLE_C_API) LIST(APPEND test_sources - device_addrs_c_test.c eeprom_c_test.c error_c_test.cpp ranges_c_test.c sensors_c_test.c + string_vector_c_test.c subdev_spec_c_test.c ) ENDIF(ENABLE_C_API) diff --git a/host/tests/device_addrs_c_test.c b/host/tests/device_addrs_c_test.c deleted file mode 100644 index e84068a75..000000000 --- a/host/tests/device_addrs_c_test.c +++ /dev/null @@ -1,90 +0,0 @@ -// -// Copyright 2015 Ettus Research LLC -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// - -#include - -#include -#include -#include - -#define UHD_TEST_EXECUTE_OR_GOTO(label, ...) \ - if(__VA_ARGS__){ \ - fprintf(stderr, "Error occurred at %s:%d\n", __FILE__, (__LINE__-1)); \ - return_code = EXIT_FAILURE; \ - goto label; \ - } - -#define BUFFER_SIZE 1024 - -int main(){ - - // Variables - int return_code; - uhd_device_addrs_handle device_addrs; - size_t size; - char str_buffer[BUFFER_SIZE]; - - return_code = EXIT_SUCCESS; - - // Create device_addrs - UHD_TEST_EXECUTE_OR_GOTO(end_of_test, - uhd_device_addrs_make(&device_addrs) - ) - - // Add values - UHD_TEST_EXECUTE_OR_GOTO(free_device_addrs, - uhd_device_addrs_push_back(device_addrs, "key1=value1,key2=value2") - ) - UHD_TEST_EXECUTE_OR_GOTO(free_device_addrs, - uhd_device_addrs_push_back(device_addrs, "key3=value3,key4=value4") - ) - - // Check size - UHD_TEST_EXECUTE_OR_GOTO(free_device_addrs, - uhd_device_addrs_size(device_addrs, &size) - ) - if(size != 2){ - return_code = EXIT_FAILURE; - fprintf(stderr, "%s:%d: Invalid size: %lu vs. 2", - __FILE__, __LINE__,size); - goto free_device_addrs; - } - - // Make sure we get right value - UHD_TEST_EXECUTE_OR_GOTO(free_device_addrs, - uhd_device_addrs_at(device_addrs, 1, str_buffer, BUFFER_SIZE) - ) - if(strcmp(str_buffer, "key3=value3,key4=value4")){ - return_code = EXIT_FAILURE; - fprintf(stderr, "%s:%d: Mismatched daughterboard serial: \"%s\" vs. \"key3=value3,key4=value4\"\n", - __FILE__, __LINE__, - str_buffer); - } - - free_device_addrs: - if(return_code){ - uhd_device_addrs_last_error(device_addrs, str_buffer, BUFFER_SIZE); - fprintf(stderr, "device_addrs error: %s\n", str_buffer); - } - uhd_device_addrs_free(&device_addrs); - - end_of_test: - if(!return_code){ - printf("\nNo errors detected\n"); - } - return return_code; -} diff --git a/host/tests/error_c_test.cpp b/host/tests/error_c_test.cpp index bb9454678..8eb90f3d4 100644 --- a/host/tests/error_c_test.cpp +++ b/host/tests/error_c_test.cpp @@ -82,10 +82,11 @@ static const uhd::dict pretty_exception_names = uhd::cpp_exception_type cpp_exception_type ## _foo(expected_msg); \ error_code = throw_uhd_exception(&handle, &cpp_exception_type ## _foo); \ BOOST_CHECK_EQUAL(error_code, c_error_code); \ - BOOST_CHECK_EQUAL(handle.last_error, \ - str(boost::format("%s: %s") \ - % pretty_exception_names.get(BOOST_STRINGIZE(cpp_exception_type)) \ - % expected_msg)); + expected_msg = str(boost::format("%s: %s") \ + % pretty_exception_names.get(BOOST_STRINGIZE(cpp_exception_type)) \ + % expected_msg); \ + BOOST_CHECK_EQUAL(handle.last_error, expected_msg); \ + BOOST_CHECK_EQUAL(get_c_global_error_string(), expected_msg); // uhd::usb_error has a different constructor #define UHD_TEST_CHECK_USB_ERROR_CODE() \ @@ -93,10 +94,11 @@ static const uhd::dict pretty_exception_names = uhd::usb_error usb_error_foo(1, expected_msg); \ error_code = throw_uhd_exception(&handle, &usb_error_foo); \ BOOST_CHECK_EQUAL(error_code, UHD_ERROR_USB); \ - BOOST_CHECK_EQUAL(handle.last_error, \ - str(boost::format("%s: %s") \ - % pretty_exception_names.get("usb_error") \ - % expected_msg)); + expected_msg = str(boost::format("%s: %s") \ + % pretty_exception_names.get("usb_error") \ + % expected_msg); \ + BOOST_CHECK_EQUAL(handle.last_error, expected_msg); \ + BOOST_CHECK_EQUAL(get_c_global_error_string(), expected_msg); BOOST_AUTO_TEST_CASE(test_uhd_exception){ dummy_handle_t handle; diff --git a/host/tests/string_vector_c_test.c b/host/tests/string_vector_c_test.c new file mode 100644 index 000000000..fe055fd91 --- /dev/null +++ b/host/tests/string_vector_c_test.c @@ -0,0 +1,90 @@ +// +// Copyright 2015 Ettus Research LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +#include + +#include +#include +#include + +#define UHD_TEST_EXECUTE_OR_GOTO(label, ...) \ + if(__VA_ARGS__){ \ + fprintf(stderr, "Error occurred at %s:%d\n", __FILE__, (__LINE__-1)); \ + return_code = EXIT_FAILURE; \ + goto label; \ + } + +#define BUFFER_SIZE 1024 + +int main(){ + + // Variables + int return_code; + uhd_string_vector_handle string_vector; + size_t size; + char str_buffer[BUFFER_SIZE]; + + return_code = EXIT_SUCCESS; + + // Create string_vector + UHD_TEST_EXECUTE_OR_GOTO(end_of_test, + uhd_string_vector_make(&string_vector) + ) + + // Add values + UHD_TEST_EXECUTE_OR_GOTO(free_string_vector, + uhd_string_vector_push_back(&string_vector, "foo") + ) + UHD_TEST_EXECUTE_OR_GOTO(free_string_vector, + uhd_string_vector_push_back(&string_vector, "bar") + ) + + // Check size + UHD_TEST_EXECUTE_OR_GOTO(free_string_vector, + uhd_string_vector_size(string_vector, &size) + ) + if(size != 2){ + return_code = EXIT_FAILURE; + fprintf(stderr, "%s:%d: Invalid size: %lu vs. 2", + __FILE__, __LINE__,size); + goto free_string_vector; + } + + // Make sure we get right value + UHD_TEST_EXECUTE_OR_GOTO(free_string_vector, + uhd_string_vector_at(string_vector, 1, str_buffer, BUFFER_SIZE) + ) + if(strcmp(str_buffer, "bar")){ + return_code = EXIT_FAILURE; + fprintf(stderr, "%s:%d: Mismatched daughterboard serial: \"%s\" vs. \"key3=value3,key4=value4\"\n", + __FILE__, __LINE__, + str_buffer); + } + + free_string_vector: + if(return_code){ + uhd_string_vector_last_error(string_vector, str_buffer, BUFFER_SIZE); + fprintf(stderr, "string_vector error: %s\n", str_buffer); + } + uhd_string_vector_free(&string_vector); + + end_of_test: + if(!return_code){ + printf("\nNo errors detected\n"); + } + return return_code; +} -- cgit v1.2.3