package hep.io.stdhep; import java.io.EOFException; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import junit.framework.TestCase; /** * * @author tonyj */ public class StdhepTest extends TestCase { public StdhepTest(String testName) { super(testName); } /** * Test of writeRecord method, of class hep.io.stdhep.StdhepWriter. */ public void testReadWrite() throws Exception { int nEvents = 10000; File file = File.createTempFile("test","stdhep"); file.deleteOnExit(); long t0 = System.currentTimeMillis(); StdhepWriter writer = new StdhepWriter(file.getAbsolutePath(), "TestTitle", "TestComment", nEvents); StdhepBeginRun begin = new StdhepBeginRun(nEvents, nEvents, nEvents, 0, 0, 0, 0); writer.writeRecord(begin); for (int i=0; i<nEvents; i++) { int[] isthep = new int[10]; int[] idhep = new int[10]; int[] jmohep = new int[10*2]; int[] jdahep = new int[10*2]; double[] phep = new double[10*5]; double[] vhep = new double[10*4]; StdhepEvent event = new StdhepEvent(i, 10, isthep, idhep, jmohep, jdahep, phep, vhep); writer.writeRecord(event); } StdhepEndRun end = new StdhepEndRun(nEvents, nEvents, nEvents, 0, 0, 0, 0); writer.writeRecord(end); writer.close(); long t1 = System.currentTimeMillis(); StdhepReader reader = new StdhepReader(file.getAbsolutePath()); testReadAndRewind(reader,nEvents); reader.rewind(); testReadAndRewind(reader,nEvents); reader.close(); long t2 = System.currentTimeMillis(); reader = new StdhepReader(new FileInputStream(file)); testReadAndRewind(reader,nEvents); reader.close(); long t3 = System.currentTimeMillis(); reader = new StdhepReader(file.getAbsolutePath()); reader.nextRecord(); StdhepEvent event = (StdhepEvent) reader.nextRecord(); assertEquals(0,event.getNEVHEP()); reader.skip(0); event = (StdhepEvent) reader.nextRecord(); assertEquals(1,event.getNEVHEP()); reader.skip(5); event = (StdhepEvent) reader.nextRecord(); assertEquals(7,event.getNEVHEP()); reader.skip(5000); event = (StdhepEvent) reader.nextRecord(); assertEquals(5008,event.getNEVHEP()); try { reader.skip(5000); fail("Should have thrown EOFException"); } catch (EOFException x) { // OK, exception expected } reader.close(); long t4 = System.currentTimeMillis(); reader = new StdhepReader(file.getAbsolutePath()); event = (StdhepEvent) reader.goToRecord(0,5000); assertEquals(5000,event.getNEVHEP()); event = (StdhepEvent) reader.goToRecord(0,4000); assertEquals(4000,event.getNEVHEP()); try { reader.goToRecord(0,nEvents+10); fail("Should have thrown EOFException"); } catch (EOFException x) { // OK, exception expected } reader.close(); long t5 = System.currentTimeMillis(); System.out.println("Write time "+(t1-t0)+"ms"); System.out.println("Read time "+(t2-t1)+"ms"); System.out.println("Sequential read time "+(t3-t2)+"ms"); System.out.println("Skip time "+(t4-t3)+"ms"); System.out.println("Goto time "+(t5-t4)+"ms"); } private void testReadAndRewind(StdhepReader reader, int nEvents) throws IOException { assertEquals("TestTitle",reader.getTitle()); assertEquals("TestComment",reader.getComment()); assertEquals(nEvents+2,reader.getNumberOfEvents()); assertEquals(nEvents,reader.getNumberOfEventsExpected()); StdhepRecord record = reader.nextRecord(); assertTrue(record instanceof StdhepBeginRun); int i = 0; try { for (;;) { record = reader.nextRecord(); if (record instanceof StdhepEvent) { StdhepEvent event = (StdhepEvent) record; assertEquals(i,event.getNEVHEP()); assertEquals(10,event.getNHEP()); i++; } else { assertTrue(record instanceof StdhepEndRun); } } } catch (EOFException x) { // No problem } assertEquals(nEvents,i); } }