package edu.berkeley.cs.succinct.buffers; import edu.berkeley.cs.succinct.StorageMode; import edu.berkeley.cs.succinct.SuccinctIndexedFile; import edu.berkeley.cs.succinct.SuccinctTable; import edu.berkeley.cs.succinct.SuccinctTableTest; import edu.berkeley.cs.succinct.util.Source; import java.io.*; import java.util.ArrayList; import java.util.Arrays; public class SuccinctTableBufferTest extends SuccinctTableTest { byte[] data; private String testFileRaw = this.getClass().getResource("/raw.dat").getFile(); private String testFileSuccinct = this.getClass().getResource("/raw.dat").getFile() + ".idx.succinct"; private String testFileSuccinctMin = this.getClass().getResource("/raw.dat").getFile() + ".idx.min.succinct"; /** * Set up test. * * @throws Exception */ public void setUp() throws Exception { super.setUp(); queryTypes = new SuccinctTable.QueryType[2]; queries = new byte[2][][]; queryTypes[0] = SuccinctTable.QueryType.RangeSearch; queries[0] = new byte[][] {"/*".getBytes(), "//".getBytes()}; queryTypes[1] = SuccinctTable.QueryType.Search; queries[1] = new byte[][] {"Build".getBytes()}; File inputFile = new File(testFileRaw); data = new byte[(int) inputFile.length()]; DataInputStream dis = new DataInputStream(new FileInputStream(inputFile)); dis.readFully(data); fileData = new Source() { @Override public int length() { return data.length; } @Override public int get(int i) { return data[i]; } }; ArrayList<Integer> positions = new ArrayList<>(); positions.add(0); for (int i = 0; i < fileData.length(); i++) { if (fileData.get(i) == '\n') { positions.add(i + 1); } } offsets = new int[positions.size()]; for (int i = 0; i < offsets.length; i++) { offsets[i] = positions.get(i); } sTable = new SuccinctTableBuffer(data, offsets); } /** * Test method: void readObject(ObjectInputStream ois) * Test method: void writeObject(ObjectOutputStream oos) * * @throws Exception */ public void testSerializeDeserialize() throws Exception { // Serialize data FileOutputStream fOut = new FileOutputStream(testFileSuccinct); ObjectOutputStream oos = new ObjectOutputStream(fOut); oos.writeObject(sTable); oos.close(); // Deserialize data FileInputStream fIn = new FileInputStream(testFileSuccinct); ObjectInputStream ois = new ObjectInputStream(fIn); SuccinctIndexedFile sIFileRead = (SuccinctIndexedFileBuffer) ois.readObject(); ois.close(); assertNotNull(sIFileRead); assertEquals(sTable.getNumRecords(), sIFileRead.getNumRecords()); for (int i = 0; i < sTable.getNumRecords(); i++) { assertTrue(Arrays.equals(sTable.getRecordBytes(i), sIFileRead.getRecordBytes(i))); } } /** * Test method: void writeToFile(String path) * Test method: void memoryMap(String path) * * @throws Exception */ public void testMemoryMap() throws Exception { ((SuccinctTableBuffer) sTable).writeToFile(testFileSuccinctMin); SuccinctIndexedFile sIFileRead = new SuccinctIndexedFileBuffer(testFileSuccinctMin, StorageMode.MEMORY_MAPPED); assertNotNull(sIFileRead); assertEquals(sTable.getNumRecords(), sIFileRead.getNumRecords()); for (int i = 0; i < sTable.getNumRecords(); i++) { assertTrue(Arrays.equals(sTable.getRecordBytes(i), sIFileRead.getRecordBytes(i))); } } /** * Test method: void writeToFile(String path) * Test method: void readFromFile(String path) * * @throws Exception */ public void testReadFromFile() throws Exception { ((SuccinctTableBuffer) sTable).writeToFile(testFileSuccinctMin); SuccinctIndexedFile sIFileRead = new SuccinctIndexedFileBuffer(testFileSuccinctMin, StorageMode.MEMORY_ONLY); assertNotNull(sIFileRead); assertEquals(sTable.getNumRecords(), sIFileRead.getNumRecords()); for (int i = 0; i < sTable.getNumRecords(); i++) { assertTrue(Arrays.equals(sTable.getRecordBytes(i), sIFileRead.getRecordBytes(i))); } } }