diff options
-rw-r--r-- | test/Jamfile.jam | 1 | ||||
-rw-r--r-- | test/test-maths.cpp | 51 |
2 files changed, 52 insertions, 0 deletions
diff --git a/test/Jamfile.jam b/test/Jamfile.jam index f5d56eb..c6e6d5e 100644 --- a/test/Jamfile.jam +++ b/test/Jamfile.jam @@ -15,3 +15,4 @@ project : requirements ; run test-collection.cpp ; +run test-maths.cpp ; diff --git a/test/test-maths.cpp b/test/test-maths.cpp new file mode 100644 index 0000000..aed51d0 --- /dev/null +++ b/test/test-maths.cpp @@ -0,0 +1,51 @@ +#define BOOST_TEST_MODULE test_maths + +#include <boost/test/data/test_case.hpp> +#include <boost/test/unit_test.hpp> +#include <stream_support.hpp> + +#include <maths.h> +constexpr auto quarter_pi = pi / 4.F; + +using vecter_to_angle = std::tuple<glm::vec3, float>; +BOOST_DATA_TEST_CASE(test_flat_angle, + boost::unit_test::data::make<vecter_to_angle>( + {{north, 0}, {south, pi}, {west, half_pi}, {east, -half_pi}, {north + east, -quarter_pi}, + {south + east, quarter_pi * -3}, {north + west, quarter_pi}, {south + west, quarter_pi * 3}}), + v, a) +{ + BOOST_CHECK_CLOSE(flat_angle(v), a, 1.F); +} + +using normalize_angle = std::tuple<float, float>; +BOOST_DATA_TEST_CASE(test_angle_normalize, + boost::unit_test::data::make<normalize_angle>({ + {0, 0}, + {two_pi, 0}, + {-two_pi, 0}, + {half_pi, half_pi}, + {-half_pi, -half_pi}, + {half_pi * 3, -half_pi}, + {-half_pi * 3, half_pi}, + }), + in, exp) +{ + BOOST_CHECK_CLOSE(normalize(in), exp, 1); +} + +using pos3_to_arc = std::tuple<glm::vec3, glm::vec3, glm::vec3, Arc>; +BOOST_DATA_TEST_CASE(test_create_arc, + boost::unit_test::data::make<pos3_to_arc>({ + {{0, 0, 0}, north, east, {0, half_pi * 3}}, + {{0, 0, 0}, west, east, {half_pi, half_pi * 3}}, + {{0, 0, 0}, south, east, {pi, half_pi * 3}}, + {{0, 0, 0}, east, north, {-half_pi, 0}}, + {{0, 0, 0}, south, north, {pi, two_pi}}, + }), + c, s, e, a) +{ + const Arc arc {c, s, e}; + BOOST_REQUIRE_LT(arc.first, arc.second); + BOOST_CHECK_CLOSE(arc.first, a.first, 1.F); + BOOST_CHECK_CLOSE(arc.second, a.second, 1.F); +} |