From f6d1aa7bc949154dc0682f899b583bc1089adfae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 16 Aug 2012 15:29:07 +0200 Subject: [PATCH] SceneGraph: Test for Implementation::Camera<3>::fixAspectRatio(). --- src/SceneGraph/Camera.h | 4 +++- src/SceneGraph/Test/CameraTest.cpp | 30 +++++++++++++++++++++++++++++- src/SceneGraph/Test/CameraTest.h | 1 + 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/SceneGraph/Camera.h b/src/SceneGraph/Camera.h index d1a8674f8..b5fa51e51 100644 --- a/src/SceneGraph/Camera.h +++ b/src/SceneGraph/Camera.h @@ -137,12 +137,14 @@ template _viewport; }; +/** @todo Export implementation symbols only for tests */ + #ifndef DOXYGEN_GENERATING_OUTPUT /* These templates are instantiated in source file */ extern template class SCENEGRAPH_EXPORT Camera; namespace Implementation { - template<> class Camera<3> { + template<> class SCENEGRAPH_EXPORT Camera<3> { public: static Matrix4 fixAspectRatio(AspectRatioPolicy aspectRatioPolicy, const Math::Vector2& viewport); }; diff --git a/src/SceneGraph/Test/CameraTest.cpp b/src/SceneGraph/Test/CameraTest.cpp index 53e4cbe42..496dd2de3 100644 --- a/src/SceneGraph/Test/CameraTest.cpp +++ b/src/SceneGraph/Test/CameraTest.cpp @@ -22,10 +22,38 @@ CORRADE_TEST_MAIN(Magnum::SceneGraph::Test::CameraTest) namespace Magnum { namespace SceneGraph { namespace Test { CameraTest::CameraTest() { - addTests(&CameraTest::orthographic, + addTests(&CameraTest::fixAspectRatio, + &CameraTest::orthographic, &CameraTest::perspective); } +void CameraTest::fixAspectRatio() { + /* Division by zero */ + Math::Vector2 sizeZeroY(400, 0); + Math::Vector2 sizeZeroX(0, 300); + CORRADE_COMPARE(Implementation::Camera<3>::fixAspectRatio(Implementation::AspectRatioPolicy::Clip, sizeZeroY), Matrix4()); + CORRADE_COMPARE(Implementation::Camera<3>::fixAspectRatio(Implementation::AspectRatioPolicy::Extend, sizeZeroX), Matrix4()); + + Math::Vector2 size(400, 300); + + /* Not preserved */ + CORRADE_COMPARE(Implementation::Camera<3>::fixAspectRatio(Implementation::AspectRatioPolicy::NotPreserved, size), Matrix4()); + + /* Clip */ + Matrix4 expectedClip(1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 4.0f/3.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f); + CORRADE_COMPARE(Implementation::Camera<3>::fixAspectRatio(Implementation::AspectRatioPolicy::Clip, size), expectedClip); + + /* Extend */ + Matrix4 expectedExtend(3.0f/4.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f); + CORRADE_COMPARE(Implementation::Camera<3>::fixAspectRatio(Implementation::AspectRatioPolicy::Extend, size), expectedExtend); +} + void CameraTest::orthographic() { Camera3D camera; camera.setOrthographic(5, 1, 9); diff --git a/src/SceneGraph/Test/CameraTest.h b/src/SceneGraph/Test/CameraTest.h index ec9a699b0..f460c241f 100644 --- a/src/SceneGraph/Test/CameraTest.h +++ b/src/SceneGraph/Test/CameraTest.h @@ -23,6 +23,7 @@ class CameraTest: public Corrade::TestSuite::Tester { public: CameraTest(); + void fixAspectRatio(); void orthographic(); void perspective(); };