예제 #1
0
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
예제 #2
0
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)