package libcore.java.math; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * Standard single-input test framework for csv math tests */ public abstract class CSVTest extends junit.framework.TestCase { /* * csv file should have the following format: * function,expected_output,input,extra_info * e.g. cos,-0x1.0000000000000p+0,0x1.921fb54442d18p+1,cos(pi) * for two input: function,expected_output,input1,input2,extra * vogar classpath: obj/JAVA_LIBRARIES/core-tests-support_intermediates/javalib.jar */ /** * This is a set of functions in java.Math/StrictMath that take two inputs. * These functions will call run2InputTest; others will call runTest. */ protected static final Set<String> twoInputFunctions; static { Set<String> twoInFunc = new HashSet<String>(); twoInFunc.add("atan2"); twoInFunc.add("copySign"); twoInFunc.add("hypot"); twoInFunc.add("IEEEremainder"); twoInFunc.add("max"); twoInFunc.add("min"); twoInFunc.add("nextAfter"); twoInFunc.add("pow"); twoInFunc.add("scalb"); twoInputFunctions = Collections.unmodifiableSet(twoInFunc); } void TestCSVInputs(String[] csvFileNames) throws Exception { int totalTests = 0; for (String csvFileName : csvFileNames) { String line = ""; BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader( getClass().getResourceAsStream(csvFileName))); while ((line = br.readLine()) != null) { if (line.charAt(0) != '#') { String[] testCase = line.split(","); runTest(testCase); totalTests++; } } } finally { if (br != null) { br.close(); } } } System.out.println("Completed running " + totalTests + " tests"); } protected void runTest(String[] testCase) throws Exception { String function = testCase[0]; double expectedOutput = Double.parseDouble(testCase[1]); double input = Double.parseDouble(testCase[2]); String extra = ""; if (twoInputFunctions.contains(function)) { double input2 = Double.parseDouble(testCase[3]); if (testCase.length > 4) { extra = testCase[4]; } run2InputTest(function, expectedOutput, input, input2, extra); } else { if (testCase.length > 3) { extra = testCase[3]; } runTest(function, expectedOutput, input, extra); } } abstract void runTest(String func, double expectedOutput, double input, String extra) throws Exception; abstract void run2InputTest(String func, double expectedOutput, double input1, double input2, String extra) throws Exception; }