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; }
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); }
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); } }