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";
  }
}