summaryrefslogtreecommitdiffstats
path: root/luni/src/test/java/libcore/java/math/CSVTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'luni/src/test/java/libcore/java/math/CSVTest.java')
-rw-r--r--luni/src/test/java/libcore/java/math/CSVTest.java88
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