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

Reply via email to