// Path: src/org/drugepi/match/Match.java
// public enum MatchType {
// 	NEAREST_NEIGHBOR, NN, BALANCED_NEAREST_NEIGHBOR, BALANCED_NN, 
// 	GREEDY_DIGIT, GREEDY_CALIPER, GREEDY, COMPLETE ;
// 		
// 	public static MatchType toMatchType(String s) {
// 		if (s == null) 
// 			return null;
// 			
// 		try {
// 			return(valueOf(s.toUpperCase()));
// 		} catch (Exception e) {
// 			return null;
// 		}
// 	}
// }
// 
// Path: src/org/drugepi/util/TabDelimitedFileReader.java
// public class TabDelimitedFileReader extends RowReader {
//     private FileReader fr;
//     private BufferedReader br;
//     private String filePath;
//  
//     /**
//      * TabDelimitedFileReader constructor.
//      * 
//      * @throws Exception
//      */
//     public TabDelimitedFileReader()
//     throws Exception
//     {
//     	super();
//     	fr = null;
//     	br = null;
//     }
//     
//     /**
//      * TabDelimitedFileReader.  Opens a file at the specified path.
//      * 
//      * @param filePath  Path of the tab-delimited file to be read.
//      * @throws Exception
//      */
//     public TabDelimitedFileReader(String filePath)
//     throws Exception
//     {
//     	this();
//     	
//     	this.filePath = filePath;
//     	
//         fr = new FileReader(filePath);
//         br = new BufferedReader(fr);
// 
//         // toss the first line
//         String line = br.readLine();
//         if (line != null) {
//             String[] row = line.split("\\t");
//             this.numColumns = row.length;
//         }
//     }
//     
//      /* (non-Javadoc)
//      * @see org.drugepi.util.RowReader#getNextRow()
//      */
//     public String[] getNextRow()
//         throws Exception
//     {
//         String[] row = null;
// 
//         String line = br.readLine();
//         if (line != null) {
//             row = line.split("\\t");
//         }
//         
// //        // trim quotes around the string
// //        for (int i = 0; i < row.length; i++) {
// //        	if ((row[i].startsWith("\"")) &&
// //        		(row[i].endsWith("\"")))
// //        		row[i] = row[i].substring(1, row[i].length() - 1);
// //        }
// 
//         return row;
//     }
//     
//     public void reset()
//     throws Exception
//     {
//     	this.close();
// 
//         fr = new FileReader(this.filePath);
//         br = new BufferedReader(fr);
// 
//         // toss the first line
//         br.readLine();
//     }
// 
//     /* (non-Javadoc)
//      * @see org.drugepi.util.RowReader#close()
//      */
//     public void close()
//         throws Exception
//     {
//         br.close();
//         fr.close();
//     }
// }


import org.drugepi.match.Match.MatchType;
import org.drugepi.util.TabDelimitedFileReader;
import org.junit.*;
import static org.junit.Assert.*;

	@After
	public void tearDown() throws Exception {
	}
	
	private void checkOutput(int caseNum)
	throws Exception
	{
		TabDelimitedFileReader matchOutputReader = new TabDelimitedFileReader(this.outfilePath);
		TabDelimitedFileReader answerReader = new TabDelimitedFileReader("testing/match_test_2way_check.txt");
		
		// toss the first rows
		answerReader.getNextRow();
		matchOutputReader.getNextRow();
		
		String[] answerRow;
		String[] outputRow;
		while ((answerRow = answerReader.getNextRow()) != null) {
			if (answerRow[0].equals(Integer.toString(caseNum))) {
				outputRow = matchOutputReader.getNextRow();
				assertNotNull(outputRow);
				assertEquals(answerRow[1], outputRow[0]);
				assertEquals(answerRow[2], outputRow[1]);
			}
		}
			
		matchOutputReader.close();
		answerReader.close();
	}
	
// Path: src/org/drugepi/match/Match.java
// public enum MatchType {
// 	NEAREST_NEIGHBOR, NN, BALANCED_NEAREST_NEIGHBOR, BALANCED_NN, 
// 	GREEDY_DIGIT, GREEDY_CALIPER, GREEDY, COMPLETE ;
// 		
// 	public static MatchType toMatchType(String s) {
// 		if (s == null) 
// 			return null;
// 			
// 		try {
// 			return(valueOf(s.toUpperCase()));
// 		} catch (Exception e) {
// 			return null;
// 		}
// 	}
// }
// 
// Path: src/org/drugepi/util/TabDelimitedFileReader.java
// public class TabDelimitedFileReader extends RowReader {
//     private FileReader fr;
//     private BufferedReader br;
//     private String filePath;
//  
//     /**
//      * TabDelimitedFileReader constructor.
//      * 
//      * @throws Exception
//      */
//     public TabDelimitedFileReader()
//     throws Exception
//     {
//     	super();
//     	fr = null;
//     	br = null;
//     }
//     
//     /**
//      * TabDelimitedFileReader.  Opens a file at the specified path.
//      * 
//      * @param filePath  Path of the tab-delimited file to be read.
//      * @throws Exception
//      */
//     public TabDelimitedFileReader(String filePath)
//     throws Exception
//     {
//     	this();
//     	
//     	this.filePath = filePath;
//     	
//         fr = new FileReader(filePath);
//         br = new BufferedReader(fr);
// 
//         // toss the first line
//         String line = br.readLine();
//         if (line != null) {
//             String[] row = line.split("\\t");
//             this.numColumns = row.length;
//         }
//     }
//     
//      /* (non-Javadoc)
//      * @see org.drugepi.util.RowReader#getNextRow()
//      */
//     public String[] getNextRow()
//         throws Exception
//     {
//         String[] row = null;
// 
//         String line = br.readLine();
//         if (line != null) {
//             row = line.split("\\t");
//         }
//         
// //        // trim quotes around the string
// //        for (int i = 0; i < row.length; i++) {
// //        	if ((row[i].startsWith("\"")) &&
// //        		(row[i].endsWith("\"")))
// //        		row[i] = row[i].substring(1, row[i].length() - 1);
// //        }
// 
//         return row;
//     }
//     
//     public void reset()
//     throws Exception
//     {
//     	this.close();
// 
//         fr = new FileReader(this.filePath);
//         br = new BufferedReader(fr);
// 
//         // toss the first line
//         br.readLine();
//     }
// 
//     /* (non-Javadoc)
//      * @see org.drugepi.util.RowReader#close()
//      */
//     public void close()
//         throws Exception
//     {
//         br.close();
//         fr.close();
//     }
// }


// Path: src/org/drugepi/match/TwoWayMatchTest.java
import org.drugepi.match.Match.MatchType;
import org.drugepi.util.TabDelimitedFileReader;
import org.junit.*;
import static org.junit.Assert.*;


	@After
	public void tearDown() throws Exception {
	}
	
	private void checkOutput(int caseNum)
	throws Exception
	{
		TabDelimitedFileReader matchOutputReader = new TabDelimitedFileReader(this.outfilePath);
		TabDelimitedFileReader answerReader = new TabDelimitedFileReader("testing/match_test_2way_check.txt");
		
		// toss the first rows
		answerReader.getNextRow();
		matchOutputReader.getNextRow();
		
		String[] answerRow;
		String[] outputRow;
		while ((answerRow = answerReader.getNextRow()) != null) {
			if (answerRow[0].equals(Integer.toString(caseNum))) {
				outputRow = matchOutputReader.getNextRow();
				assertNotNull(outputRow);
				assertEquals(answerRow[1], outputRow[0]);
				assertEquals(answerRow[2], outputRow[1]);
			}
		}
			
		matchOutputReader.close();
		answerReader.close();
	}
	
	private void doTwoWayMatchingTest(MatchType matchType, int matchRatio, int fixedRatio, int parallel)