From fec6822187f1c75e8fbf75d99cb55c9ecd3baa89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 17 Feb 2013 13:38:23 +0100 Subject: [PATCH] Math: added sqrt() scalar/vector overload. --- src/Math/Functions.h | 15 +++++++++++++++ src/Math/Test/FunctionsTest.cpp | 7 +++++++ 2 files changed, 22 insertions(+) diff --git a/src/Math/Functions.h b/src/Math/Functions.h index b313780b0..7db0b70dc 100644 --- a/src/Math/Functions.h +++ b/src/Math/Functions.h @@ -132,6 +132,21 @@ template Vector abs(const Vector& a } #endif +/** @brief Square root */ +#ifdef DOXYGEN_GENERATING_OUTPUT +template inline T sqrt(const T& a); +#else +template inline typename std::enable_if::value, T>::type sqrt(T a) { + return std::sqrt(a); +} +template Vector sqrt(const Vector& a) { + Vector out; + for(std::size_t i = 0; i != size; ++i) + out[i] = std::sqrt(a[i]); + return out; +} +#endif + /** @brief Clamp value diff --git a/src/Math/Test/FunctionsTest.cpp b/src/Math/Test/FunctionsTest.cpp index 049c9be67..6fc7ea819 100644 --- a/src/Math/Test/FunctionsTest.cpp +++ b/src/Math/Test/FunctionsTest.cpp @@ -27,6 +27,7 @@ class FunctionsTest: public Corrade::TestSuite::Tester { void min(); void max(); void abs(); + void sqrt(); void clamp(); void lerp(); void normalizeUnsigned(); @@ -50,6 +51,7 @@ FunctionsTest::FunctionsTest() { addTests(&FunctionsTest::min, &FunctionsTest::max, &FunctionsTest::abs, + &FunctionsTest::sqrt, &FunctionsTest::clamp, &FunctionsTest::lerp, &FunctionsTest::normalizeUnsigned, @@ -79,6 +81,11 @@ void FunctionsTest::abs() { CORRADE_COMPARE(Math::abs(Vector3i(5, -3, 2)), Vector3i(5, 3, 2)); } +void FunctionsTest::sqrt() { + CORRADE_COMPARE(Math::sqrt(16), 4); + CORRADE_COMPARE(Math::sqrt(Vector3i(256, 1, 0)), Vector3i(16, 1, 0)); +} + void FunctionsTest::clamp() { CORRADE_COMPARE(Math::clamp(0.5f, -1.0f, 5.0f), 0.5f); CORRADE_COMPARE(Math::clamp(-1.6f, -1.0f, 5.0f), -1.0f);