GTEST_TEST(RotationMatrix, getPackedAngleAxisFaulty)
{
  Vector3f vec(1, 2, 3);
  AngleAxisf aa(pi - 0.0001f, Vector3f::UnitX());
  RotationMatrix r = aa;
  Vector3f r1 = aa * vec;
  Vector3f r2 = Rotation::AngleAxis::unpack(r.getPackedAngleAxisFaulty()) * vec;
  EXPECT_FALSE(r1.isApprox(r2));

  r = aa = AngleAxisf(pi - 0.0001f, Vector3f::UnitY());
  r1 = aa * vec;
  r2 = Rotation::AngleAxis::unpack(r.getPackedAngleAxisFaulty()) * vec;
  EXPECT_FALSE(r1.isApprox(r2));

  r = aa = AngleAxisf(pi - 0.0001f, Vector3f::UnitZ());
  r1 = aa * vec;
  r2 = Rotation::AngleAxis::unpack(r.getPackedAngleAxisFaulty()) * vec;
  EXPECT_FALSE(r1.isApprox(r2));

  r = aa = AngleAxisf(-pi + 0.0001f, Vector3f::UnitX());
  r1 = aa * vec;
  r2 = Rotation::AngleAxis::unpack(r.getPackedAngleAxisFaulty()) * vec;
  EXPECT_FALSE(r1.isApprox(r2));

  r = aa = AngleAxisf(-pi + 0.0001f, Vector3f::UnitY());
  r1 = aa * vec;
  r2 = Rotation::AngleAxis::unpack(r.getPackedAngleAxisFaulty()) * vec;
  EXPECT_FALSE(r1.isApprox(r2));

  r = aa = AngleAxisf(-pi + 0.0001f, Vector3f::UnitZ());
  r1 = aa * vec;
  r2 = Rotation::AngleAxis::unpack(r.getPackedAngleAxisFaulty()) * vec;
  EXPECT_FALSE(r1.isApprox(r2));

  r = aa = AngleAxisf(-3.14060259f, Vector3f(-0.496929348f, 0.435349584f, 0.750687659f));
  AngleAxisf aa3 = Rotation::AngleAxis::unpack(r.getPackedAngleAxis());
  r1 = aa * vec;
  r2 = Rotation::AngleAxis::unpack(r.getPackedAngleAxisFaulty()) * vec;
  EXPECT_FALSE(r1.isApprox(r2));
}