import java.lang.reflect.Method;

public class TestCases {

    public boolean test01() throws Throwable {
        // Se comprueba si el método desplazar de la clase Cilindro funciona
        
        Cilindro cil1 = new Cilindro(2, 3, 5, 10);
        
        cil1.desplazar(10,10);
        
        boolean resultado = cil1.x==((double) 12) && cil1.y==((double) 13);
        
        return resultado;
    }

    public boolean test02() throws Throwable {
        // Se comprueba si el método desplazar de la clase GrupoFiguras funciona
        // Concretamente, se comprueba si desplaza a mas de una figura (y por tanto usa un bucle para recorrerlas)
        
        Cilindro cil1 = new Cilindro(2, 3, 5, 10);
        Cilindro cil2 = new Cilindro(0, 0, 1, 1);
        Cilindro cil3 = new Cilindro(1, 1, 4, 100);
        
        GrupoFiguras<Circulo> g1 = new GrupoFiguras<Circulo>(cil1);
        
        g1.anyadeFigura(cil1);
        g1.anyadeFigura(cil2);
        g1.anyadeFigura(cil3);
        
        g1.desplazar(10,10);
        
        boolean resultado = cil1.x==((double) 12) && cil1.y==((double) 13)
                          && cil2.x==((double) 10) && cil2.y==((double) 10)
                          && cil3.x==((double) 11) && cil3.y==((double) 11);
        
        return resultado;
    }

    public boolean test03() throws Throwable {
        // Se comprueba si el método desplazar de la clase GrupoFiguras funciona
        // Concretamente, se comprueba si desplaza solo las figuras con volumen (y por tanto usa "instanceof")
        
        Cilindro cil1 = new Cilindro(2, 3, 5, 10);
        Circulo cir1 = new Circulo(0, 0, 7);
        Cilindro cil2 = new Cilindro(0, 0, 1, 1);
        Circulo cir2 = new Circulo(2, 3, 5);
        Cilindro cil3 = new Cilindro(1, 1, 4, 100);
        Cubo cub1 =  new Cubo(1, 1, 4);
        
        GrupoFiguras<Circulo> g1 = new GrupoFiguras<Circulo>(cir1);
        
        g1.anyadeFigura(cil1);
        g1.anyadeFigura(cir1);
        g1.anyadeFigura(cil2);
        g1.anyadeFigura(cir2);
        g1.anyadeFigura(cil3);
        g1.anyadeFigura(cub1);
        
        g1.desplazar(10,10);
        
        boolean resultado = cil1.x==((double) 12) && cil1.y==((double) 13)
        && cil2.x==((double) 10) && cil2.y==((double) 10)
        && cil3.x==((double) 11) && cil3.y==((double) 11)
        && cir1.x==((double) 0) && cir1.y==((double) 0)
        && cir2.x==((double) 2) && cir2.y==((double) 3)
        && cub1.x==((double) 11) && cub1.y==((double) 11);
        
        return resultado;
    }

    private Method getMethod(Object object) throws Throwable {
        Class<?> clazz = object.getClass();
        Method[] methods = clazz.getDeclaredMethods();

        for (Method method : methods) {
        	if (method.getReturnType().getName().equals("int") &&
        		method.getParameterCount() == 0)
        		return method;
        }

        return null;
    }
}