Browse Source

Math: test multiplication/division of Dual numbers with different type.

Only one multiplication order works currently, which is wrong.
pull/114/merge
Vladimír Vondruš 11 years ago
parent
commit
82b40944ac
  1. 2
      src/Magnum/Math/Test/CMakeLists.txt
  2. 16
      src/Magnum/Math/Test/DualTest.cpp

2
src/Magnum/Math/Test/CMakeLists.txt

@ -44,7 +44,7 @@ corrade_add_test(MathUnitTest UnitTest.cpp)
corrade_add_test(MathAngleTest AngleTest.cpp LIBRARIES MagnumMathTestLib)
corrade_add_test(MathRangeTest RangeTest.cpp LIBRARIES MagnumMathTestLib)
corrade_add_test(MathDualTest DualTest.cpp)
corrade_add_test(MathDualTest DualTest.cpp LIBRARIES MagnumMathTestLib)
corrade_add_test(MathComplexTest ComplexTest.cpp LIBRARIES MagnumMathTestLib)
corrade_add_test(MathDualComplexTest DualComplexTest.cpp LIBRARIES MagnumMathTestLib)
corrade_add_test(MathQuaternionTest QuaternionTest.cpp LIBRARIES MagnumMathTestLib)

16
src/Magnum/Math/Test/DualTest.cpp

@ -27,6 +27,7 @@
#include <Corrade/TestSuite/Tester.h>
#include "Magnum/Math/Dual.h"
#include "Magnum/Math/Vector2.h"
namespace Magnum { namespace Math { namespace Test {
@ -43,6 +44,7 @@ struct DualTest: Corrade::TestSuite::Tester {
void addSubtract();
void negated();
void multiplyDivide();
void multiplyDivideDifferentType();
void conjugated();
void sqrt();
@ -51,6 +53,7 @@ struct DualTest: Corrade::TestSuite::Tester {
};
typedef Math::Dual<Float> Dual;
typedef Math::Dual<Vector2<Float>> DualVector2;
DualTest::DualTest() {
addTests({&DualTest::construct,
@ -63,6 +66,7 @@ DualTest::DualTest() {
&DualTest::addSubtract,
&DualTest::negated,
&DualTest::multiplyDivide,
&DualTest::multiplyDivideDifferentType,
&DualTest::conjugated,
&DualTest::sqrt,
@ -132,6 +136,18 @@ void DualTest::multiplyDivide() {
CORRADE_COMPARE(c/b, a);
}
void DualTest::multiplyDivideDifferentType() {
DualVector2 a{{1.5f, 2.0f}, {-4.0f, 1.3f}};
Dual b{-2.0f, 0.5f};
DualVector2 c{{-3.0f, -4.0f}, {8.75f, -1.6f}};
DualVector2 d{{-2.0f/1.5f, -1.0f}, {-7.25f/2.25f, 3.6f/4.0f}};
CORRADE_COMPARE(a*b, c);
//CORRADE_COMPARE(b*a, c); does not compile yet
CORRADE_COMPARE(c/b, a);
//CORRADE_COMPARE(b/a, d); does not compile yet
}
void DualTest::conjugated() {
CORRADE_COMPARE(Dual(1.0f, -6.5f).conjugated(), Dual(1.0f, 6.5f));
}

Loading…
Cancel
Save