Repository: systemml Updated Branches: refs/heads/master ec024661a -> a03065299
[MINOR] Additional input/output verification in flaky JMLC test Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/a0306529 Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/a0306529 Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/a0306529 Branch: refs/heads/master Commit: a03065299a11487655863f4077df9c4af97829e1 Parents: ec02466 Author: Matthias Boehm <[email protected]> Authored: Wed Nov 8 13:49:50 2017 -0800 Committer: Matthias Boehm <[email protected]> Committed: Wed Nov 8 13:49:50 2017 -0800 ---------------------------------------------------------------------- .../functions/jmlc/MulticlassSVMScoreTest.java | 44 ++++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/a0306529/src/test/java/org/apache/sysml/test/integration/functions/jmlc/MulticlassSVMScoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/sysml/test/integration/functions/jmlc/MulticlassSVMScoreTest.java b/src/test/java/org/apache/sysml/test/integration/functions/jmlc/MulticlassSVMScoreTest.java index eca6e52..519ebac 100644 --- a/src/test/java/org/apache/sysml/test/integration/functions/jmlc/MulticlassSVMScoreTest.java +++ b/src/test/java/org/apache/sysml/test/integration/functions/jmlc/MulticlassSVMScoreTest.java @@ -39,7 +39,6 @@ import org.junit.Test; public class MulticlassSVMScoreTest extends AutomatedTestBase { - private final static String TEST_NAME = "m-svm-score"; private final static String TEST_DIR = "functions/jmlc/"; private final static String MODEL_FILE = "sentiment_model.mtx"; @@ -49,15 +48,17 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase private final static int rows = 107; private final static int cols = 46; //fixed - private final static int nRuns = 5; + private final static int nRuns = 3; private final static double sparsity1 = 0.7; private final static double sparsity2 = 0.1; + //This testcase recently caused intermittent test failures on jenkins that are not + //reproducible in local environments; hence we perform additional sanity checks here. + private final static boolean CHECK_IN_OUT = true; @Override - public void setUp() - { + public void setUp() { addTestConfiguration(TEST_NAME, new TestConfiguration(TEST_CLASS_DIR, TEST_NAME, new String[] { "predicted_y" }) ); } @@ -88,10 +89,14 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase loadTestConfiguration(config); //generate inputs - ArrayList<double[][]> Xset = generateInputs(nRuns, rows, cols, sparse?sparsity2:sparsity1); + ArrayList<double[][]> Xset = generateInputs(nRuns, rows, cols, sparse?sparsity2:sparsity1); + if( CHECK_IN_OUT ) + checkSelfEquivalence(Xset, rows, cols); //run DML via JMLC ArrayList<double[][]> Yset = execDMLScriptviaJMLC( Xset, flags ); + if( CHECK_IN_OUT ) + checkSelfEquivalence(Yset, rows, 1); //run R and compare results to DML result String HOME = SCRIPT_DIR + TEST_DIR; @@ -99,8 +104,8 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase rCmd = getRCmd(inputDir(), expectedDir()); //write model data once - MatrixBlock mb = DataConverter.readMatrixFromHDFS(SCRIPT_DIR + TEST_DIR + MODEL_FILE, - InputInfo.TextCellInputInfo, rows, cols, 1000, 1000); + MatrixBlock mb = DataConverter.readMatrixFromHDFS(SCRIPT_DIR + TEST_DIR + MODEL_FILE, + InputInfo.TextCellInputInfo, rows, cols, 1000, 1000); double[][] W = DataConverter.convertToDoubleMatrix( mb ); writeInputMatrix("W", W, true); @@ -108,7 +113,7 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase for( int i=0; i<nRuns; i++ ) { //write input data - writeInputMatrix("X", Xset.get(i), true); + writeInputMatrix("X", Xset.get(i), true); //run the R script runRScript(true); @@ -117,7 +122,7 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase HashMap<CellIndex, Double> rfile = readRMatrixFromFS("predicted_y"); double[][] expected = TestUtils.convertHashMapToDoubleArray(rfile, rows, 1); - TestUtils.compareMatrices(expected, Yset.get(i), rows, 1, eps); + TestUtils.compareMatrices(expected, Yset.get(i), rows, 1, eps); } } @@ -140,7 +145,7 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase boolean parsePyDML = false; //read and precompile script - String script = conn.readScript(SCRIPT_DIR + TEST_DIR + TEST_NAME + ".dml"); + String script = conn.readScript(SCRIPT_DIR + TEST_DIR + TEST_NAME + ".dml"); PreparedScript pstmt = conn.prepareScript(script, new String[]{"X","W"}, new String[]{"predicted_y"}, parsePyDML); //read model @@ -162,13 +167,11 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase ret.add(Y); //keep result for comparison } } - catch(Exception ex) - { + catch(Exception ex) { ex.printStackTrace(); throw new IOException(ex); } - finally - { + finally { if( conn != null ) conn.close(); } @@ -178,13 +181,18 @@ public class MulticlassSVMScoreTest extends AutomatedTestBase return ret; } - private ArrayList<double[][]> generateInputs( int num, int rows, int cols, double sparsity ) - { + private ArrayList<double[][]> generateInputs( int num, int rows, int cols, double sparsity ) { ArrayList<double[][]> ret = new ArrayList<double[][]>(); for( int i=0; i<num; i++ ) - ret.add(getRandomMatrix(rows, cols, -1, 1, sparsity, i)); - + ret.add(getRandomMatrix(rows, cols, -1, 1, sparsity, 7)); return ret; } + private void checkSelfEquivalence(ArrayList<double[][]> data, int rows, int cols) { + if( data == null || data.size() < 2 ) + return; + double[][] data0 = data.get(0); + for(int i=1; i<data.size(); i++) + TestUtils.compareMatrices(data0, data.get(i), rows, cols, eps); + } } \ No newline at end of file
