Browse Source

Math: added sign() function.

pull/278/head
Vladimír Vondruš 13 years ago
parent
commit
5e8606a755
  1. 22
      src/Math/Functions.h
  2. 9
      src/Math/Test/FunctionsTest.cpp

22
src/Math/Functions.h

@ -161,6 +161,28 @@ template<std::size_t size, class T> Vector<size, T> max(const Vector<size, T>& a
} }
#endif #endif
/**
@brief Sign
Returns `1.0` if @f$ x > 0 @f$, `0.0` if @f$ @p x = 0 @f$ and `-1.0` if
@f$ x < 0 @f$.
*/
#ifdef DOXYGEN_GENERATING_OUTPUT
template<class T> inline T sign(const T scalar);
#else
template<class T> inline typename std::enable_if<std::is_arithmetic<T>::value, T>::type sign(const T& scalar) {
if(scalar > T(0)) return T(1);
if(scalar < T(0)) return T(-1);
return T(0);
}
template<std::size_t size, class T> Vector<size, T> sign(const Vector<size, T>& a) {
Vector<size, T> out;
for(std::size_t i = 0; i != size; ++i)
out[i] = sign(a[i]);
return out;
}
#endif
/** @brief Absolute value */ /** @brief Absolute value */
#ifdef DOXYGEN_GENERATING_OUTPUT #ifdef DOXYGEN_GENERATING_OUTPUT
template<class T> inline T abs(const T& a); template<class T> inline T abs(const T& a);

9
src/Math/Test/FunctionsTest.cpp

@ -35,6 +35,7 @@ class FunctionsTest: public Corrade::TestSuite::Tester {
void min(); void min();
void max(); void max();
void sign();
void abs(); void abs();
void sqrt(); void sqrt();
void clamp(); void clamp();
@ -66,6 +67,7 @@ typedef Math::Vector3<Int> Vector3i;
FunctionsTest::FunctionsTest() { FunctionsTest::FunctionsTest() {
addTests({&FunctionsTest::min, addTests({&FunctionsTest::min,
&FunctionsTest::max, &FunctionsTest::max,
&FunctionsTest::sign,
&FunctionsTest::abs, &FunctionsTest::abs,
&FunctionsTest::sqrt, &FunctionsTest::sqrt,
&FunctionsTest::clamp, &FunctionsTest::clamp,
@ -96,6 +98,13 @@ void FunctionsTest::max() {
CORRADE_COMPARE(Math::max(Vector3i(5, -3, 2), Vector3i(9, -5, 18)), Vector3i(9, -3, 18)); CORRADE_COMPARE(Math::max(Vector3i(5, -3, 2), Vector3i(9, -5, 18)), Vector3i(9, -3, 18));
} }
void FunctionsTest::sign() {
CORRADE_COMPARE(Math::sign(3516), 1);
CORRADE_COMPARE(Math::sign(0.0f), 0.0f);
CORRADE_COMPARE(Math::sign(-3.7), -1.0);
CORRADE_COMPARE(Math::sign(Vector3i(0, -3, 2)), Vector3i(0, -1, 1));
}
void FunctionsTest::abs() { void FunctionsTest::abs() {
CORRADE_COMPARE(Math::abs(-5), 5); CORRADE_COMPARE(Math::abs(-5), 5);
CORRADE_COMPARE(Math::abs(5), 5); CORRADE_COMPARE(Math::abs(5), 5);

Loading…
Cancel
Save