diff options
Diffstat (limited to 'tests/validation')
-rw-r--r-- | tests/validation/FixedPoint.h | 31 | ||||
-rw-r--r-- | tests/validation/Helpers.h | 8 | ||||
-rw-r--r-- | tests/validation/Validation.h | 27 |
3 files changed, 48 insertions, 18 deletions
diff --git a/tests/validation/FixedPoint.h b/tests/validation/FixedPoint.h index 9691e2a037..81c4f53724 100644 --- a/tests/validation/FixedPoint.h +++ b/tests/validation/FixedPoint.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 ARM Limited. + * Copyright (c) 2017-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -54,15 +54,26 @@ namespace traits // Promote types // *INDENT-OFF* // clang-format off +/** Promote a type */ template <typename T> struct promote { }; -template <> struct promote<uint8_t> { using type = uint16_t; }; -template <> struct promote<int8_t> { using type = int16_t; }; -template <> struct promote<uint16_t> { using type = uint32_t; }; -template <> struct promote<int16_t> { using type = int32_t; }; -template <> struct promote<uint32_t> { using type = uint64_t; }; -template <> struct promote<int32_t> { using type = int64_t; }; -template <> struct promote<uint64_t> { using type = uint64_t; }; -template <> struct promote<int64_t> { using type = int64_t; }; +/** Promote uint8_t to uint16_t */ +template <> struct promote<uint8_t> { using type = uint16_t; /**< Promoted type */ }; +/** Promote int8_t to int16_t */ +template <> struct promote<int8_t> { using type = int16_t; /**< Promoted type */ }; +/** Promote uint16_t to uint32_t */ +template <> struct promote<uint16_t> { using type = uint32_t; /**< Promoted type */ }; +/** Promote int16_t to int32_t */ +template <> struct promote<int16_t> { using type = int32_t; /**< Promoted type */ }; +/** Promote uint32_t to uint64_t */ +template <> struct promote<uint32_t> { using type = uint64_t; /**< Promoted type */ }; +/** Promote int32_t to int64_t */ +template <> struct promote<int32_t> { using type = int64_t; /**< Promoted type */ }; +/** Promote float to float */ +template <> struct promote<float> { using type = float; /**< Promoted type */ }; +/** Promote half to half */ +template <> struct promote<half> { using type = half; /**< Promoted type */ }; + +/** Get promoted type */ template <typename T> using promote_t = typename promote<T>::type; // clang-format on @@ -281,6 +292,7 @@ constexpr int clz(T value) return __builtin_clz(value) - (32 - std::numeric_limits<unsigned_T>::digits); } +/** Constant expressions */ template <typename T> struct constant_expr { @@ -362,6 +374,7 @@ struct constant_expr return static_cast<T>(std::min<U>(std::max<U>(val, static_cast<U>(std::numeric_limits<T>::min())), static_cast<U>(std::numeric_limits<T>::max()))); } }; +/** Functions */ struct functions { /** Output stream operator diff --git a/tests/validation/Helpers.h b/tests/validation/Helpers.h index b192f317b4..b5597090c6 100644 --- a/tests/validation/Helpers.h +++ b/tests/validation/Helpers.h @@ -151,10 +151,10 @@ TensorShape calculate_depth_concatenate_shape(const std::vector<TensorShape> &in /** Parameters of Harris Corners algorithm. */ struct HarrisCornersParameters { - float threshold{ 0.f }; - float sensitivity{ 0.f }; - float min_dist{ 0.f }; - uint8_t constant_border_value{ 0 }; + float threshold{ 0.f }; /**< Threshold */ + float sensitivity{ 0.f }; /**< Sensitivity */ + float min_dist{ 0.f }; /**< Minimum distance */ + uint8_t constant_border_value{ 0 }; /**< Border value */ }; /** Generate parameters for Harris Corners algorithm. */ diff --git a/tests/validation/Validation.h b/tests/validation/Validation.h index b5f3a4a57a..26271c8bf3 100644 --- a/tests/validation/Validation.h +++ b/tests/validation/Validation.h @@ -69,7 +69,10 @@ public: { } - /** Implicit conversion to the underlying type. */ + /** Implicit conversion to the underlying type. + * + * @return the underlying type. + */ constexpr operator T() const { return _value; @@ -102,7 +105,10 @@ public: { } - /** Implicit conversion to the underlying type. */ + /** Implicit conversion to the underlying type. + * + * @return the underlying type. + */ constexpr operator value_type() const { return _value; @@ -241,27 +247,36 @@ template <typename T, typename U, typename V = AbsoluteTolerance<float>> void validate_keypoints(T target_first, T target_last, U reference_first, U reference_last, V tolerance = AbsoluteTolerance<float>(), float allowed_missing_percentage = 5.f, float allowed_mismatch_percentage = 5.f); +/** Compare values with a tolerance. */ template <typename T> struct compare_base { + /** Construct a comparison object. + * + * @param[in] target Target value. + * @param[in] reference Reference value. + * @param[in] tolerance Allowed tolerance. + */ compare_base(typename T::value_type target, typename T::value_type reference, T tolerance = T(0)) : _target{ target }, _reference{ reference }, _tolerance{ tolerance } { } - typename T::value_type _target{}; - typename T::value_type _reference{}; - T _tolerance{}; + typename T::value_type _target{}; /**< Target value */ + typename T::value_type _reference{}; /**< Reference value */ + T _tolerance{}; /**< Tolerance value */ }; template <typename T> struct compare; +/** Compare values with an absolute tolerance */ template <typename U> struct compare<AbsoluteTolerance<U>> : public compare_base<AbsoluteTolerance<U>> { using compare_base<AbsoluteTolerance<U>>::compare_base; + /** Perform comparison */ operator bool() const { if(!support::cpp11::isfinite(this->_target) || !support::cpp11::isfinite(this->_reference)) @@ -281,11 +296,13 @@ struct compare<AbsoluteTolerance<U>> : public compare_base<AbsoluteTolerance<U>> } }; +/** Compare values with a relative tolerance */ template <typename U> struct compare<RelativeTolerance<U>> : public compare_base<RelativeTolerance<U>> { using compare_base<RelativeTolerance<U>>::compare_base; + /** Perform comparison */ operator bool() const { if(!support::cpp11::isfinite(this->_target) || !support::cpp11::isfinite(this->_reference)) |