示例#1
0
int testGetNumShares() {
	int errors = 0;

	std::string base = "TestGetNumShares: ";

	std::string expr0 = "1";
	BLAccessPolicy pol0(expr0, 3);
	test_diagnosis(base + expr0, pol0.getNumShares() == 1, errors);


	std::string expr1 = op_OR + "(1,2,3)";
	BLAccessPolicy pol1(expr1, 3);
	test_diagnosis(base + expr1, pol1.getNumShares() == 3, errors);

	std::string expr2 = op_OR + "(" + op_AND + "(1,2)," + op_AND + "(3,4))";
	BLAccessPolicy pol2(expr2, 4);
	test_diagnosis(base + expr2, pol2.getNumShares() == 4, errors);

	std::string expr3 = op_OR + "(" + op_AND + "(3,4,5),7," + op_AND + "(1,2)," + op_AND + "(4,1,6,5))";
	BLAccessPolicy pol3(expr3, 7);
	test_diagnosis(base + expr3, pol3.getNumShares() == 10, errors);


	return errors;
}
示例#2
0
int main()
{
    //set up basisvectors
    std::vector<std::vector<double> > basis2(2,std::vector<double>(2));
    basis2[0][0] = 1;
    basis2[0][1] = 0;
    basis2[1][0] = 0;
    basis2[1][1] = 1;
    
    //define lattice
    Lattice myLattice(2,basis2);
    
    //set up 2d polytopes
    
    std::vector<std::vector<double> > ver0(3,std::vector<double>(2));
    std::vector<std::vector<double> > ver1(4,std::vector<double>(2));
    std::vector<std::vector<double> > ver2(4,std::vector<double>(2));
    std::vector<std::vector<double> > ver3(3,std::vector<double>(2));
    std::vector<std::vector<double> > ver4(5,std::vector<double>(2));
    std::vector<std::vector<double> > ver5(4,std::vector<double>(2));
    std::vector<std::vector<double> > ver6(6,std::vector<double>(2));
    std::vector<std::vector<double> > ver7(4,std::vector<double>(2));
    std::vector<std::vector<double> > ver8(5,std::vector<double>(2));
    std::vector<std::vector<double> > ver9(3,std::vector<double>(2));
    std::vector<std::vector<double> > ver10(4,std::vector<double>(2));
    
    ver0[0][0] = 1;
    ver0[0][1] = 0;
    ver0[1][0] = 0;
    ver0[1][1] = 1;
    ver0[2][0] = -1;
    ver0[2][1] = -1;
    
    ver1[0][0] = 1;
    ver1[0][1] = 0;
    ver1[1][0] = 0;
    ver1[1][1] = 1;
    ver1[2][0] = -1;
    ver1[2][1] = 0;
    ver1[3][0] = 0;
    ver1[3][1] = -1;
    
    ver2[0][0] = 1;
    ver2[0][1] = 0;
    ver2[1][0] = 0;
    ver2[1][1] = 1;
    ver2[2][0] = -1;
    ver2[2][1] = 0;
    ver2[3][0] = -1;
    ver2[3][1] = -1;
    
    ver3[0][0] = 1;
    ver3[0][1] = 0;
    ver3[1][0] = 0;
    ver3[1][1] = 1;
    ver3[2][0] = -2;
    ver3[2][1] = -1;
    
    ver4[0][0] = 1;
    ver4[0][1] = 0;
    ver4[1][0] = 1;
    ver4[1][1] = 1;
    ver4[2][0] = 0;
    ver4[2][1] = 1;
    ver4[3][0] = -1;
    ver4[3][1] = 0;
    ver4[4][0] = 0;
    ver4[4][1] = -1;
    
    ver5[0][0] = 1;
    ver5[0][1] = 0;
    ver5[1][0] = 0;
    ver5[1][1] = 1;
    ver5[2][0] = -1;
    ver5[2][1] = 1;
    ver5[3][0] = -1;
    ver5[3][1] = -1;
    
    Polytope pol0(ver0,myLattice);
    Polytope pol1(ver1,myLattice);
    Polytope pol2(ver2,myLattice);
    Polytope pol3(ver3,myLattice);
    Polytope pol4(ver4,myLattice);
    Polytope pol5(ver5,myLattice);
    
    Polytope pol15 = pol0.getCorrespondingDualPolytope();
    Polytope pol14 = pol1.getCorrespondingDualPolytope();
    Polytope pol13 = pol2.getCorrespondingDualPolytope();
    Polytope pol12 = pol3.getCorrespondingDualPolytope();
    Polytope pol11 = pol4.getCorrespondingDualPolytope();
    Polytope pol10 = pol5.getCorrespondingDualPolytope();
    
    ver6[0][0] = 1;
    ver6[0][1] = 0;
    ver6[1][0] = 1;
    ver6[1][1] = 1;
    ver6[2][0] = 0;
    ver6[2][1] = 1;
    ver6[3][0] = -1;
    ver6[3][1] = 0;
    ver6[4][0] = -1;
    ver6[4][1] = -1;
    ver6[5][0] = 0;
    ver6[5][1] = -1;
    
    ver7[0][0] = 1;
    ver7[0][1] = 0;
    ver7[1][0] = -1;
    ver7[1][1] = 1;
    ver7[2][0] = -1;
    ver7[2][1] = -1;
    ver7[3][0] = 1;
    ver7[3][1] = -1;
    
    ver8[0][0] = 1;
    ver8[0][1] = 0;
    ver8[1][0] = 1;
    ver8[1][1] = 1;
    ver8[2][0] = -1;
    ver8[2][1] = 1;
    ver8[3][0] = -1;
    ver8[3][1] = 0;
    ver8[4][0] = 0;
    ver8[4][1] = -1;
    
    ver9[0][0] = 1;
    ver9[0][1] = 0;
    ver9[1][0] = -1;
    ver9[1][1] = 2;
    ver9[2][0] = -1;
    ver9[2][1] = -1;
    
    Polytope pol6(ver6,myLattice);
    Polytope pol7(ver7,myLattice);
    Polytope pol8(ver8,myLattice);
    Polytope pol9(ver9,myLattice);
    
    //Polytope polytopes2D[16] = {pol0, pol1, pol2, pol3, pol4, pol5, pol6, pol7, pol8, pol9, pol10, pol11, pol12, pol13, pol14, pol15};
    //Polytope polytopes2DDual[16] = {pol15, pol14, pol13, pol12, pol11, pol10, pol6, pol7, pol8, pol9, pol5, pol4, pol3, pol2, pol1, pol0};
    std::vector<Polytope > myList = {pol0, pol1, pol2, pol3, pol4, pol5, pol6, pol7, pol8, pol9, pol10, pol11, pol12, pol13, pol14, pol15};
    std::vector<Polytope > myFiveVerticesList = {pol0, pol3, pol9, pol12, pol15};
    //Construct 4d polytopes from this data
    std::string fileName = "output";
    //pol0.printListFrom2DTo4DPolytopesToFile(fileName, myList);
    pol0.printListFrom2DTo4DPolytopesToFile("outputForFiveVertices", myFiveVerticesList);
}
示例#3
0
void menu_graf(char *file)
{
    FILE * pbm;
    int flag_opt=0; /* flag_opt = 0 si no entro a ninguna funcion a graficar */
    typedef enum {SEN=1,COS,POL0,POL1,POL2,POL3,LN,EXP,DEFAULT,ERROR=255} opt_graf_t;
    opt_graf_t optgraf;
    char option[MAX_CHAR];
    int matriz[RESOLUCION][RESOLUCION];
    float vect_x[RESOLUCION];
    float vect_y[RESOLUCION];

    cargo_x(vect_x);

    printf(MENU_GRAF);
    limpiarbuffer();

    fgets(option, MAX_CHAR, stdin);
    option[strlen(option)-1]='\0';
    optgraf=atoi(option);

    /* si se ingreso algo que no es una opcion debe ir al default */
    if (optgraf==0) optgraf=DEFAULT;


    while (optgraf) {

        switch(optgraf)
        {
        case SEN:
            seno(vect_x, vect_y);
            flag_opt=1;
            break;

        case COS:
            coseno(vect_x, vect_y);
            flag_opt=1;
            break;

        case POL0:
            pol0(vect_x, vect_y);
            flag_opt=1;
            break;

        case POL1:
            pol1(vect_x, vect_y);
            flag_opt=1;
            break;

        case POL2:
            pol2(vect_x, vect_y);
            flag_opt=1;
            break;

        case POL3:
            pol3(vect_x, vect_y);
            flag_opt=1;
            break;

        case LN:
            ln(vect_x, vect_y);
            flag_opt=1;
            break;

        case EXP:
            expo(vect_x, vect_y);
            flag_opt=1;
            break;

        default:
            printf("Entrada inválida!\n");

        }
        /* Este if corta la ejecuccion del programa si ya grafico sale del bucle while(optgraf) */
        if(flag_opt==1) break;

        printf("Presione enter para volver al menu \n");
        limpiarbuffer();
        system(CLS);
        printf(MENU_GRAF);

        fgets(option, MAX_CHAR, stdin);
        option[strlen(option)-1]='\0';
        optgraf=atoi(option);

        /* Si se ingreso una letra o algo que no es valido*/
        if (!optgraf) optgraf=255;

    }


    inicializo_matriz(matriz);
    inicializo_ejes(matriz);
    cargo_matriz(matriz, vect_y);
    if(file==NULL) imprimo_matriz(matriz);
    else
    {
        /* Abrimos el pbm para guardar datos como file */
        make_pbm_file(&pbm,file);
        /* grabamos la info y luego cerramos el file* */
        write_pbm_file(&pbm, matriz, RESOLUCION, RESOLUCION);
        close_pbm_file(&pbm);
    }

}