자신이 짠 프로그램이 어느정도 성능이 나오는지 궁금할때가 있다.
학생들이 짠 프로그램을 성능측정을 하기위해 나름 -_- 공들여 만든 프로그램이다.
다양한용도로 사용할수 있으며, input파일과 output파일을 실행시 넣어죠야 프로그램이 돌아간다.
Programming-challenges 란 책의 JollyJumpers 라는 문제를 기준으로 만들어진 프로그램이다.
목적에 따라 약간식 수정하면 다른 문제들도 적응가능하다..
평가를 위한 input파일과 output파일이다.
참고로 이 프로그램을 돌리고 싶으면 UNS 인터페이스를 자신의 코드 안에 넣어 완성한후 user 클래스를 약간 손을 봐죠야 돌아간다.
/*
LWS performance evaluation V.1
this is performance evaluation program for programming user.
functions
1. measurement best time and worst time
2. total time to performance evaluation
3. error search
made by Lws
*/
import java.io.*;
import java.util.*;
public class Performance
{
public static float totalTime;
public static float bestTime;
public static float worstTime;
public static int errorCount;
/***
initial function
*/
public Performance()
{
totalTime=0;
errorCount=0;
bestTime=90000;
worstTime=0;
}
public static void MakeResult(String[] args)
{
/*
variable and array
*/
String inputFile;
String outputFile;
String Message,Message2;
String Token;
char[] Sresult;
BufferedReader in;
BufferedReader out;
StringTokenizer st;
int i,j ;
long start,stop ;
long partStart,partStop;
int row,col;
int count=0 ;
char[] result ;
int testNumber ;
int[] inMessage ;
/**********************************
user class name
***********************************/
//userClass [userClassName];
lws s;
/*
input files in array
*/
inputFile = args[0] ;
outputFile = args[1] ;
start = System.nanoTime() ;
try
{
in = new BufferedReader(new FileReader(inputFile)) ;
out = new BufferedReader(new FileReader(outputFile)) ;
Message = in.readLine() ;
Message2 = out.readLine();
st = new StringTokenizer(Message) ;
Token = st.nextToken() ;
testNumber = Integer.valueOf(Token).intValue() ;
while (true)
{
s = new lws();
inMessage = new int[testNumber] ;
result = new char[10] ;
Sresult = new char[10];
for(i=0;i<testNumber;i++)
{
Token = st.nextToken() ;
inMessage[i] = Integer.valueOf(Token).intValue() ;
}
partStart = System.nanoTime() ;
result = s.unsResult(testNumber,inMessage) ;
partStop = System.nanoTime() ;
for(i=0;i<result.length;i++)
{
if(result[i] != Message2.charAt(i)) break;
}
if(i!=result.length)
errorCount++;
if(bestTime > (partStop-partStart))
bestTime = partStop-partStart ;
if(worstTime <(partStop-partStart))
worstTime = partStop-partStart ;
Message = in.readLine() ;
Message = in.readLine() ;
Message2 = out.readLine() ;
st = new StringTokenizer(Message) ;
Token = st.nextToken() ;
testNumber = Integer.valueOf(Token).intValue() ;
count++;
if(testNumber == 0) break ;
}
in.close() ;
stop = System.nanoTime() ;
System.out.println((float)((float)(stop-start)/1000000) + "ms") ;
totalTime += (float)(stop-start)/1000000 ;
}
catch (IOException e)
{
System.out.println("UNS : inputFile error - "+inputFile) ;
System.exit(0) ;
}
}
public static void main(String[] args)
{
int i ;
if(args.length != 2) {
System.out.println("Usage : Input Ouput");
System.exit(0) ;
}
// number of testing
MakeResult(args);
MakeResult(args);
MakeResult(args);
MakeResult(args);
MakeResult(args);
MakeResult(args);
MakeResult(args);
MakeResult(args);
MakeResult(args);
MakeResult(args);
System.out.print("Average measurement Time :");
System.out.format("%.3f ms%n",(float)(totalTime/10));
System.out.format("Best Time : %.3f ms%n",(float)(bestTime)/1000000);
System.out.format("Worst Time : %.3f ms%n",(float)(worstTime)/10000000);
System.out.println("error count : "+errorCount) ;
}
}
위 그림은 결과를 나타낸 그림이다.
총 평균시간, Best 시간, Worst 시간, 에러 발생수.
기능을 점차 추가해나갈 생각이다..
Performance.java
input.txt