#ifdef WITH_TESTS #include "../Tests.h" #include "../../geo/Heading.h" TEST(Heading, diff) { // 180 degree turn { // Heading h1(0,0, 0,+1); // Heading h2(0,0, 0,-1); // ASSERT_NEAR(h1.getDiffHalfRAD(h2), M_PI, 0.001); // ASSERT_NEAR(h2.getDiffHalfRAD(h1), M_PI, 0.001); } // ~180 degree turn { Heading h1(0,0, 0.00,+1); Heading h2(0,1, -0.01,-1); Heading h3(0,1, +0.01,-1); ASSERT_NEAR(h1.getDiffHalfRAD(h2), M_PI, 0.01); ASSERT_NEAR(h2.getDiffHalfRAD(h1), M_PI, 0.01); ASSERT_NEAR(h1.getDiffHalfRAD(h3), M_PI, 0.01); ASSERT_NEAR(h3.getDiffHalfRAD(h1), M_PI, 0.01); } } TEST(Heading, mod) { const float d = 0.0001; Heading h1(+0); h1 += 3.1415; ASSERT_NEAR(3.1415, h1.getRAD(), d); Heading h2(+4); h2 += 3; ASSERT_NEAR(7 - 2*M_PI, h2.getRAD(), d); Heading h3(+0); h3 -= 3; ASSERT_NEAR(2*M_PI-3, h3.getRAD(), d); } TEST(Heading, ctor) { // OK Heading(0); Heading(1); Heading(2); Heading(3); Heading(4); Heading(5); Heading(6); Heading(2*M_PI-0.0001); // out of range ASSERT_THROW(Heading(-0.0001), std::exception); ASSERT_THROW(Heading(2*M_PI+0.0001), std::exception); } TEST(Heading, eq) { ASSERT_EQ(Heading(0), Heading(0)); ASSERT_EQ(Heading(1), Heading(1)); ASSERT_EQ(Heading(2), Heading(2)); } //TEST(Heading, random) { // // two random values must not be equal // ASSERT_NE(Heading::rnd(), Heading::rnd()); // ASSERT_NE(Heading::rnd(), Heading::rnd()); // ASSERT_NE(Heading::rnd(), Heading::rnd()); //} #endif