]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/testcases/org/simantics/databoard/tests/TestWriteable.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / testcases / org / simantics / databoard / tests / TestWriteable.java
diff --git a/bundles/org.simantics.databoard/testcases/org/simantics/databoard/tests/TestWriteable.java b/bundles/org.simantics.databoard/testcases/org/simantics/databoard/tests/TestWriteable.java
new file mode 100644 (file)
index 0000000..3691418
--- /dev/null
@@ -0,0 +1,154 @@
+/*******************************************************************************\r
+ *  Copyright (c) 2010 Association for Decentralized Information Management in\r
+ *  Industry THTH ry.\r
+ *  All rights reserved. This program and the accompanying materials\r
+ *  are made available under the terms of the Eclipse Public License v1.0\r
+ *  which accompanies this distribution, and is available at\r
+ *  http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ *  Contributors:\r
+ *      VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.databoard.tests;
+
+import java.io.BufferedInputStream;\r
+import java.io.BufferedOutputStream;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileNotFoundException;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+import java.io.RandomAccessFile;\r
+\r
+import junit.framework.TestCase;\r
+\r
+import org.simantics.databoard.util.binary.BinaryFile;\r
+import org.simantics.databoard.util.binary.BinaryReadable;\r
+import org.simantics.databoard.util.binary.BinaryWriteable;\r
+import org.simantics.databoard.util.binary.InputStreamReadable;\r
+import org.simantics.databoard.util.binary.OutputStreamWriteable;\r
+
+public class TestWriteable extends TestCase {
+
+       public static final int ITERATIONS = 50;
+       
+       public void testWriteRead() 
+       throws FileNotFoundException, IOException 
+       {               
+               File tmp1 = File.createTempFile("xyz1", "tmp");
+               File tmp2 = File.createTempFile("xyz2", "tmp");
+               File tmp3 = File.createTempFile("xyz3", "tmp");
+               File tmp4 = File.createTempFile("xyz4", "tmp");
+               
+               tmp1.deleteOnExit();
+               tmp2.deleteOnExit();
+               tmp3.deleteOnExit();
+               tmp4.deleteOnExit();
+               
+               BinaryFile      write1 = new BinaryFile( new RandomAccessFile(tmp1, "rw") );
+               BinaryWriteable write2 = new OutputStreamWriteable( new FileOutputStream( tmp2, true  ) );              
+               BinaryWriteable write3 = new OutputStreamWriteable( new BufferedOutputStream( new FileOutputStream( tmp3, true  ) ) );
+               BinaryFile write4 = new BinaryFile( tmp4 );
+               
+               System.out.println("Write Times:");
+               long time2 = measureWrite(write2);\r
+               long time3 = measureWrite(write3);\r
+               long time1 = measureWrite(write1);
+               long time4 = measureWrite(write4);\r
+               
+               System.out.println();
+               System.out.println("RandomAccessFile: "+time1);
+               System.out.println("FileOutputStream: "+time2);
+               System.out.println("FileOutputStream (Buffered) : "+time3);
+               System.out.println("BinaryFile : "+time4);
+
+               write4.close();
+               
+               BinaryFile     read1 = new BinaryFile( new RandomAccessFile(tmp1, "r") );
+               BinaryReadable read2 = new InputStreamReadable( new FileInputStream( tmp2 ), tmp1.length() );           
+               BinaryReadable read3 = new InputStreamReadable( new BufferedInputStream( new FileInputStream( tmp3 ) ), tmp1.length() );
+               BinaryFile     read4 = new BinaryFile( tmp4 );
+               
+               System.out.println("Read Times:");
+               time2 = measureRead(read2);\r
+               time3 = measureRead(read3);                             \r
+               time1 = measureRead(read1);
+               time4 = measureRead(read4);                             \r
+               System.out.println();
+               System.out.println("RandomAccessFile: "+time1);
+               System.out.println("FileOutputStream: "+time2);
+               System.out.println("FileOutputStream (Buffered) : "+time3);
+               System.out.println("BinaryFile : "+time4);
+               
+               // re-write
+               write1.position(0);
+               time1 = measureWrite(write1);           
+               // Re-read
+               read1.position(0);
+               time2 = measureRead(read1);
+               System.out.println("\nRandomAccessFile (again): write="+time1+", read="+time2);
+               
+       }
+       
+       static long measureWrite(BinaryWriteable write) 
+       throws IOException
+       {               
+               System.gc();
+               byte[] data = new byte[1024];
+               for (int i=0; i<data.length; i++)
+                       data[i] = (byte) i;
+               
+               long startTime = System.currentTimeMillis();            
+               for (int iter=0; iter<ITERATIONS; iter++)
+               {
+                       if (iter % 10==0) System.out.print(".");
+                       for (int i=0; i<256; i++)
+                               write.write((byte)i);
+                       for (int i=0; i<256; i++)
+                               write.writeDouble(i);
+                       for (int i=0; i<256; i++)
+                               write.writeFloat(i);
+                       for (int i=0; i<256; i++)
+                               write.writeInt(i);
+                       for (int i=0; i<256; i++)
+                               write.writeShort((short)i);
+                       write.write(data);                      
+               }               
+               write.flush();\r
+               long elapsedTime = System.currentTimeMillis() - startTime;              
+               
+               return elapsedTime;
+       }
+       
+       static long measureRead(BinaryReadable read) 
+       throws IOException
+       {               
+               System.gc();
+               byte[] data = new byte[1024];
+               
+               long startTime = System.currentTimeMillis();            
+               for (int iter=0; iter<ITERATIONS; iter++)
+               {
+                       if (iter % 10==0) System.out.print(".");
+                       for (int i=0; i<256; i++) 
+                               assertEquals((byte) i, read.readByte());
+                       for (int i=0; i<256; i++)
+                               assertEquals((double) i, read.readDouble());
+                       for (int i=0; i<256; i++)
+                               assertEquals((float) i, read.readFloat());
+                       for (int i=0; i<256; i++)
+                               assertEquals((int) i, read.readInt());
+                       for (int i=0; i<256; i++)
+                               assertEquals((short) i, read.readShort());
+                       read.readFully(data);
+                       for (int i=0; i<data.length; i++)
+                               assertEquals(data[i], (byte) i);
+               }               
+               long elapsedTime = System.currentTimeMillis() - startTime;
+               
+               return elapsedTime;
+       }
+       
+       
+}
+