Exemple #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
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