diff options
Diffstat (limited to 'luni/src/test/java/libcore/java/math/CSVTest.java')
-rw-r--r-- | luni/src/test/java/libcore/java/math/CSVTest.java | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/luni/src/test/java/libcore/java/math/CSVTest.java b/luni/src/test/java/libcore/java/math/CSVTest.java new file mode 100644 index 0000000..9e151c3 --- /dev/null +++ b/luni/src/test/java/libcore/java/math/CSVTest.java @@ -0,0 +1,88 @@ +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; +}
\ No newline at end of file |