diff options
| -rw-r--r-- | host/include/uhd/utils/math.hpp | 12 | ||||
| -rw-r--r-- | host/tests/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | host/tests/math_test.cpp | 29 | 
3 files changed, 41 insertions, 1 deletions
diff --git a/host/include/uhd/utils/math.hpp b/host/include/uhd/utils/math.hpp index 21825c3dc..a41a35d67 100644 --- a/host/include/uhd/utils/math.hpp +++ b/host/include/uhd/utils/math.hpp @@ -18,11 +18,11 @@  #ifndef INCLUDED_UHD_UTILS_MATH_HPP  #define INCLUDED_UHD_UTILS_MATH_HPP +#include <cmath>  #include <uhd/config.hpp>  #include <boost/cstdint.hpp>  #include <boost/numeric/conversion/bounds.hpp> -  namespace uhd {  /*! @@ -237,6 +237,16 @@ namespace fp_compare {                  == fp_compare::fp_compare_delta<double>(rhs, FREQ_COMPARISON_DELTA_HZ));      } +    //! Portable log2() +    template <typename float_t> UHD_INLINE +    float_t log2(float_t x) +    { +        // C++11 defines std::log2(), when that's universally supported +        // we can switch over. +        return std::log(x) / std::log(2); +    } + +  } // namespace math  } // namespace uhd diff --git a/host/tests/CMakeLists.txt b/host/tests/CMakeLists.txt index ea0b30cb8..579fd46ca 100644 --- a/host/tests/CMakeLists.txt +++ b/host/tests/CMakeLists.txt @@ -34,6 +34,7 @@ SET(test_sources      fp_compare_delta_test.cpp      fp_compare_epsilon_test.cpp      gain_group_test.cpp +    math_test.cpp      msg_test.cpp      property_test.cpp      ranges_test.cpp diff --git a/host/tests/math_test.cpp b/host/tests/math_test.cpp new file mode 100644 index 000000000..6c890c484 --- /dev/null +++ b/host/tests/math_test.cpp @@ -0,0 +1,29 @@ +// +// Copyright 2014 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 <http://www.gnu.org/licenses/>. +// + +#include <boost/test/unit_test.hpp> +#include <boost/cstdint.hpp> +#include <uhd/utils/math.hpp> + +// NOTE: This is not the only math test case, see e.g. special tests +// for fp comparison. + +BOOST_AUTO_TEST_CASE(test_log2){ +    double y = uhd::math::log2(16.0); +    BOOST_CHECK_EQUAL(y, 4.0); +} +  | 
