diff options
-rw-r--r-- | include/mbgl/style/rotation.hpp | 6 | ||||
-rw-r--r-- | test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | test/util/rotation.test.cpp | 23 |
3 files changed, 27 insertions, 3 deletions
diff --git a/include/mbgl/style/rotation.hpp b/include/mbgl/style/rotation.hpp index 862ede93b7..96b047c68c 100644 --- a/include/mbgl/style/rotation.hpp +++ b/include/mbgl/style/rotation.hpp @@ -1,5 +1,5 @@ #pragma once - +#include <mbgl/math/wrap.hpp> namespace mbgl { namespace style { @@ -9,8 +9,8 @@ namespace style { class Rotation { public: Rotation() = default; - Rotation(double angle_) : angle(angle_) {} - double period() const noexcept { return 360.0; } + Rotation(double angle_) : angle(mbgl::util::wrap<double>(angle_, 0, period())) {} + constexpr double period() const noexcept { return 360.0; } double getAngle() const noexcept { return angle; } friend bool operator==(const Rotation& lhs, const Rotation& rhs) { return lhs.angle == rhs.angle; } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 35d8f2300f..3aa02a1c7f 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -94,6 +94,7 @@ add_library( ${PROJECT_SOURCE_DIR}/test/util/pass.test.cpp ${PROJECT_SOURCE_DIR}/test/util/position.test.cpp ${PROJECT_SOURCE_DIR}/test/util/projection.test.cpp + ${PROJECT_SOURCE_DIR}/test/util/rotation.test.cpp ${PROJECT_SOURCE_DIR}/test/util/run_loop.test.cpp ${PROJECT_SOURCE_DIR}/test/util/string.test.cpp ${PROJECT_SOURCE_DIR}/test/util/text_conversions.test.cpp diff --git a/test/util/rotation.test.cpp b/test/util/rotation.test.cpp new file mode 100644 index 0000000000..57189ae988 --- /dev/null +++ b/test/util/rotation.test.cpp @@ -0,0 +1,23 @@ +#include <mbgl/test/util.hpp> + +#include <mbgl/style/rotation.hpp> +#include <mbgl/style/types.hpp> +#include <mbgl/util/constants.hpp> +#include <mbgl/util/interpolate.hpp> + +using namespace mbgl; +using namespace style; + +Rotation createRotation(double angle) { + return Rotation(angle); +} + +TEST(Rotation, Calculations) { + Rotation rot(42); + EXPECT_EQ(rot, Rotation(42 + 360)); + Rotation rot2(-42); + EXPECT_EQ(rot2, Rotation(360 - 42)); + + mbgl::util::Interpolator<mbgl::style::Rotation> i; + EXPECT_NEAR(i(rot, rot2, 0.5).getAngle(), 0.0, 0.00001); +} |