TEST(ReachabilitySphere, convertToCapability)
{
    Capability capability(CONE, 70.0, 55.0, 25.0);
    
    ReachabilitySphere sphere = createReachabilitySphereFromCapability(capability, 500);

    Capability testCapability = sphere.convertToCapability();

    ASSERT_TRUE(testCapability.getType() == CONE);
    ASSERT_TRUE(std::abs(testCapability.getPhi() - capability.getPhi()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getTheta() - capability.getTheta()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getHalfOpeningAngle() - capability.getHalfOpeningAngle()) < 2.0);
    ASSERT_EQ(0.0, testCapability.getShapeFitError());


    capability = Capability(CYLINDER_1, 70.0, 55.0, 25.0);
    
    sphere = createReachabilitySphereFromCapability(capability, 10000);

    testCapability = sphere.convertToCapability();

    ASSERT_TRUE(testCapability.getType() == CYLINDER_1);
    ASSERT_TRUE(std::abs(testCapability.getPhi() - capability.getPhi()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getTheta() - capability.getTheta()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getHalfOpeningAngle() - capability.getHalfOpeningAngle()) < 2.0);
    // ASSERT_EQ(0.0, testCapability.getShapeFitError());
    // TODO: improve PCA to get correct axis (for now SFE could be 0.0 but is higher)


    capability = Capability(CYLINDER_2, 70.0, 55.0, 25.0);
    
    sphere = createReachabilitySphereFromCapability(capability, 10000);

    testCapability = sphere.convertToCapability();

    ASSERT_TRUE(testCapability.getType() == CYLINDER_2);
    ASSERT_TRUE(std::abs(testCapability.getPhi() - capability.getPhi()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getTheta() - capability.getTheta()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getHalfOpeningAngle() - capability.getHalfOpeningAngle()) < 2.0);
    // ASSERT_EQ(0.0, testCapability.getShapeFitError());
}