⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coreclass.java

📁 C程序自动测试程序系统,主要是测试数据结构中的几个经典算法:关于排序,树的遍历等.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.util.Properties;
import java.util.Vector;

import java.io.*;

class PTester{
   public
	  Vector inData;
      Vector outData;
	  int delay=0;
	  int inputLines=1; // C程序执行一次输入行数
	  int outputLines=1;// C程序执行一次输出行数
   protected
      Process handle;
   public void test(String FileName){
       int i,j;
       InputStreamReader inputStream;
       OutputStreamWriter outputStream;
       BufferedReader in;
       BufferedWriter out;

    for(i=0;i<inData.size();)
    {
      try
      {//测试代码段
        
		handle = Runtime.getRuntime().exec(FileName);
        //System.out.println(FileName);
        outputStream=new OutputStreamWriter(handle.getOutputStream() );
        inputStream=new InputStreamReader(handle.getInputStream() );

        in=new BufferedReader(inputStream);
        out=new BufferedWriter(outputStream);
       
        String tmpStr;
		//PdelayThread dt=new PdelayThread ();
		//dt.run (handle,10,outData,outputLines);
		
		for (j=0;j<inputLines;j++,i++){
		   tmpStr=inData.elementAt(i).toString()+"\r\n";
           out.write(tmpStr);
           out.flush() ;		   
		}
		
		for (j=0;j<outputLines;j++){		   
		   tmpStr=in.readLine();
		   outData.addElement (tmpStr);
		   //outData.addElement(inData.elementAt(j/outputLines)); //测试代码
		}
       
        handle.waitFor ();
		handle.destroy ();
		in.close();
		out.close();
		
      }catch(Exception ex)
      {
        //System.out.println("File Not Found!");
      }
    }

   }
   void addInputData(String Data){
       inData.addElement(Data);
   }
   
   void clearInputData(){
       inData.removeAllElements(); 
   }
   
	void startCount(){
        int i=0;
		for (i=0;i<delay*100;i++);
		handle.destroy ();
	    for (i=0;i<outputLines;i++){		   
		     outData.addElement("overtime error"); //
		}
	}


	PTester(){
	   inData=new Vector();
           outData=new Vector();
	}

	PTester(int inDataLength,int outDataLength){
		inData=new Vector(inDataLength);
		outData=new Vector(outDataLength);
	}

	PTester(Vector data){
	     inData=(Vector)data.clone();
	}
}

class PBlackTester extends PTester {
    public Vector stdData;
    public Vector cmpResult=new Vector();
    public void compare(){
       int i=0;
	for (i=0;i<stdData.size();i++){
	 try
	 {
	   if (stdData.elementAt(i).toString().trim().equals(outData.elementAt(i).toString()))
		   cmpResult.addElement("yes");
	   else
		   cmpResult.addElement("no");
	 }catch(Exception ex)
	 {
		 cmpResult.addElement("no");
	 }
	}
    }
            PBlackTester(){

            }

            PBlackTester(int inDataLength,int outDataLength){
                super(inDataLength,outDataLength);
            }

            PBlackTester(Vector data){
                super(data);
            }
}

class PCFileCreator{
     protected String tempFileName;
	 protected String testFileName;
	 protected Vector funName=new Vector();
	 public    Vector testData=new Vector();
	 public    Vector randData=new Vector();
	 protected Vector start=new Vector();
	 protected Vector end=new Vector();
	 protected Vector testStart=new Vector();
	 protected Vector testEnd=new Vector();
	 
	 public int funCount=0;	 
	 PCFileCreator(String tempFilename,String testFilename){ //生成模板文件流和测试文件流,并读取模板中的函数
		 String tmpStr;
		 tempFileName=tempFilename;
		 testFileName=testFilename;
		 try
		{
		  FileReader tempFile=new FileReader(tempFileName);            
		  BufferedReader temp=new BufferedReader(tempFile);
          /////////读取模板中可用作测试的函数名//////////////

		  while((tmpStr=temp.readLine())!=null){
			  if (tmpStr.startsWith("/*Function:"))
			  { tmpStr=tmpStr.substring(11,tmpStr.indexOf(","));
				funName.addElement (tmpStr);
				start.addElement("");
				end.addElement ("");
				testStart.addElement ("");
				testEnd.addElement ("");
				funCount++;
			  }
			  else if(tmpStr.startsWith ("/*Start*/")) break;
			  
			  else if (tmpStr.startsWith("/*Data:"))
			  {
				  tmpStr=tmpStr.substring(7,tmpStr.indexOf("*/"));
				  testData.addElement (tmpStr);
			  }
			  else if (tmpStr.startsWith("/*RandData:"))
			  {
				  tmpStr=tmpStr.substring(11,tmpStr.indexOf("*/"));
				  randData.addElement (tmpStr);
			  }
		
		  }
		  
		 temp.close();
		 tempFile.close ();
		 getTempFunPos(0);
		 getTempFunPos(1);
		  /////////////////////////////////////////////////// 
		}catch(Exception ex)
		{
			
		}
		
	 }	 
	protected boolean getTempFunPos(int type){//读取模板文件中的函数位置记录在 start end数组中
		                   //type 表示是对模板文件查找还是对被测程序查找 0:模板文件 1:被测文件
	String tmpStr,tmpChar,filename; 
	int i,j,funIndex=0,flag=0,flag2=0,flag3=0;
	try
	{
	    if (type==0) filename=tempFileName;           //根据type给filename赋不同文件名
		else filename=testFileName;
		
		FileReader tempFile=new FileReader(filename); //打开文件
		BufferedReader infile=new BufferedReader(tempFile);
		int count=1;                                  //行数,第一行记作1
		while((tmpStr=infile.readLine())!=null)       //逐行读取
		{  
		    for (i=0;i<funName.size();i++)            //判断是否为指定可替换的函数定义部分  
		   	  if (tmpStr.startsWith(funName.elementAt(i).toString()))
			  {
				  if (type==0) start.setElementAt(Integer.toString (count),i);  //记录所在行
				  else testStart.setElementAt(Integer.toString (count),i);
				  funIndex=i;
				  flag=1; flag2=0; flag3=0;  //flag =1 启动函数体范围检索 flag2=0记录找到是否找到过"{"
				                             //flag3=0 记录找到的"{"个数
			  }
			if (flag==1) 
				for (j=0;j<tmpStr.length();j++)
				{
					tmpChar=tmpStr.substring(j,j+1);
					if (tmpChar.equals ("{")) {
						 flag3++;flag2=1;
					}
					else if (tmpChar.equals ("}")) flag3--;
					if (flag2==1&&flag3==0)    //找到过"{"并且此时"{"找到个数为0,则认为函数体结束
					{ 
						if (type==0) end.setElementAt(Integer.toString(count),funIndex); //记录结束所在行
						else testEnd.setElementAt(Integer.toString(count),funIndex);
						flag=0;         //关闭函数体范围检索
					}
				}
			
			count++;    //行数递增
		}
		infile.close ();
		tempFile.close ();
		
	}catch(Exception ex)
	{
		//文件读取生成失败
		return(false);
	}
	   return(true);
	 }
	
	public boolean createSrcFile(int funIndex,String srcFileName){ //替换模板中的第funIndex个函数,生成新的C源文件 
	    int i,count=0; 
		try
		  {
		   FileWriter objFile=new FileWriter(srcFileName);
		   FileReader tempFile=new FileReader(tempFileName);
		   FileReader testFile=new FileReader(testFileName);
		   
		   BufferedWriter outfile=new BufferedWriter (objFile);
		   BufferedReader infile=new BufferedReader(tempFile);
		   BufferedReader testfile=new BufferedReader(testFile);
		   
		   if (funIndex>0)
		       funIndex--;      //用户传入为第几个函数,但在funName中从0开始记数,在此做修正
		   else funIndex=0;
		   
		   String tmpStr;
		   int countTemp=0,countTest=0,flag;
		   while((tmpStr=infile.readLine())!=null)
		       {   if (countTemp==Integer.parseInt(start.elementAt (funIndex).toString())-1)
			       {   for (countTest=0;countTest<Integer.parseInt(testStart.elementAt(funIndex).toString ())-1;countTest++)
			              testfile.readLine();
			           while (countTest<=Integer.parseInt (testEnd.elementAt (funIndex).toString()))
			           {      tmpStr=testfile.readLine ();
			  	           outfile.write(tmpStr+"\r\n");
				           countTest++;
			           }  
			           while (countTemp<Integer.parseInt (end.elementAt (funIndex).toString()))
			           {      infile.readLine ();
				           countTemp++;
			           }    
			        }
			        else{
			             outfile.write(tmpStr+"\r\n");
			             countTemp++;
			        }
		         }

		    
		   outfile.flush ();    //发送并清空最后的碎片
		  
		   outfile.close() ;
		   objFile.close ();
		   infile.close();
		   tempFile.close();
		   
		   }catch(Exception ex)
		   {
			 ex.toString ();
		   }
		 
		return(true);	
	}	
	
	
		public boolean createSrcFile(int funIndex,String srcFileName,String fillBlank){ //替换模板中的第funIndex个空格,生成新的C源文件 
	    int i,count=0; 
		try
		  {
		   FileWriter objFile=new FileWriter(srcFileName);
		   FileReader tempFile=new FileReader(tempFileName);
		   FileReader testFile=new FileReader(testFileName);
		   
		   BufferedWriter outfile=new BufferedWriter (objFile);
		   BufferedReader infile=new BufferedReader(tempFile);
		   BufferedReader testfile=new BufferedReader(testFile);
		   
		   if (funIndex>0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -