1 /*******************************************************************************
\r
2 * Copyright (c) 2010 Association for Decentralized Information Management in
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.databoard.tests;
14 import java.io.File;
\r
15 import java.io.FileNotFoundException;
\r
16 import java.io.IOException;
\r
17 import java.io.RandomAccessFile;
\r
19 import junit.framework.TestCase;
\r
21 import org.simantics.databoard.Accessors;
\r
22 import org.simantics.databoard.Bindings;
\r
23 import org.simantics.databoard.accessor.error.AccessorConstructionException;
\r
24 import org.simantics.databoard.accessor.error.AccessorException;
\r
25 import org.simantics.databoard.accessor.file.FileVariantAccessor;
\r
26 import org.simantics.databoard.util.binary.BinaryFile;
\r
27 import org.simantics.databoard.util.binary.BinaryReadable;
\r
28 import org.simantics.databoard.util.binary.BinaryWriteable;
\r
29 import org.simantics.databoard.util.binary.RandomAccessBinary;
\r
30 import org.simantics.databoard.util.binary.RandomAccessBinary.ByteSide;
\r
32 public class TestBinaryFile extends TestCase {
34 public static final int ITERATIONS = 50;
36 RandomAccessBinary file;
38 public void setUp() throws Exception {
39 f = File.createTempFile("prefix", "suffix");
40 file = new BinaryFile( new RandomAccessFile(f, "rw"));
43 public void tearDown() throws Exception {
49 public void testFileHandle() throws IOException, AccessorConstructionException, AccessorException
\r
51 File f = File.createTempFile("Testcase-filehandle", ".dbd");
\r
53 FileVariantAccessor a = Accessors.createFile(f);
\r
54 a.setContentValue(Bindings.STRING, "Hello");
\r
57 assertTrue( f.delete() );
\r
60 public void testInsertRemove()
64 for (int i=0; i<1024*1024; i++)
66 file.writeInt(i ^0x53);
71 long totInsertTime = 0;
72 long totRemoveTime = 0;
74 for (int iter=0; iter<iterCount; iter++) {
78 for (int i=0; i<1024*1024; i++)
79 assertEquals(i^0x53, file.readInt());
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);
92 assertEquals(4*1024*1024 + 256*1024, file.length());
97 for (int i=0; i<512*1024; i++)
98 assertEquals(i^0x53, file.readInt());
100 file.position(512*1024*4+256*1024);
101 for (int i=512*1024; i<1024*1024; i++)
102 assertEquals(i^0x53, file.readInt());
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);
114 assertEquals(4*1024*1024, file.length());
119 for (int i=0; i<1024*1024; i++)
120 assertEquals(i^0x53, file.readInt());
123 System.out.println("Average insert time: " + totInsertTime / iterCount);
124 System.out.println("Average remove time: " + totRemoveTime / iterCount);
127 public void testWriteRead()
128 throws FileNotFoundException, IOException
130 long time4 = measureWrite(file);
131 System.out.println();
132 System.out.println("Write Time : "+time4);
137 time4 = measureRead(file);
138 System.out.println("Read Time : "+time4);
141 static long measureWrite(BinaryWriteable write)
145 byte[] data = new byte[1024];
146 for (int i=0; i<data.length; i++)
149 long startTime = System.currentTimeMillis();
150 for (int iter=0; iter<ITERATIONS; iter++)
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++)
159 for (int i=0; i<256; i++)
161 for (int i=0; i<256; i++)
162 write.writeShort((short)i);
166 long elapsedTime = System.currentTimeMillis() - startTime;
171 static long measureRead(BinaryReadable read)
175 byte[] data = new byte[1024];
177 long startTime = System.currentTimeMillis();
178 for (int iter=0; iter<ITERATIONS; iter++)
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);
195 long elapsedTime = System.currentTimeMillis() - startTime;