Changeset 2158


Ignore:
Timestamp:
01/24/07 15:00:36 (13 years ago)
Author:
melissa
Message:

Added new command line option to ReaderTest that automatically generates config
files. Also changed to use a more robust format for config files.

Location:
trunk/loci/formats/test
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/test/ConfigurationFiles.java

    r2157 r2158  
    6161   */ 
    6262  public void addFile(String id) throws IOException { 
    63     RandomAccessStream s = new RandomAccessStream(id); 
     63    RandomAccessStream ras = new RandomAccessStream(id); 
    6464    Location l = new Location(id); 
    65     byte[] b = new byte[(int) s.length()]; 
    66     s.read(b); 
     65    byte[] b = new byte[(int) ras.length()]; 
     66    ras.read(b); 
     67    ras.close(); 
    6768    StringTokenizer st = new StringTokenizer(new String(b), "\n"); 
    6869    while (st.hasMoreTokens()) { 
    6970      String line = st.nextToken(); 
    7071      if (!line.startsWith("#") && line.trim().length() > 0) { 
    71         // file name should be enclosed in double quotes 
    72         String file = line.substring(1, line.indexOf("\"", 2)); 
    73         line = line.substring(line.indexOf("\"", 2) + 2); 
     72        String file = line.substring(1, line.lastIndexOf("\"")); 
    7473        file = new Location(l.getParent(), file).getAbsolutePath(); 
    75         StringTokenizer spaces = new StringTokenizer(line, " "); 
    76         int nSeries = Integer.parseInt(spaces.nextToken()); 
    77         numSeries.put(file, new Integer(nSeries)); 
    78         int[][] dims = new int[nSeries][5]; 
    79         String[] orders = new String[nSeries]; 
    80         boolean[] interleave = new boolean[nSeries]; 
    81         boolean[] isRGB = new boolean[nSeries]; 
    82         int[][] thumbs = new int[nSeries][2]; 
    83         int[] ptype = new int[nSeries]; 
    84         boolean[] little = new boolean[nSeries]; 
    85  
    86         for (int i=0; i<nSeries; i++) { 
    87           dims[i][0] = Integer.parseInt(spaces.nextToken());   
    88           dims[i][1] = Integer.parseInt(spaces.nextToken());   
    89           dims[i][2] = Integer.parseInt(spaces.nextToken());   
    90           dims[i][3] = Integer.parseInt(spaces.nextToken());   
    91           dims[i][4] = Integer.parseInt(spaces.nextToken());   
    92           orders[i] = spaces.nextToken(); 
    93           interleave[i] = spaces.nextToken().equals("true"); 
    94           isRGB[i] = spaces.nextToken().equals("true"); 
    95           thumbs[i][0] = Integer.parseInt(spaces.nextToken()); 
    96           thumbs[i][1] = Integer.parseInt(spaces.nextToken()); 
    97           ptype[i] = FormatReader.pixelTypeFromString(spaces.nextToken()); 
    98           little[i] = spaces.nextToken().equals("true"); 
     74        line = line.substring(line.lastIndexOf("\"") + 2); 
     75 
     76        // first check if 'test' is set to false; if so, don't parse anything 
     77        // else 
     78       
     79        String testValue = line.substring(line.indexOf("test=") + 5).trim(); 
     80        if (testValue.equals("false")) { 
     81          doTest.put(file, new Boolean(false)); 
    9982        } 
    100         dimensions.put(file, dims); 
    101         dimOrders.put(file, orders); 
    102         interleaved.put(file, interleave); 
    103         rgb.put(file, isRGB); 
    104         thumbDims.put(file, thumbs); 
    105         pixelType.put(file, ptype); 
    106         littleEndian.put(file, little); 
    107         readTime.put(file, new Float(spaces.nextToken())); 
    108         memUsage.put(file, new Integer(spaces.nextToken())); 
    109         doTest.put(file, new Boolean(spaces.nextToken())); 
     83        else { 
     84          doTest.put(file, new Boolean(true)); 
     85 
     86          int ndx = line.indexOf("total_series=") + 13; 
     87          int nSeries =  
     88            Integer.parseInt(line.substring(ndx, line.indexOf(" ", ndx))); 
     89          numSeries.put(file, new Integer(nSeries)); 
     90 
     91          int[][] dims = new int[nSeries][5]; 
     92          String[] orders = new String[nSeries]; 
     93          boolean[] interleave = new boolean[nSeries]; 
     94          boolean[] isRGB = new boolean[nSeries]; 
     95          int[][] thumbs = new int[nSeries][2]; 
     96          int[] ptype = new int[nSeries]; 
     97          boolean[] little = new boolean[nSeries]; 
     98 
     99          for (int i=0; i<nSeries; i++) { 
     100            ndx = line.indexOf("[series=" + i); 
     101            String s = line.substring(ndx, line.indexOf("]", ndx)); 
     102            ndx = s.indexOf("x") + 2; 
     103            dims[i][0] =  
     104              Integer.parseInt(s.substring(ndx, s.indexOf(" ", ndx))); 
     105            ndx = s.indexOf("y") + 2; 
     106            dims[i][1] =  
     107              Integer.parseInt(s.substring(ndx, s.indexOf(" ", ndx))); 
     108            ndx = s.indexOf("z") + 2; 
     109            dims[i][2] =  
     110              Integer.parseInt(s.substring(ndx, s.indexOf(" ", ndx))); 
     111            ndx = s.indexOf("c") + 2; 
     112            dims[i][3] =  
     113              Integer.parseInt(s.substring(ndx, s.indexOf(" ", ndx))); 
     114            ndx = s.indexOf("t") + 2; 
     115            dims[i][4] =  
     116              Integer.parseInt(s.substring(ndx, s.indexOf(" ", ndx))); 
     117           
     118            ndx = s.indexOf("order") + 6; 
     119            orders[i] = s.substring(ndx, s.indexOf(" ", ndx)); 
     120            ndx = s.indexOf("interleave") + 11; 
     121            interleave[i] =  
     122              s.substring(ndx, s.indexOf(" ", ndx)).equals("true"); 
     123            ndx = s.indexOf("rgb") + 4; 
     124            isRGB[i] = s.substring(ndx, s.indexOf(" ", ndx)).equals("true"); 
     125            ndx = s.indexOf("thumbx") + 7; 
     126            thumbs[i][0] =  
     127              Integer.parseInt(s.substring(ndx, s.indexOf(" ", ndx))); 
     128            ndx = s.indexOf("thumby") + 7; 
     129            thumbs[i][1] =  
     130              Integer.parseInt(s.substring(ndx, s.indexOf(" ", ndx))); 
     131            ndx = s.indexOf("type") + 5; 
     132            ptype[i] = FormatReader.pixelTypeFromString( 
     133              s.substring(ndx, s.indexOf(" ", ndx))); 
     134            ndx = s.indexOf("little") + 7; 
     135            little[i] = s.substring(ndx).equals("true"); 
     136          } 
     137 
     138          dimensions.put(file, dims); 
     139          dimOrders.put(file, orders); 
     140          interleaved.put(file, interleave); 
     141          rgb.put(file, isRGB); 
     142          thumbDims.put(file, thumbs); 
     143          pixelType.put(file, ptype); 
     144          littleEndian.put(file, little); 
     145           
     146          ndx = line.indexOf("access=") + 7; 
     147          readTime.put(file, new Float(line.substring(ndx,  
     148            line.indexOf(" ", ndx)))); 
     149          ndx = line.indexOf("mem=") + 4; 
     150          long mem = Long.parseLong(line.substring(ndx,  
     151            line.indexOf(" ", ndx))); 
     152          memUsage.put(file, new Integer((int) (mem >> 20))); 
     153        } 
    110154      } 
    111155    } 
     
    183227  public float getTimePerPlane(String id) { 
    184228    if (!initialized(id)) return 0; 
    185     return ((float[]) readTime.get(id))[currentSeries]; 
     229    return ((Float) readTime.get(id)).floatValue(); 
    186230  } 
    187231 
    188232  public int getFileSize(String id) { 
    189233    if (!initialized(id)) return 0; 
    190     return ((int[]) memUsage.get(id))[currentSeries]; 
     234    return ((Float) memUsage.get(id)).intValue(); 
    191235  } 
    192236 
    193237  public boolean testFile(String id) { 
    194     if (!initialized(id)) return true; 
     238    if (!doTest.containsKey(id)) return true; 
    195239    return ((Boolean) doTest.get(id)).booleanValue();  
    196240  } 
  • trunk/loci/formats/test/ReaderTest.java

    r2156 r2158  
    6565  // -- Static fields -- 
    6666 
     67  public static boolean writeConfigFiles = false; 
     68  private static StringBuffer configLine; 
    6769  private static Vector configFiles = new Vector(); 
    6870  private static ConfigurationFiles config = ConfigurationFiles.newInstance(); 
     
    120122    try { 
    121123      int planesRead = 0; 
     124       
    122125      long l1 = System.currentTimeMillis(); 
    123126      for (int i=0; i<reader.getSeriesCount(id); i++) { 
     
    128131        int sizeX = reader.getSizeX(id); 
    129132        int sizeY = reader.getSizeY(id); 
     133         
    130134        for (int j=0; j<imageCount; j++) { 
    131135          BufferedImage b = reader.openImage(id, j); 
     
    286290  /**  
    287291   * Checks that the core metadata values match those given in  
    288    * the configuration file.  Note that this test will fail if there was 
    289    * no configuration file. 
     292   * the configuration file.  If there is no configuration file, this test 
     293   * is not run. 
    290294   */ 
    291295  public void testConsistent() { 
    292296    boolean success = true; 
    293     int nSeries = 0; 
    294     try { 
    295       nSeries = reader.getSeries(id); 
    296       if (nSeries != config.getNumSeries(id)) { 
    297         success = false; 
    298         writeLog(id + " failed consistent series count check"); 
    299       } 
    300     } 
    301     catch (Exception e) { 
    302       if (DEBUG) e.printStackTrace(); 
    303       success = false; 
    304     } 
    305     if (success) { 
     297    if (writeConfigFiles) { 
    306298      try { 
    307         for (int i=0; i<nSeries; i++) { 
    308           config.setSeries(id, i); 
     299        // assemble the config line 
     300        configLine.append("\""); 
     301        configLine.append(new Location(id).getName()); 
     302        configLine.append("\" total_series="); 
     303        configLine.append(reader.getSeriesCount(id)); 
     304        for (int i=0; i<reader.getSeriesCount(id); i++) { 
    309305          reader.setSeries(id, i); 
    310           if (config.getWidth(id) != reader.getSizeX(id)) { 
    311             success = false; 
    312             writeLog(id + " failed consistent width check in series " + i); 
    313           } 
    314           if (config.getHeight(id) != reader.getSizeY(id)) { 
    315             success = false; 
    316             writeLog(id + " failed consistent height check in series " + i); 
    317           } 
    318           if (config.getZ(id) != reader.getSizeZ(id)) { 
    319             success = false; 
    320             writeLog(id + " failed consistent sizeZ check in series " + i); 
    321           } 
    322           if (config.getC(id) != reader.getSizeC(id)) { 
    323             success = false; 
    324             writeLog(id + " failed consistent sizeC check in series " + i); 
    325           } 
    326           if (config.getT(id) != reader.getSizeT(id)) { 
    327             success = false; 
    328             writeLog(id + " failed consistent sizeT check in series " + i); 
    329           } 
    330           if (!config.getDimOrder(id).equals(reader.getDimensionOrder(id))) { 
    331             success = false; 
    332             writeLog(id +  
    333               " failed consistent dimension order check in series " + i); 
    334           } 
    335           if (config.isInterleaved(id) != reader.isInterleaved(id)) { 
    336             success = false; 
    337             writeLog(id +  
    338               " failed consistent interleaving flag check in series " + i); 
    339           } 
    340           if (config.isRGB(id) != reader.isRGB(id)) { 
    341             success = false; 
    342             writeLog(id + " failed consistent RGB flag check in series " + i); 
    343           } 
    344           if (config.getThumbX(id) != reader.getThumbSizeX(id)) { 
    345             success = false; 
    346             writeLog(id +  
    347               " failed consistent thumbnail width check in series " + i); 
    348           } 
    349           if (config.getThumbY(id) != reader.getThumbSizeY(id)) { 
    350             success = false; 
    351             writeLog(id +  
    352               " failed consistent thumbnail height check in series " + i); 
    353           } 
    354           if (config.getPixelType(id) != reader.getPixelType(id)) { 
    355             success = false; 
    356             writeLog(id + " failed consistent pixel type check in series " + i); 
    357           } 
    358           if (config.isLittleEndian(id) != reader.isLittleEndian(id)) { 
    359             success = false; 
    360             writeLog(id +  
    361               " failed consistent endianness flag check in series " + i); 
    362           } 
     306          configLine.append(" [series="); 
     307          configLine.append(i); 
     308          configLine.append(" x="); 
     309          configLine.append(reader.getSizeX(id)); 
     310          configLine.append(" y="); 
     311          configLine.append(reader.getSizeY(id)); 
     312          configLine.append(" z="); 
     313          configLine.append(reader.getSizeZ(id)); 
     314          configLine.append(" c="); 
     315          configLine.append(reader.getSizeC(id)); 
     316          configLine.append(" t="); 
     317          configLine.append(reader.getSizeT(id)); 
     318          configLine.append(" order="); 
     319          configLine.append(reader.getDimensionOrder(id)); 
     320          configLine.append(" interleave="); 
     321          configLine.append(reader.isInterleaved(id)); 
     322          configLine.append(" rgb="); 
     323          configLine.append(reader.isRGB(id)); 
     324          configLine.append(" thumbx="); 
     325          configLine.append(reader.getThumbSizeX(id)); 
     326          configLine.append(" thumby="); 
     327          configLine.append(reader.getThumbSizeY(id)); 
     328          configLine.append(" type="); 
     329          configLine.append(FormatReader.getPixelTypeString( 
     330            reader.getPixelType(id))); 
     331          configLine.append(" little="); 
     332          configLine.append(reader.isLittleEndian(id)); 
     333          configLine.append("]"); 
     334        } 
     335        configLine.append(" access="); 
     336        configLine.append(averagePlaneAccess); 
     337        configLine.append(" mem="); 
     338        long len = 0; 
     339        RandomAccessStream ras = new RandomAccessStream(id); 
     340        configLine.append(ras.length()); 
     341        ras.close(); 
     342        configLine.append(" test=true\n"); 
     343     
     344        File f = new File(new Location(id).getParent(), ".bioformats"); 
     345        BufferedWriter w = new BufferedWriter(new FileWriter(f, true)); 
     346        w.write(configLine.toString()); 
     347        w.close(); 
     348      } 
     349      catch (Exception e) { 
     350          /* debug */ e.printStackTrace(); 
     351        if (DEBUG) e.printStackTrace(); 
     352      
     353        configLine = new StringBuffer(); 
     354        configLine.append("\""); 
     355        configLine.append(new Location(id).getName()); 
     356        configLine.append("\" test=false\n"); 
     357 
     358        try { 
     359          File f = new File(new Location(id).getParent(), ".bioformats"); 
     360          BufferedWriter w = new BufferedWriter(new FileWriter(f, true)); 
     361          w.write(configLine.toString()); 
     362          w.close(); 
     363        } 
     364        catch (IOException exc) { 
     365          /* debug */ exc.printStackTrace(); 
     366          if (DEBUG) exc.printStackTrace(); 
     367          success = false; 
     368        } 
     369      } 
     370    } 
     371    else { 
     372      int nSeries = 0; 
     373      try { 
     374        nSeries = reader.getSeries(id); 
     375        if (nSeries != config.getNumSeries(id)) { 
     376          success = false; 
     377          writeLog(id + " failed consistent series count check"); 
    363378        } 
    364379      } 
     
    366381        if (DEBUG) e.printStackTrace(); 
    367382        success = false; 
     383      } 
     384      if (success) { 
     385        try { 
     386          for (int i=0; i<nSeries; i++) { 
     387            config.setSeries(id, i); 
     388            reader.setSeries(id, i); 
     389            if (config.getWidth(id) != reader.getSizeX(id)) { 
     390              success = false; 
     391              writeLog(id + " failed consistent width check in series " + i); 
     392            } 
     393            if (config.getHeight(id) != reader.getSizeY(id)) { 
     394              success = false; 
     395              writeLog(id + " failed consistent height check in series " + i); 
     396            } 
     397            if (config.getZ(id) != reader.getSizeZ(id)) { 
     398              success = false; 
     399              writeLog(id + " failed consistent sizeZ check in series " + i); 
     400            } 
     401            if (config.getC(id) != reader.getSizeC(id)) { 
     402              success = false; 
     403              writeLog(id + " failed consistent sizeC check in series " + i); 
     404            } 
     405            if (config.getT(id) != reader.getSizeT(id)) { 
     406              success = false; 
     407              writeLog(id + " failed consistent sizeT check in series " + i); 
     408            } 
     409            if (!config.getDimOrder(id).equals(reader.getDimensionOrder(id))) { 
     410              success = false; 
     411              writeLog(id +  
     412                " failed consistent dimension order check in series " + i); 
     413            } 
     414            if (config.isInterleaved(id) != reader.isInterleaved(id)) { 
     415              success = false; 
     416              writeLog(id +  
     417                " failed consistent interleaving flag check in series " + i); 
     418            } 
     419            if (config.isRGB(id) != reader.isRGB(id)) { 
     420              success = false; 
     421              writeLog(id + " failed consistent RGB flag check in series " + i); 
     422            } 
     423            if (config.getThumbX(id) != reader.getThumbSizeX(id)) { 
     424              success = false; 
     425              writeLog(id +  
     426                " failed consistent thumbnail width check in series " + i); 
     427            } 
     428            if (config.getThumbY(id) != reader.getThumbSizeY(id)) { 
     429              success = false; 
     430              writeLog(id +  
     431                " failed consistent thumbnail height check in series " + i); 
     432            } 
     433            if (config.getPixelType(id) != reader.getPixelType(id)) { 
     434              success = false; 
     435              writeLog(id +  
     436                " failed consistent pixel type check in series " + i); 
     437            } 
     438            if (config.isLittleEndian(id) != reader.isLittleEndian(id)) { 
     439              success = false; 
     440              writeLog(id +  
     441                " failed consistent endianness flag check in series " + i); 
     442            } 
     443          } 
     444        } 
     445        catch (Exception e) { 
     446          if (DEBUG) e.printStackTrace(); 
     447          success = false; 
     448        } 
    368449      } 
    369450    } 
     
    410491  protected void setUp() { 
    411492    reader = new FileStitcher(); 
     493    configLine = new StringBuffer(); 
    412494  } 
    413495 
     
    437519    TestSuite suite = new TestSuite(); 
    438520    suite.addTest(new ReaderTest("testBufferedImageDimensions", id)); 
    439     suite.addTest(new ReaderTest("testByteArrayDimensions", id)); 
    440     suite.addTest(new ReaderTest("testImageCount", id)); 
    441     suite.addTest(new ReaderTest("testOMEXML", id)); 
    442     if (config.initialized(id)) { 
    443       suite.addTest(new ReaderTest("testConsistent", id)); 
     521    if (!writeConfigFiles) { 
     522      suite.addTest(new ReaderTest("testByteArrayDimensions", id)); 
     523      suite.addTest(new ReaderTest("testImageCount", id)); 
     524      suite.addTest(new ReaderTest("testOMEXML", id)); 
     525    } 
     526    suite.addTest(new ReaderTest("testConsistent", id)); 
     527    if (config.initialized(id) && !writeConfigFiles) { 
    444528      suite.addTest(new ReaderTest("testMemoryUsage", id)); 
    445529      suite.addTest(new ReaderTest("testAccessTime", id)); 
     
    526610  public static void main(String[] args) { 
    527611    if (DEBUG) FormatReader.setDebug(true); 
     612    if (args.length > 0) { 
     613      for (int i=1; i<args.length; i++) { 
     614        if (args[i].equals("-config")) ReaderTest.writeConfigFiles = true; 
     615        else if (args[i].equals("-debug")) FormatReader.setDebug(true); 
     616      } 
     617    } 
    528618    Vector files = new Vector(); 
    529619    if (args == null || args.length == 0) { 
Note: See TracChangeset for help on using the changeset viewer.