From 82b40944ac0f0df0c599d2d43cf8dc5269892409 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 16 Oct 2015 23:43:49 +0200 Subject: [PATCH] Math: test multiplication/division of Dual numbers with different type. Only one multiplication order works currently, which is wrong. --- src/Magnum/Math/Test/CMakeLists.txt | 2 +- src/Magnum/Math/Test/DualTest.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Magnum/Math/Test/CMakeLists.txt b/src/Magnum/Math/Test/CMakeLists.txt index 13596b1a6..7bfde5166 100644 --- a/src/Magnum/Math/Test/CMakeLists.txt +++ b/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) diff --git a/src/Magnum/Math/Test/DualTest.cpp b/src/Magnum/Math/Test/DualTest.cpp index 999959b9f..30fe43cb4 100644 --- a/src/Magnum/Math/Test/DualTest.cpp +++ b/src/Magnum/Math/Test/DualTest.cpp @@ -27,6 +27,7 @@ #include #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 Dual; +typedef Math::Dual> 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)); }