]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/testcases/org/simantics/databoard/tests/TestBinaryFile.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.databoard / testcases / org / simantics / databoard / tests / TestBinaryFile.java
1 /*******************************************************************************
2  *  Copyright (c) 2010 Association for Decentralized Information Management in
3  *  Industry THTH ry.
4  *  All rights reserved. This program and the accompanying materials
5  *  are made available under the terms of the Eclipse Public License v1.0
6  *  which accompanies this distribution, and is available at
7  *  http://www.eclipse.org/legal/epl-v10.html
8  *
9  *  Contributors:
10  *      VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.databoard.tests;
13
14 import java.io.File;
15 import java.io.FileNotFoundException;
16 import java.io.IOException;
17 import java.io.RandomAccessFile;
18
19 import junit.framework.TestCase;
20
21 import org.simantics.databoard.Accessors;
22 import org.simantics.databoard.Bindings;
23 import org.simantics.databoard.accessor.error.AccessorConstructionException;
24 import org.simantics.databoard.accessor.error.AccessorException;
25 import org.simantics.databoard.accessor.file.FileVariantAccessor;
26 import org.simantics.databoard.util.binary.BinaryFile;
27 import org.simantics.databoard.util.binary.BinaryReadable;
28 import org.simantics.databoard.util.binary.BinaryWriteable;
29 import org.simantics.databoard.util.binary.RandomAccessBinary;
30 import org.simantics.databoard.util.binary.RandomAccessBinary.ByteSide;
31
32 public class TestBinaryFile extends TestCase {
33
34         public static final int ITERATIONS = 50;
35         File f;
36         RandomAccessBinary file;
37         
38         public void setUp() throws Exception {
39                 f = File.createTempFile("prefix", "suffix");
40                 file = new BinaryFile( new RandomAccessFile(f, "rw"));
41         }
42         
43         public void tearDown() throws Exception {
44                 file.close();
45                 f.delete();
46         }
47
48         
49         public void testFileHandle() throws IOException, AccessorConstructionException, AccessorException
50         {
51                 File f = File.createTempFile("Testcase-filehandle", ".dbd");
52                 f.delete();
53                 FileVariantAccessor a = Accessors.createFile(f);        
54                 a.setContentValue(Bindings.STRING, "Hello");
55                 a.flush();
56                 a.close();
57                 assertTrue( f.delete() );
58         }
59         
60         public void testInsertRemove()
61         throws IOException
62         {
63                 // Write 4 MB file
64                 for (int i=0; i<1024*1024; i++)
65                 {
66                         file.writeInt(i ^0x53);
67                 }
68                 file.flush();
69
70                 int iterCount = 16;
71                 long totInsertTime = 0;
72                 long totRemoveTime = 0;
73                 
74                 for (int iter=0; iter<iterCount; iter++) {
75                 // Verify content
76                 // 1. half
77                 file.position(0L);
78                 for (int i=0; i<1024*1024; i++)
79                         assertEquals(i^0x53, file.readInt());
80                 
81                 // Add 256 kb at 2MB
82                 System.gc();
83                 long startTime = System.currentTimeMillis();
84                 file.position(512*1024*4L);
85                 file.insertBytes(256*1024, ByteSide.Left);              
86                 long elapsedTime = System.currentTimeMillis() - startTime;
87                 totInsertTime += elapsedTime;
88                 System.out.println("Insert 256kb in front of 2MB, time: "+elapsedTime);
89                 
90                 // Verify file size
91                 file.flush();
92                 assertEquals(4*1024*1024 + 256*1024, file.length());
93                 
94                 // Verify content
95                 // 1. half
96                 file.position(0);
97                 for (int i=0; i<512*1024; i++)
98                         assertEquals(i^0x53, file.readInt());
99                 // 2. half
100                 file.position(512*1024*4+256*1024);
101                 for (int i=512*1024; i<1024*1024; i++)
102                         assertEquals(i^0x53, file.readInt());
103
104                 // Remove content
105                 System.gc();
106                 startTime = System.currentTimeMillis();
107                 file.position(512*1024*4);
108                 file.removeBytes(256*1024, ByteSide.Left);
109                 elapsedTime = System.currentTimeMillis() - startTime;
110                 totRemoveTime += elapsedTime;
111                 System.out.println("remove 256kb in front of 2,25MB, time: "+elapsedTime);
112                 
113                 // Verify file size
114                 assertEquals(4*1024*1024, file.length());
115                 
116                 // Verify content
117                 // 1. half
118                 file.position(0);
119                 for (int i=0; i<1024*1024; i++)
120                         assertEquals(i^0x53, file.readInt());
121                 }
122
123                 System.out.println("Average insert time: " + totInsertTime / iterCount);
124                 System.out.println("Average remove time: " + totRemoveTime / iterCount);
125         }
126         
127         public void testWriteRead() 
128         throws FileNotFoundException, IOException 
129         {               
130                 long time4 = measureWrite(file);
131                 System.out.println();
132                 System.out.println("Write Time : "+time4);
133
134                 file.flush();
135                 file.position(0);
136                 
137                 time4 = measureRead(file);                              
138                 System.out.println("Read Time : "+time4);
139         }
140         
141         static long measureWrite(BinaryWriteable write) 
142         throws IOException
143         {               
144                 System.gc();
145                 byte[] data = new byte[1024];
146                 for (int i=0; i<data.length; i++)
147                         data[i] = (byte) i;
148                 
149                 long startTime = System.currentTimeMillis();            
150                 for (int iter=0; iter<ITERATIONS; iter++)
151                 {
152                         if (iter % 10==0) System.out.print(".");
153                         for (int i=0; i<256; i++)
154                                 write.write((byte)i);
155                         for (int i=0; i<256; i++)
156                                 write.writeDouble(i);
157                         for (int i=0; i<256; i++)
158                                 write.writeFloat(i);
159                         for (int i=0; i<256; i++)
160                                 write.writeInt(i);
161                         for (int i=0; i<256; i++)
162                                 write.writeShort((short)i);
163                         write.write(data);                      
164                 }               
165                 write.flush();
166                 long elapsedTime = System.currentTimeMillis() - startTime;              
167                 
168                 return elapsedTime;
169         }
170         
171         static long measureRead(BinaryReadable read) 
172         throws IOException
173         {               
174                 System.gc();
175                 byte[] data = new byte[1024];
176                 
177                 long startTime = System.currentTimeMillis();            
178                 for (int iter=0; iter<ITERATIONS; iter++)
179                 {
180                         if (iter % 10==0) System.out.print(".");
181                         for (int i=0; i<256; i++) 
182                                 assertEquals((byte) i, read.readByte());
183                         for (int i=0; i<256; i++)
184                                 assertEquals((double) i, read.readDouble());
185                         for (int i=0; i<256; i++)
186                                 assertEquals((float) i, read.readFloat());
187                         for (int i=0; i<256; i++)
188                                 assertEquals((int) i, read.readInt());
189                         for (int i=0; i<256; i++)
190                                 assertEquals((short) i, read.readShort());
191                         read.readFully(data);
192                         for (int i=0; i<data.length; i++)
193                                 assertEquals(data[i], (byte) i);
194                 }               
195                 long elapsedTime = System.currentTimeMillis() - startTime;
196                 
197                 return elapsedTime;
198         }
199         
200 }
201