import java.lang.reflect.Method;

public class TestCases {

    public boolean test01() throws Throwable {
    	Circulo circulo = new Circulo(2, 3, 5);
        Method method = this.getMethod(circulo);
        Object result = method.invoke(circulo);
        return (int) result == 1;
    }

    public boolean test02() throws Throwable {
    	Cilindro cilindro = new Cilindro(2, 3, 5, 6);
        Method method = this.getMethod(cilindro);
        Object result = method.invoke(cilindro);
        return (int) result == 2;
    }

    public boolean test03() throws Throwable {
        GrupoFiguras g = new GrupoFiguras();
        
        Circulo cir = new Circulo(10, 5, 3.5);
        Cilindro cil = new Cilindro(3, 5, 2, 2);
        
        g.anyadeFigura(cir);
        g.anyadeFigura(cil);
        
        int numeroCirculos = g.numeroCirculos();

        return numeroCirculos == 3;
    }

    public boolean test04() throws Throwable {
        GrupoFiguras g = new GrupoFiguras();
        
        Triangulo tri = new Triangulo(10, 5, 3.5, 1.0);
        Circulo cir = new Circulo(10, 5, 3.5);
        Rectangulo rec1 = new Rectangulo(10, 5, 3.5, 1.0);
        Cilindro cil = new Cilindro(3, 5, 2, 2);
        Rectangulo rec2 = new Rectangulo(10, 5, 3.5, 2.0);
        
        g.anyadeFigura(tri);
        g.anyadeFigura(cir);
        g.anyadeFigura(rec1);
        g.anyadeFigura(cil);
        g.anyadeFigura(rec2);
        
        int numeroCirculos = g.numeroCirculos();
        
        return numeroCirculos == 3;
    }

    public boolean test05() throws Throwable {
        GrupoFiguras g = new GrupoFiguras();

        Cilindro cil = new Cilindro(3, 5, 2, 2);
        Triangulo tri = new Triangulo(1.0, 2.0, 10, 4);

        g.anyadeFigura(tri);
        g.anyadeFigura(cil);
        
        int numeroCirculos = g.numeroCirculos();
        
        return numeroCirculos == 2;
    }

    public boolean test06() throws Throwable {
        GrupoFiguras g = new GrupoFiguras();

        Circulo cir = new Circulo(10, 5, 3.5);

        g.anyadeFigura(cir);

        int numeroCirculos = g.numeroCirculos();
        
        return numeroCirculos == 1;
    }

    public boolean test07() throws Throwable {
        GrupoFiguras g = new GrupoFiguras();

        Cilindro cil = new Cilindro(3, 5, 2, 2);
        Triangulo tri = new Triangulo(10, 5, 3.5,2);
        Rectangulo rec = new Rectangulo(10, 5, 3.5,2);
        
        g.anyadeFigura(tri);
        g.anyadeFigura(cil);
        g.anyadeFigura(rec);

        int numeroCirculos = g.numeroCirculos();
        
        return numeroCirculos == 2;
    }

    public boolean test08() throws Throwable {
        GrupoFiguras g = new GrupoFiguras();
        
        Cilindro cil = new Cilindro(3, 5, 2, 2);
        Triangulo tri = new Triangulo(10, 5, 3.5,2);
        Rectangulo rec = new Rectangulo(10, 5, 3.5,2);
        FiguraSinCirculos fsc = new FiguraSinCirculos(3, 5);
        FiguraCon3Circulos fcc = new FiguraCon3Circulos(3, 5);
        
        g.anyadeFigura(tri);
        g.anyadeFigura(cil);
        g.anyadeFigura(rec);
        g.anyadeFigura(fsc);
        g.anyadeFigura(fcc);
        
        int numeroCirculos = g.numeroCirculos();
        
        return numeroCirculos == 5;
    }
    
    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;
    }
}