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_a2(caso, accion, sc, pin, accion_name, cadeQF, tiempo_to, input_file): cant_estados = 0 cant_wa = 0 ttotal = 0 ttotal_sin_to = 0 tpromedio = 0 suma_tam_lista = 0 to = 0 i = 0 entradas = traer_pres_desde_archivo('../examples/' + caso + '/' + input_file) modelo_alloy_accion = accion emin = 10000 emax = -1 temin = 0 temax = 0 for entrada in entradas: print 'control<' + str(i) + '>' nd = input(entrada) suma_tam_lista = suma_tam_lista + int(nd['size']) sn = str(int(nd['size']) + int(sc)) p = 0 f = 0 res = [] cade = '' parametros_de_acciones = '' if len(pin) > 0: for e in pin: if (e == 'JavaPrimitiveIntegerValue' and p == 0 and cadeQF.find('intJ_1_0') > 0): res.append("QF.intJ_1_0=" + nd['pi32_a']) p = 1 else: if (e == 'JavaPrimitiveIntegerValue' and p == 1 and cadeQF.find('intJ_2_0') > 0): res.append("QF.intJ_2_0=" + nd['pi32_a']) if (e[1] == 'Int' and f == 0 and cadeQF.find('intA_1_0') > 0): res.append("equ[QF.intA_1_0," + nd['indice_a'] + "]") cade = cade + " " + e + "=" + nd['indice_a'] f = 1 else: if (e == 'Int' and f == 1 and cadeQF.find('intA_2_0') > 0): res.append("equ[QF.intA_2_0," + nd['indice_b'] + "]") cade = cade + " " + e + "=" + nd['indice_b'] parametros_de_acciones = " fact { " + (" and ").join(res) + "} " fact_in = nd['estado'] + parametros_de_acciones else: fact_in = nd['estado'] linea = 'Control<' + str(i) + '>' rr = "echo '" + linea + "' >> ../examples/" + caso + "/results/alt2/alt2_output" os.system(rr) print 'size: ' + nd['size'] linea = 'size: ' + nd['size'] rr = "echo '" + linea + "' >> ../examples/" + caso + "/results/alt2/alt2_output" os.system(rr) print 'input : ' + nd['lista'] linea = nd['lista'] rr = "echo '" + linea + "' >> ../examples/" + caso + "/results/alt2/alt2_output" os.system(rr) print 'action to fix: ' + accion_name + "(" + cade + ")" linea = 'action to fix: ' + accion_name + "(" + cade + ")" rr = "echo '" + linea + "' >> ../examples/" + caso + "/results/alt2/alt2_output" os.system(rr) # lee el prefijo del archivo de configuracion config.ini cadena = ap1.read_config_case("../config.ini", "case_" + caso)['prefix'] #ajusta la cantidad de enteros java a exactamente lo que necesita # para ello reemplaza la clausula exactly del modelo als por la que viene del estado inicial de randoop #aca si size con cantidad_enteros es diferente habria que agregar los v10 , v11 #print '-----------------------' #print nd['size'] #print nd['cantidad_enteros'] #print '-----------------------' os.system( "sed -i 's/exactly[[:space:]][0-9]*[[:space:]]*JavaPrimitiveIntegerValue/exactly " + str(nd['cantidad_enteros']) + " JavaPrimitiveIntegerValue/g' " + " ../examples/" + caso + "/models/" + cadena + str(sn) + ".als") gen_resultado_als('../examples/' + caso + '/models/' + cadena, caso, sn, modelo_alloy_accion, fact_in, cadeQF) tiempo_inicio_wa = time.time() ######################### call alloy analyzer ############################### ap1.run_modelo_alloy_pewa('resultado.als', i, 0, accion_name, caso, 2, tiempo_to) ############################################################################### t2 = time.time() - tiempo_inicio_wa ttotal = ttotal + t2 tiempo_o = ap1.read_config_case("../config.ini", "options")['timeout'] cant_estados = cant_estados + 1 # if ap1.UNSAT('temp') == 2 and (ap1.time_time(tiempo_o) <= t2): to = to + 1 print 'timeout.' rr = "echo 'timeout' >> ../examples/" + caso + "/results/alt2/alt2_output" os.system(rr) linea = "-------------------------------------------------------" rr = "echo '" + linea + "' >> ../examples/" + caso + "/results/alt1/alt1_output" os.system(rr) if ap1.UNSAT('temp') == 1: print 'Workaround not found.' linea = 'Workaround not found. ' rr = "echo '" + linea + "' >> ../examples/" + caso + "/results/alt2/alt2_output" os.system(rr) if ap1.UNSAT('temp') == 0: ap1.expor( '../examples/' + caso + '/results/alt2/wa_' + caso + '_' + accion_name + '_', i) os.system('cp resultado.als ../examples/' + caso + '/results/alt2/wa_' + caso + '_' + accion_name + '_' + str(i) + '.als') if emin >= int(nd['size']): if (emin == int(nd['size']) and temin < t2) or (emin > int(nd['size'])): temin = t2 emin = int(nd['size']) if emax <= int(nd['size']): if (emax == int(nd['size']) and temax < t2) or (emax < int(nd['size'])): temax = t2 emax = int(nd['size']) print 'first wac found in: ' + nume( str(t2) ) + ' seconds.\n-----------------------------------------------\n' linea = 'first wac found in: ' + nume( str(t2) ) + ' seconds.\n-----------------------------------------------\n' rr = "echo '" + linea + "' >> ../examples/" + caso + "/results/alt2/alt2_output" os.system(rr) ttotal_sin_to = ttotal_sin_to + t2 cant_wa = cant_wa + 1 os.system('rm temp') i = i + 1 print '---------------------------------------------------' resultado = 'Action ' + accion_name 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_lista) / float(cant_estados))) print "Avg. input size: " + nume( str(float(suma_tam_lista) / float(cant_estados))) resultadof = resultadof + '|' resultadof = resultadof + 'Number of workarrounds found: ' + str(cant_wa) print 'Number of workarrounds found: ' + str(cant_wa) resultadof = resultadof + '|' resultadof = resultadof + 'Number of failures (exceeding a ' + tiempo_to + ' timeout): ' + str( to) print 'Number of failures (exceeding a ' + tiempo_to + ' timeout): ' + str( to) resultadof = resultadof + '|' if (cant_wa > 0): prome = ttotal_sin_to / float(cant_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.' resultadof = resultadof + '|' if (cant_wa > 0): prome = ttotal / float(cant_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 + '|' resultadof = resultadof + 'Total running time: ' + nume(str( float(ttotal))) + ' seconds.' print 'Total running time: ' + nume(str(float(ttotal))) + ' seconds.' resultadof = resultadof + '|' if not emin == 10000: resultadof = resultadof + 'Smallest input size: ' + str( emin) + ' elements.' print 'Smallest input size: ' + str(emin) + ' elements.' resultadof = resultadof + '|' 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)) resultadof = resultadof + '|' resultadof = resultadof + 'Largest input size: ' + str( emax) + ' elements.' if not emax == -1: print 'Largest input size: ' + str(emax) + ' elements.' resultadof = resultadof + '|' 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)) resultadof = resultadof + '|' print '---------------------------------------------------' rr = 'echo "' + resultadof + '" >> ../examples/' + sys.argv[ 1] + '/results/alt2/alt2_output' os.system(rr) return