GTEST_TEST(RotationMatrix, getZAngle) { float angle = 0_deg; RotationMatrix r = RotationMatrix::aroundZ(angle); float zAngle = r.getZAngle(); EXPECT_TRUE(Approx::isEqual(zAngle, angle)); angle = 90_deg; r = RotationMatrix::aroundZ(angle); zAngle = r.getZAngle(); EXPECT_TRUE(Approx::isEqual(zAngle, angle)); angle = 180_deg; r = RotationMatrix::aroundZ(angle); zAngle = r.getZAngle(); EXPECT_TRUE(Approx::isEqual(Angle::normalize(zAngle), Angle::normalize(angle))); angle = -180_deg; r = RotationMatrix::aroundZ(angle); zAngle = r.getZAngle(); EXPECT_TRUE(Approx::isEqual(Angle::normalize(zAngle), Angle::normalize(angle))); angle = 360_deg; r = RotationMatrix::aroundZ(angle); zAngle = r.getZAngle(); EXPECT_TRUE(Approx::isEqual(zAngle, Angle::normalize(angle))); for(int i = 0; i < RUNS; ++i) { angle = Random::uniform() * pi; r = RotationMatrix::aroundZ(angle); zAngle = r.getZAngle(); if(!Approx::isEqual(zAngle, angle, 1e-3f)) EXPECT_TRUE(Approx::isEqual(zAngle, angle, 1e-3f)) << "zAngle:\n" << zAngle << "\n" << "angle\n" << angle << "\n"; } }