// // 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 #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 UHD_TEST_CHECK_CLOSE(lhs, rhs) (fabs(lhs-rhs) < 0.001) #define BUFFER_SIZE 1024 int main(){ // Variables int return_code; uhd_sensor_value_handle boolean_sensor, integer_sensor, realnum_sensor, string_sensor; uhd_sensor_value_data_type_t sensor_type; bool bool_out; int int_out; double realnum_out; char str_buffer[BUFFER_SIZE]; return_code = EXIT_SUCCESS; /* * Test a sensor made from a boolean */ // Create the sensor UHD_TEST_EXECUTE_OR_GOTO(end_of_test, uhd_sensor_value_make_from_bool( &boolean_sensor, "Bool sensor", false, "True", "False" ) ) // Check the name UHD_TEST_EXECUTE_OR_GOTO(free_boolean_sensor, uhd_sensor_value_name( boolean_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "Bool sensor")){ fprintf(stderr, "%s:%d: Boolean sensor name invalid: \"%s\" vs. \"false\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_boolean_sensor; } // Check the value UHD_TEST_EXECUTE_OR_GOTO(free_boolean_sensor, uhd_sensor_value_value( boolean_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "false")){ fprintf(stderr, "%s:%d: Boolean sensor value invalid: \"%s\" vs. \"false\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_boolean_sensor; } // Check the unit UHD_TEST_EXECUTE_OR_GOTO(free_boolean_sensor, uhd_sensor_value_unit( boolean_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "False")){ fprintf(stderr, "%s:%d: Boolean sensor unit invalid: \"%s\" vs. \"False\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_boolean_sensor; } // Check the type UHD_TEST_EXECUTE_OR_GOTO(free_boolean_sensor, uhd_sensor_value_data_type( boolean_sensor, &sensor_type ) ) if(sensor_type != UHD_SENSOR_VALUE_BOOLEAN){ fprintf(stderr, "%s:%d: Wrong sensor type detected: %d vs. %d\n", __FILE__, __LINE__, sensor_type, UHD_SENSOR_VALUE_BOOLEAN); return_code = EXIT_FAILURE; goto free_boolean_sensor; } bool_out = false; // Check the casted value UHD_TEST_EXECUTE_OR_GOTO(free_boolean_sensor, uhd_sensor_value_to_bool( boolean_sensor, &bool_out ) ) if(bool_out){ fprintf(stderr, "%s:%d: Boolean sensor value invalid: true vs. false\n", __FILE__, __LINE__); return_code = EXIT_FAILURE; goto free_boolean_sensor; } /* * Test a sensor made from a integer */ // Create the sensor UHD_TEST_EXECUTE_OR_GOTO(free_boolean_sensor, uhd_sensor_value_make_from_int( &integer_sensor, "Int sensor", 50, "Int type", "%d" ) ) // Check the name UHD_TEST_EXECUTE_OR_GOTO(free_integer_sensor, uhd_sensor_value_name( integer_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "Int sensor")){ fprintf(stderr, "%s:%d: Integer sensor name invalid: \"%s\" vs. \"Int sensor\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_integer_sensor; } // Check the value UHD_TEST_EXECUTE_OR_GOTO(free_integer_sensor, uhd_sensor_value_value( integer_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "50")){ fprintf(stderr, "%s:%d: Integer sensor value invalid: \"%s\" vs. \"50\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_integer_sensor; } // Check the unit UHD_TEST_EXECUTE_OR_GOTO(free_integer_sensor, uhd_sensor_value_unit( integer_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "Int type")){ fprintf(stderr, "%s:%d: Integer sensor unit invalid: \"%s\" vs. \"Int type\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_integer_sensor; } // Check the type UHD_TEST_EXECUTE_OR_GOTO(free_integer_sensor, uhd_sensor_value_data_type( integer_sensor, &sensor_type ) ) if(sensor_type != UHD_SENSOR_VALUE_INTEGER){ fprintf(stderr, "%s:%d: Wrong sensor type detected: %d vs. %d\n", __FILE__, __LINE__, sensor_type, UHD_SENSOR_VALUE_INTEGER); return_code = EXIT_FAILURE; goto free_integer_sensor; } // Check the casted value UHD_TEST_EXECUTE_OR_GOTO(free_integer_sensor, uhd_sensor_value_to_int( integer_sensor, &int_out ) ) if(int_out != 50){ fprintf(stderr, "%s:%d: Integer sensor value invalid: %d vs. 50\n", __FILE__, __LINE__, int_out); return_code = EXIT_FAILURE; goto free_integer_sensor; } /* * Test a sensor made from a real number */ // Create the sensor UHD_TEST_EXECUTE_OR_GOTO(free_integer_sensor, uhd_sensor_value_make_from_realnum( &realnum_sensor, "Realnum sensor", 50.0, "Realnum type", "%d" ) ) // Check the name UHD_TEST_EXECUTE_OR_GOTO(free_realnum_sensor, uhd_sensor_value_name( realnum_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "Realnum sensor")){ fprintf(stderr, "%s:%d: Realnum sensor name invalid: \"%s\" vs. \"Realnum sensor\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_realnum_sensor; } // Check the value UHD_TEST_EXECUTE_OR_GOTO(free_realnum_sensor, uhd_sensor_value_value( realnum_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "50")){ fprintf(stderr, "%s:%d: Realnum sensor value invalid: \"%s\" vs. \"50\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_realnum_sensor; } // Check the unit UHD_TEST_EXECUTE_OR_GOTO(free_realnum_sensor, uhd_sensor_value_unit( realnum_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "Realnum type")){ fprintf(stderr, "%s:%d: Realnum sensor unit invalid: \"%s\" vs. \"Realnum type\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_realnum_sensor; } // Check the type UHD_TEST_EXECUTE_OR_GOTO(free_realnum_sensor, uhd_sensor_value_data_type( realnum_sensor, &sensor_type ) ) if(sensor_type != UHD_SENSOR_VALUE_REALNUM){ fprintf(stderr, "%s:%d: Wrong sensor type detected: %d vs. %d\n", __FILE__, __LINE__, sensor_type, UHD_SENSOR_VALUE_REALNUM); return_code = EXIT_FAILURE; goto free_realnum_sensor; } // Check the casted value UHD_TEST_EXECUTE_OR_GOTO(free_realnum_sensor, uhd_sensor_value_to_realnum( realnum_sensor, &realnum_out ) ) if(realnum_out != 50.0){ fprintf(stderr, "%s:%d: Realnum sensor value invalid: %2.1f vs. 50.0\n", __FILE__, __LINE__, realnum_out); return_code = EXIT_FAILURE; goto free_realnum_sensor; } /* * Test a sensor made from a string */ // Create the sensor UHD_TEST_EXECUTE_OR_GOTO(free_realnum_sensor, uhd_sensor_value_make_from_string( &string_sensor, "String sensor", "String value", "String unit" ) ) // Check the name UHD_TEST_EXECUTE_OR_GOTO(free_string_sensor, uhd_sensor_value_name( string_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "String sensor")){ fprintf(stderr, "%s:%d: String sensor name invalid: \"%s\" vs. \"String sensor\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_string_sensor; } // Check the value UHD_TEST_EXECUTE_OR_GOTO(free_string_sensor, uhd_sensor_value_value( string_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "String value")){ fprintf(stderr, "%s:%d: String sensor value invalid: \"%s\" vs. \"String value\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_string_sensor; } // Check the unit UHD_TEST_EXECUTE_OR_GOTO(free_string_sensor, uhd_sensor_value_unit( string_sensor, str_buffer, BUFFER_SIZE ) ) if(strcmp(str_buffer, "String unit")){ fprintf(stderr, "%s:%d: String sensor unit invalid: \"%s\" vs. \"String unit\"\n", __FILE__, __LINE__, str_buffer); return_code = EXIT_FAILURE; goto free_string_sensor; } // Check the type UHD_TEST_EXECUTE_OR_GOTO(free_string_sensor, uhd_sensor_value_data_type( string_sensor, &sensor_type ) ) if(sensor_type != UHD_SENSOR_VALUE_STRING){ fprintf(stderr, "%s:%d: Wrong sensor type detected: %d vs. %d\n", __FILE__, __LINE__, sensor_type, UHD_SENSOR_VALUE_STRING); return_code = EXIT_FAILURE; goto free_string_sensor; } /* * Cleanup */ free_string_sensor: if(return_code){ uhd_sensor_value_last_error(string_sensor, str_buffer, BUFFER_SIZE); fprintf(stderr, "string_sensor error: %s\n", str_buffer); } uhd_sensor_value_free(&string_sensor); free_realnum_sensor: if(return_code){ uhd_sensor_value_last_error(realnum_sensor, str_buffer, BUFFER_SIZE); fprintf(stderr, "realnum_sensor error: %s\n", str_buffer); } uhd_sensor_value_free(&realnum_sensor); free_integer_sensor: if(return_code){ uhd_sensor_value_last_error(integer_sensor, str_buffer, BUFFER_SIZE); fprintf(stderr, "integer_sensor error: %s\n", str_buffer); } uhd_sensor_value_free(&integer_sensor); free_boolean_sensor: if(return_code){ uhd_sensor_value_last_error(boolean_sensor, str_buffer, BUFFER_SIZE); fprintf(stderr, "boolean_sensor error: %s\n", str_buffer); } uhd_sensor_value_free(&boolean_sensor); end_of_test: if(!return_code){ printf("\nNo errors detected.\n"); } return return_code; }