def fix_alt1_jodatime(caso,accion,pin,tiempo_to,input_file): result={} entradas=[['h:2?m:3?s:34?mls:32'],['h:4?m:3&s:34&mls:32']] cont=0 size_wac_max=30 sum_long_wa=0 cont_wa=0 tiempo_total=0 entradas_procesadas=0 prom_tam_listas=0 suma_tam_listas=0 ttotal=0 ttotal_sin_to=0 emin=10000 temin=0 emax=0 temax=0 to=0 for i in range(0, len(entradas)): print '<control '+str(i)+'>' primer_wac=False scope='7' if primer_wac: break print 'searching workarounds.ssss..\n' tiempo_inicio_wa=time.time() timeout=300 cambio_i=False tama=4 for unroll in range(1,size_wac_max+1): if primer_wac: t2=time.time()-tiempo_inicio_wa ttotal=ttotal+t2 ttotal_sin_to=ttotal_sin_to+t2 break if ((time.time()-tiempo_inicio_wa)>timeout): print "Timeout "+str(timeout) linea="-------------------------------------------------------" rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output" os.system(rr) t2=time.time()-tiempo_inicio_wa tiempo_total=tiempo_total+t2 ttotal=ttotal+t2 to=to+1 break ap1.run_modelo_dynalloy('temporalnew.dals','resultado.als',str(unroll)) t2=time.time()-tiempo_inicio_wa ap1.rempla('resultado.als','check programa_wap',' ') os.system('echo "/*INI_PRE*/ /*FIN_PRE*/" >> resultado.als') #la funcion siguiente es la que actualuiza las pre de resultado.als #pred_aux son predicados auxiliares dependientes del tamanio de la estructura #insertar la pre-condicion #aca #res=gen_input_fact_i32_jt(caso,i,entradas,accion,unroll,pin,result) sys.exit(0) ap1.run_modelo_alloy('resultado.als',i,unroll,accion,caso,1,tiempo_to) os.system('cp resultado.als ../examples/'+caso+'/results/alt1/wa_'+caso+'_'+accion+'_in_'+str(i)+'unroll_'+str(unroll)+'.als') wac=[] cc=1 if ap1.UNSAT('temp')==1: print 'there is no workarounds size:'+ str(unroll) linea='there is no workarounds size:'+ str(unroll) rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output" os.system(rr) p.append('there is no workarounds size:'+ str(unroll)) if ap1.UNSAT('temp')==2 and (ap1.time_time(tiempo_to)<=t2): print 'timeout for '+ str(unroll)+' unrolls.' linea='timeout for '+ str(unroll)+' unrolls.' rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output" os.system(rr) linea="-------------------------------------------------------" rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output" os.system(rr) p.append('timeout para <control '+str(i)+'>') t2=time.time()-tiempo_inicio_wa tiempo_total=tiempo_total+t2 else: if ap1.UNSAT('temp')==0: #si entra por el else encontro un wac wac_Ok= 0 if (primer_wac==False): primer_wac=True entradas_procesadas=entradas_procesadas+1 t2=time.time()-tiempo_inicio_wa tiempo_total=tiempo_total+t2 print 'first wac found in: '+ str(t2)+' seconds.' linea='first wac found in: '+ str(t2)+' seconds.' rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output" os.system(rr) p.append('first wac found in: '+ str(t2)+' seconds.') primer_wac=True while cc<=size_wac_max and ap1.UNSAT('temp')==0: if ((time.time()-tiempo_inicio_wa)>timeout): break #SI QF es true removeQuantifier debe ser true qf= True #usar perfiles wac= ap1.extraccion__wac('resultado.alsuva',qf) ap1.expor('../examples/'+caso+'/results/alt1/alt1_wa_'+accion+'_unrool_'+str(unroll)+'_control',i) print 'wac\n' print wac p.append('wac: '+str(wac)) cont_wa=cont_wa+1 #suma_tam_listas= int(size_lista)+suma_tam_listas sum_long_wa=sum_long_wa+unroll if primer_wac: break #sale al encontrar el primer wac print "...adding not wac to resultado.dals... " accion_qf='' if qf: for e in wac: accion_qf='and (not(QF.'+e+'))\n' pre_randoop.update_als(sys.argv[1]+'_ensures_'+sys.argv[2]+'[',accion_qf) else: cade= ap1.generar_cade_para_modelo_als(wac) ap1.buscar__insertar(cade,'resultado.als') ap1.run_modelo_alloy('resultado.als',i,unroll,sys.argv[2],1) os.system('cp resultado.als ../examples/'+caso+'/results/alt1/wa_'+caso+'_'+sys.argv[2]+'_in_'+str(i)+'unroll_'+str(unroll)+'.als') cc=cc+1 if cc > size_wac_max: print 'Maximum limit is reached.' p.append('Maximum limit is reached.') if cc <=size_wac_max: print 'Not found more wacs for this size.' p.append('Not found more wacs for this size.') # delete temporal files os.system('rm temp') print 'updating...' result[i]=p cant_estados=len(entradas) final='' print '---------------------------------------------------' resultado = 'Action '+ accion resultado = resultado +' | Number of inputs processed: '+str(cant_estados) print resultado resultadof = resultado + '|' if (cant_estados>0): resultadof = resultadof + "Avg. input size: " +nume(str(float(suma_tam_listas)/float(cant_estados)))+ '|' print "Avg. input size: " +nume(str(float(suma_tam_listas)/float(cant_estados))) print 'Number of workarrounds found: '+str(cont_wa) resultadof=resultadof+'Number of workarrounds found: '+str(cont_wa)+ '|' print 'Number of failures (exceeding a '+tiempo_to+' timeout for trace): '+str(to) resultadof=resultadof+'Number of failures (exceeding a '+tiempo_to+' timeout for trace): '+str(to)+ '|' if (cont_wa>0): prome=ttotal_sin_to/float(cont_wa) resultadof=resultadof+'Avg. time to find a workaround (not including failures): '+nume(str(prome))+' seconds.|' print 'Avg. time to find a workaround (not including failures): '+nume(str(prome))+' seconds.' if (cont_wa>0): prome=ttotal/float(cont_wa) resultadof=resultadof+'Avg. time to find a workaround: '+nume(str(prome))+' seconds.|' print 'Avg. time to find a workaround: '+nume(str(prome))+' seconds.' resultadof=resultadof+'Total running time: '+nume(str(float(ttotal)))+' seconds.|' print 'Total running time: '+nume(str(float(ttotal)))+' seconds.' if not emin==10000: resultadof=resultadof+'Smallest input size: '+str(emin)+' elements.|' print 'Smallest input size: '+str(emin)+' elements.' resultadof=resultadof+'Maximum time to find a workaround for the smallest input: '+nume(str(temin))+'|' print 'Maximum time to find a workaround for the smallest input: '+nume(str(temin)) if not emax==-1: resultadof=resultadof+'Largest input size: '+str(emax)+' elements.'+'|' print 'Largest input size: '+str(emax)+' elements.' resultadof=resultadof+'Maximum time to find a workaround for the largest input: '+nume(str(temax))+'|' print 'Maximum time to find a workaround for the largest input: '+nume(str(temax)) if (cont_wa>0): prome=nume(str(float(sum_long_wa)/float(cont_wa))) resultadof=resultadof+'Avg. size of workarounds: '+nume(str(prome))+' seconds.|' print 'Avg. size of workarounds: '+nume(str(prome))+' actions.' print '---------------------------------------------------' result[-1]=resultadof return result
def fix_alt1_jodatime2(caso,accion,pin,tiempo_to,input_file): #buscar en el archivo de las entradas y agregarlos en entradas_wag entradas=ap2.read_file_input_joda("entrada_wag_finder") ttotal=0 ttotal_sin_to=0 total_reparaciones=0 total_estados=0 cant_to=0 size_wac_max=3 for i in range(0, len(entradas)-1): primer_wac=False print 'searching workarounds..joda.\n' salir=False total_estados=total_estados+1 for unroll in range(1,size_wac_max): if salir: break ap1.run_modelo_dynalloy('temporalnew.dals','resultado.als',str(unroll)) #agrega los enteros dependiendo de la cantidad de loops unroll os.system('echo "check programa_wap for 0 but "'+ str(unroll*23) +' JavaPrimitiveIntegerValue >> resultado.als') os.system('echo "/*INI_PRE*/ /*FIN_PRE*/" >> resultado.als') initial_state=entradas[i].strip('\n') initial_state=initial_state.replace('/*INICIO*/','') initial_state=initial_state.replace('/*FIN*/','') #parche para no incluir el QF.k_0 en las acciones que no tiene este parametro, ejemplo los get if (not acciones_con_parametro_k(accion)): initial_state=initial_state.replace('QF.k_0','QF.'+accion+"_k_0") else: ind1=initial_state.find("and eq32[QF.k_0") initial_state=initial_state[:ind1]+"}" ap2.gen_fact_qf(unroll,accion) os.system(" sed -i 's/\/\*INI_PRE.*FIN_PRE\*\//\/\*INI_PRE\*\/"+initial_state+"\/\*FIN_PRE\*\//g ' resultado.als") tinicio= time.time() ap1.run_modelo_alloy('resultado.als',i,unroll,accion,caso,1,tiempo_to) tfin= time.time() os.system('cp resultado.als ../examples/'+caso+'/results/alt1/wa_'+caso+'_'+accion+'_in_'+str(i)+'unroll_'+str(unroll)+'.als') tanalisis= tfin-tinicio ttotal=ttotal+tanalisis if ap1.UNSAT('temp')==1: ttotal_sin_to=ttotal_sin_to+tanalisis linea='State number: '+str(i)+' there is no workarounds for unroll:'+ str(unroll) rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output" os.system(rr) print linea break if ap1.UNSAT('temp')==2: linea='State number: '+str(i)+' TIMEOUT for '+ str(unroll)+' unrolls.' print linea rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output" os.system(rr) cant_to=cant_to+1 if ap1.UNSAT('temp')==0: total_reparaciones=total_reparaciones+1 ttotal_sin_to=ttotal_sin_to+tanalisis linea='State number: '+str(i)+' first wac found in: '+ str(tanalisis)+' seconds.' rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output" print linea os.system(rr) salir=True break print '---------------------------------------------------' resultado = 'Action '+ accion resultado = resultado +' | Number of inputs processed: '+str(total_estados) print resultado resultadof = resultado + '|' print 'Number of workarrounds found: '+str(total_reparaciones) resultadof=resultadof+'Number of workarrounds found: '+str(total_reparaciones)+ '|' print 'Number of failures (exceeding a '+tiempo_to+' timeout for trace): '+str(cant_to) resultadof=resultadof+'Number of failures (exceeding a '+tiempo_to+' timeout for trace): '+str(cant_to)+ '|' if (total_reparaciones>0): prome=ttotal_sin_to/float(total_reparaciones) resultadof=resultadof+'Avg. time to find a workaround (not including failures): '+nume(str(prome))+' seconds.|' print 'Avg. time to find a workaround (not including failures): '+nume(str(prome))+' seconds.' if (total_reparaciones>0): prome=ttotal/float(total_reparaciones) resultadof=resultadof+'Avg. time to find a workaround: '+nume(str(prome))+' seconds.|' print 'Avg. time to find a workaround: '+nume(str(prome))+' seconds.' resultadof=resultadof+'Total running time: '+nume(str(float(ttotal)))+' seconds.|' print 'Total running time: '+nume(str(float(ttotal)))+' seconds.' print '---------------------------------------------------' rr="echo '"+resultadof+"' >> ../examples/"+caso+"/results/alt1/alt1_output" os.system(rr)