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(MathAngleTest AngleTest.cpp LIBRARIES MagnumMathTestLib)
corrade_add_test(MathRangeTest RangeTest.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(MathComplexTest ComplexTest.cpp LIBRARIES MagnumMathTestLib)
corrade_add_test(MathDualComplexTest DualComplexTest.cpp LIBRARIES MagnumMathTestLib) corrade_add_test(MathDualComplexTest DualComplexTest.cpp LIBRARIES MagnumMathTestLib)
corrade_add_test(MathQuaternionTest QuaternionTest.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 <Corrade/TestSuite/Tester.h>
#include "Magnum/Math/Dual.h" #include "Magnum/Math/Dual.h"
#include "Magnum/Math/Vector2.h"
namespace Magnum { namespace Math { namespace Test { namespace Magnum { namespace Math { namespace Test {
@ -43,6 +44,7 @@ struct DualTest: Corrade::TestSuite::Tester {
void addSubtract(); void addSubtract();
void negated(); void negated();
void multiplyDivide(); void multiplyDivide();
void multiplyDivideDifferentType();
void conjugated(); void conjugated();
void sqrt(); void sqrt();
@ -51,6 +53,7 @@ struct DualTest: Corrade::TestSuite::Tester {
}; };
typedef Math::Dual<Float> Dual; typedef Math::Dual<Float> Dual;
typedef Math::Dual<Vector2<Float>> DualVector2;
DualTest::DualTest() { DualTest::DualTest() {
addTests({&DualTest::construct, addTests({&DualTest::construct,
@ -63,6 +66,7 @@ DualTest::DualTest() {
&DualTest::addSubtract, &DualTest::addSubtract,
&DualTest::negated, &DualTest::negated,
&DualTest::multiplyDivide, &DualTest::multiplyDivide,
&DualTest::multiplyDivideDifferentType,
&DualTest::conjugated, &DualTest::conjugated,
&DualTest::sqrt, &DualTest::sqrt,
@ -132,6 +136,18 @@ void DualTest::multiplyDivide() {
CORRADE_COMPARE(c/b, a); 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() { void DualTest::conjugated() {
CORRADE_COMPARE(Dual(1.0f, -6.5f).conjugated(), Dual(1.0f, 6.5f)); CORRADE_COMPARE(Dual(1.0f, -6.5f).conjugated(), Dual(1.0f, 6.5f));
} }

Loading…
Cancel
Save