def verificar_wap( caso, accion, k, n ): # k son los enteros fijos, una constante y los otros son los que se van a mult. por la cant de unrolls. size_wac_max = 5 ap1.log_file('Checking permanent workaround for: ' + accion, 'logfile_wap.log') tiempo_inicio_wa = datetime.now() for unroll in range(1, size_wac_max): print 'wac_' + accion + '_with_' + str(unroll) + '.list\n' wac_list = traer_pres_desde_archivo2('wac_' + accion + '_with_' + str(unroll) + '.list') numero = 0 print 'Cantidad de wac a verificar: ', len(wac_list) #ap1.log_file('#wac-wap:'+str(len(wac_list)) +' % state:'+str(i)+' % '+'unroll:'+str(unroll),'logfile.log') iii = 1 for e in wac_list: acciones = e[1].split(',') generate_program_dyn(caso, accion, acciones) print 'wac :', acciones ap1.run_modelo_dynalloy('permanent.dals', 'tempo_wacp.als', '1') update_tempo_wacp('tempo_wacp.als', e[2]) os.system('echo "/*INI_PRE*/ /*FIN_PRE*/" >> tempo_wacp.als') os.system('echo "' + e[2] + '" >> tempo_wacp.als') ap1.borrar_pre('tempo_wacp.als') ap1.rempla('tempo_wacp.als', 'check programa_wap', ' ') check = 'check programa_wap for 0 but ' + str( k + n * len(wac_list)) + " JavaPrimitiveIntegerValue " check = check + p.int_to_int32([ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ]) os.system(" sed -i 's/\/\*INI_PRE.*FIN_PRE\*\//\/\*INI_PRE\*\/" + check + "\/\*FIN_PRE\*\//g ' tempo_wacp.als") sys.exit(0) print 'Verificando si ' + str(acciones) + ' ' + e[2] + ' es un wap' archi = 'model_' + action + '_' + 'unroll' + str( unroll) + '_' + str(iii) + '.als' os.system('cp tempo_wacp.als ' + archi) ap1.log_file('checking wac: ' + str(acciones), 'logfile_wap.log') time_of = timeoutlib.call_with_timeout_permament( incrementalwa.run_alloy2, archi) ap1.log_file('timeout_sal:' + str(time_of[1]), 'logfile.log') iii = iii + 1 os.system('rm tempo_wacp.als')
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(caso,accion,pin,tiempo_to,input_file,flagp): #si flagp es True, luego de generar la lista de wac comenzara a verificar si encuentra alguno que sea permanente # en caso contrario lo que hara es continuar generando la lista de wac candidatos con sus respectivos loop unrolls result={} entradas=traer_pres_desde_archivo('../examples/'+caso+'/'+input_file) cont=0 size_wac_max=10 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...\n' tiempo_inicio_wa=time.time() timeout=300 cambio_i=False tama=size_ent(i,entradas) for unroll in range(1,size_wac_max+1): 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') # se guarda una copia de resultado.als sin la pre externa. Se crea un archivo resultadoals_accion_unroll # cambia la linea del assert por un run, esto sirve para dejar resultadoals listo para verificar 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 print 'size: '+str(tama) linea='size: '+str(tama) rr="echo '"+linea+"' >> ../examples/"+caso+"/results/alt1/alt1_output" os.system(rr) #os.system('echo "/*INI_PRE*/ /*FIN_PRE*/" >> resultado.als') res=gen_input_fact_i32(caso,i,entradas,accion,unroll,pin,result,'resultado.als') #archi="../examples/"+caso+"/results/alt1/resultadoals_"+accion+"_"+str(unroll) #rr="cp resultado.als "+archi #os.system(rr) #ap1.rempla(archi,'assert programa_wap',' pred programa_wap') #ap1.rempla(archi,'check',' run ') #ap1.borrar_pre(archi) size_lista=res[0] p=result[i] p.append('size: '+str(tama)) result=res[1] if not cambio_i: suma_tam_listas= int(size_lista)+suma_tam_listas cambio_i=True # en este punto ya se ha generado el modelo alloy con el unroll correspondiente print ' --------------------------------------------------------------- \n' #print 'searching workarounds for ',accion,' with ',str(unroll),' unroll. \n' print ' --------------------------------------------------------------- \n' ''' 1 - invocar el sat incremental alloy con el modelo resultado.als ''' #la siguiente linea corre run_incremental_alloy con un timeout de 10m # time_of= timeoutlib.call_with_timeout(incrementalwa.run_incremental_alloy, 'resultado.als',100,'wac_'+accion+'_with_'+str(unroll)+'.list') # la corrida anterior crea un archivo con los wac candidatos llamado 'wac_<accion>_with_<unroll>.list iii=0 if flagp==True: # comienza a verificar si en el archivo anterior hay permanentes. Otra alternativa es setear esto en falso y tierar un progrma concurrente que verifique lo anterior mientras sigue corriendo este script. wac_list = traer_pres_desde_archivo2('wac_'+accion+'_with_'+str(unroll)+'.list') numero=0 print wac_list for e in wac_list: acciones=e[1].split(',') #print 'acciones del wac: ',acciones #os.system('cp '+archi+' '+'tempo_wacp.als') #linea="-------------------------------------------------------" #rr="echo '"+e+"' >> tempo_wacp.als" #os.system(rr) #incrementalwa.run_alloy('tempo_wacp.als') #ap1.run_modelo_alloy_pewa('tempo_wacp.als',1,unroll,accion,caso,1,'10m') #acaca generate_program_dyn(caso,accion,acciones) ap1.run_modelo_dynalloy('permanent.dals','tempo_wacp.als',str(unroll)) os.system('echo "/*INI_PRE*/ /*FIN_PRE*/" >> tempo_wacp.als') ap1.rempla('tempo_wacp.als','check programa_wap',' ') res=gen_input_fact_i32(caso,i,entradas,accion,unroll,pin,result,'tempo_wacp.als') #ap1.rempla('tempo_wacp.als','check programa_wap',' ') #ap1.rempla('tempo_wacp.als','assert programa_wap{','pred programa_wap{') #ap1.rempla('tempo_wacp.als','check programa_wap for','run programa_wap for') ap1.borrar_pre('tempo_wacp.als') print '???????????????????????????????????????' print acciones print '???????????????????????????????????????' timeoutlib.call_with_timeout_permament(incrementalwa.run_alloy,'tempo_wacp.als') os.system('cp tempo_wacp.als tempo_a'+str(iii)) iii=iii+1 os.system('rm tempo_wacp.als') sys.exit(0)
def fix_1(caso, accion, pin, tiempo_to, input_file, flagp): #si flagp es True, luego de generar la lista de wac comenzara a verificar si encuentra alguno que sea permanente # en caso contrario lo que hara es continuar generando la lista de wac candidatos con sus respectivos loop unrolls result = {} entradas = traer_pres_desde_archivo('../examples/' + caso + '/' + input_file) tiempo_total_busqueda_wac = 0 tiempo_total_busqueda_wap = 0 cantidad_estados = 0 cantidad_time_out_wac = 0 cantidad_time_out_wap = 0 cont = 0 size_wac_max = 10 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 ap1.log_file('action_name?' + accion, 'logfile_wap.log') for i in range(0, len(entradas)): print '<control ' + str(i) + '>' primer_wac = False scope = '7' if primer_wac: break print 'searching candidate workarounds...\n' ap1.log_file('state=' + str(i), 'logfile.log') tiempo_inicio_wa = datetime.now() cambio_i = False tama = size_ent(i, entradas) for unroll in range(1, size_wac_max + 1): ap1.run_modelo_dynalloy('temporalnew.dals', 'resultado.als', str(unroll)) #sys.exit(0) t2 = datetime.now() - tiempo_inicio_wa ap1.rempla('resultado.als', 'check programa_wap', ' ') os.system('echo "/*INI_PRE*/ /*FIN_PRE*/" >> resultado.als') linea = 'size: ' + str(tama) rr = "echo '" + linea + "' >> ../examples/" + caso + "/results/alt1/alt1_output" os.system(rr) res = gen_input_fact_i32(caso, i, entradas, accion, unroll, pin, result, 'resultado.als') size_lista = res[0] p = result[i] p.append('size: ' + str(tama)) result = res[1] if not cambio_i: suma_tam_listas = int(size_lista) + suma_tam_listas cambio_i = True #busca todos los wa candidatos para el unroll indicado aa = datetime.now() #ap1.log_file('Start time finding wac:'+ str(aa) +' % unroll:'+str(unroll),'logfile.log') #sys.exit(0) #ap1.log_file('action:'+str(accion)+' % state:'+str(i)+' % '+'unroll:'+str(unroll),'logfile.log') time_of = timeoutlib.call_with_timeout( incrementalwa.run_incremental_alloy, 'resultado.als', 100, unroll, i, accion, 'wac_' + accion + '_with_' + str(unroll) + '.list') #candidato="candidato_"+accion+"_"+str(unroll)+".als" #os.system("cp resultado.als "+candidato) #sys.exit(0) bb = datetime.now() #ap1.log_file('Finish time:'+str(bb)+' finding wac for unroll:'+str(unroll),'logfile.log') ap1.log_file( 'Finish time finding wac %' + str(accion) + ' % ' + 'unroll=' + str(unroll) + ' % TO=' + str(time_of[1]) + ' % total_time=' + ap1.tiempo_transcurrido(aa, bb), 'logfile.log') if time_of[1]: break # si ya se dio un timeour en el unroll corriente, no tiene sentido buscar en los de mayor unroll #ap1.log_file('timeout:'+str(time_of[1]),'logfile.log') iii = 0 if flagp: print 'wac_' + accion + '_with_' + str(unroll) + '.list\n' #sys.exit(0) wac_list = traer_pres_desde_archivo2('wac_' + accion + '_with_' + str(unroll) + '.list') numero = 0 print 'Cantidad de wac a verificar: ', len(wac_list) ap1.log_file( '#wac-wap:' + str(len(wac_list)) + ' unroll:' + str(unroll), 'logfile_wap.log') for e in wac_list: acciones = e[1].split(',') #sys.exit(0) generate_program_dyn(caso, accion, acciones) print 'wac :', acciones # ap1.log_file('Verificando : '+str(acciones),'logfile_wap.log') ap1.run_modelo_dynalloy('permanent.dals', 'tempo_wacp.als', '1') update_tempo_wacp('tempo_wacp.als', e[2]) os.system( 'echo "/*INI_PRE*/ /*FIN_PRE*/" >> tempo_wacp.als') os.system('echo "' + e[2] + '" >> tempo_wacp.als') ap1.rempla('tempo_wacp.als', 'check programa_wap', ' ') res = gen_input_fact_i32(caso, i, entradas, accion, unroll, pin, result, 'tempo_wacp.als') #sys.exit(0) ap1.borrar_pre('tempo_wacp.als') print 'Verificando si ' + str( acciones) + ' ' + e[2] + ' es un wap' archi = 'temporal_a_' + str(iii) + '.als' os.system('cp tempo_wacp.als ' + archi) ap1.log_file( ('Verificando si ' + str(acciones) + ' es un wap'), 'logfile_wap.log') time_of = timeoutlib.call_with_timeout_permament( incrementalwa.run_alloy2, archi) ap1.log_file('timeout_sal:' + str(time_of[1]), 'logfile_wap.log') iii = iii + 1 os.system('rm tempo_wacp.als') ap1.log_file('StateFin', 'logfile.log')
def fix_alt1(caso, accion, pin, tiempo_to, input_file, flagp): #si flagp es True, luego de generar la lista de wac comenzara a verificar si encuentra alguno que sea permanente # en caso contrario lo que hara es continuar generando la lista de wac candidatos con sus respectivos loop unrolls result = {} entradas = traer_pres_desde_archivo('../examples/' + caso + '/' + input_file) cont = 0 size_wac_max = 10 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 candidate workarounds...\n' tiempo_inicio_wa = time.time() timeout = 300 cambio_i = False tama = size_ent(i, entradas) for unroll in range(1, size_wac_max + 1): 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') linea = 'size: ' + str(tama) rr = "echo '" + linea + "' >> ../examples/" + caso + "/results/alt1/alt1_output" os.system(rr) res = gen_input_fact_i32(caso, i, entradas, accion, unroll, pin, result, 'resultado.als') size_lista = res[0] p = result[i] p.append('size: ' + str(tama)) result = res[1] if not cambio_i: suma_tam_listas = int(size_lista) + suma_tam_listas cambio_i = True #busca todos los wa candidatos para el unroll indicado #ap1.reg('reporte','-- begin report --',0) #ap1.reg('reporte',accion+'_unroll_'+ str(unroll),1) time_of = timeoutlib.call_with_timeout( incrementalwa.run_incremental_alloy, 'resultado.als', 100, 'wac_' + accion + '_with_' + str(unroll) + '.list') print time_of iii = 0 #if unroll==2 and flagp==True: if flagp: print 'si entro al flag' wac_list = traer_pres_desde_archivo2('wac_' + accion + '_with_' + str(unroll) + '.list') numero = 0 #print wac_list print 'Cantidad de wac a verificar: ', len(wac_list) for e in wac_list: acciones = e[1].split(',') generate_program_dyn(caso, accion, acciones) print 'wac :', acciones ap1.run_modelo_dynalloy('permanent.dals', 'tempo_wacp.als', str(unroll)) os.system( 'echo "/*INI_PRE*/ /*FIN_PRE*/" >> tempo_wacp.als') ap1.rempla('tempo_wacp.als', 'check programa_wap', ' ') res = gen_input_fact_i32(caso, i, entradas, accion, unroll, pin, result, 'tempo_wacp.als') ap1.borrar_pre('tempo_wacp.als') ''' print 'corriendo alloy' ap1.run_modelo_alloy('tempo_wacp.als',i,unroll,accion,caso,1,tiempo_to) if ap1.UNSAT('temp')==1: print 'Eureka' if ap1.UNSAT('temp')==2: print 'timeout.' if ap1.UNSAT('temp')==0: print 'no es un wa permanente' ''' print 'Verificando si es un wap' archi = 'temporal_a_' + str(iii) + '.als' os.system('cp tempo_wacp.als ' + archi) timeoutlib.call_with_timeout_permament( incrementalwa.run_alloy, archi) iii = iii + 1 print 'salida' #sys.exit(0) os.system('rm tempo_wacp.als')
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)