/* * JaamSim Discrete Event Simulation * Copyright (C) 2012 Ausenco Engineering Canada Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.jaamsim.MeshFiles; import static org.junit.Assert.assertTrue; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import org.junit.Test; public class TestDataBlocks { @Test public void testAddByteToBlock() throws Throwable { DataBlock block = new DataBlock("Blockity", 128); byte[] bytes = new byte[128]; for (int i = 0; i < 128; ++i) { bytes[i] = (byte)(i * 2); } for (int i = 0; i < 128; ++i) { block.writeByte(bytes[i]); } block.setReadPosition(0); for (int i = 0; i < 128; ++i) { byte val = block.readByte(); assertTrue(val == bytes[i]); } } @Test public void testAddDoubleToBlock() throws Throwable { DataBlock block = new DataBlock("Blockity", 128); double[] doubles = new double[16]; for (int i = 0; i < 16; ++i) { doubles[i] = i * 42.4; } for (int i = 0; i < 16; ++i) { block.writeDouble(doubles[i]); } block.setReadPosition(0); for (int i = 0; i < 16; ++i) { double val = block.readDouble(); assertTrue(val == doubles[i]); } } @Test public void testAddFloatToBlock() throws Throwable { DataBlock block = new DataBlock("Blockity", 128); float[] floats = new float[16]; for (int i = 0; i < 16; ++i) { floats[i] = i * 42.4f; } for (int i = 0; i < 16; ++i) { block.writeFloat(floats[i]); } block.setReadPosition(0); for (int i = 0; i < 16; ++i) { float val = block.readFloat(); assertTrue(val == floats[i]); } } @Test public void testAddIntToBlock() throws Throwable { DataBlock block = new DataBlock("Blockity", 128); int[] ints = new int[32]; for (int i = 0; i < 32; ++i) { ints[i] = i * 42; } for (int i = 0; i < 32; ++i) { block.writeInt(ints[i]); } block.setReadPosition(0); for (int i = 0; i < 32; ++i) { int val = block.readInt(); assertTrue(val == ints[i]); } } @Test public void testAddLongToBlock() throws Throwable { DataBlock block = new DataBlock("Blockity", 256); long[] longs= new long[32]; for (int i = 0; i < 32; ++i) { longs[i] = i * 42L; } for (int i = 0; i < 32; ++i) { block.writeLong(longs[i]); } block.setReadPosition(0); for (int i = 0; i < 32; ++i) { long val = block.readLong(); assertTrue(val == longs[i]); } } @Test public void testAddStringsToBlock() throws Throwable { DataBlock block = new DataBlock("Blockity", 256); String[] strings = new String[5]; strings[0] = new String("Foo"); strings[1] = new String("Bar?"); strings[2] = new String("Giggity!"); strings[3] = new String("I am a string!!!"); strings[4] = new String("Arglbargle"); for (int i = 0; i < 5; ++i) { block.writeString(strings[i]); } block.setReadPosition(0); for (int i = 0; i < 5; ++i) { String val = block.readString(); assertTrue(val.equals(strings[i])); } } @Test public void testSimpleWriteAndRead() throws Throwable { String blockName = "Blockity"; DataBlock block = new DataBlock(blockName, 32); for (int i = 0; i < 8; ++i) { block.writeInt(i * 42); } ByteArrayOutputStream out = new ByteArrayOutputStream(); BlockWriter.writeBlock(out, block); byte[] binaryBlock = out.toByteArray(); ByteArrayInputStream in = new ByteArrayInputStream(binaryBlock); DataBlock readBlock = BlockReader.readBlock(in); assertTrue(readBlock.getName().equals(blockName)); for (int i = 0; i < 8; ++i) { int val = readBlock.readInt(); assertTrue(val == i * 42); } } @Test public void testComplexWriteAndRead() throws Throwable { String blockName = "Blockity"; String child1Name = "Kiddy"; String child2Name = "Kiddy yet again"; String grandChildName = "Wee One"; DataBlock block = new DataBlock(blockName, 32); for (int i = 0; i < 8; ++i) { block.writeInt(i * 42); } DataBlock child1 = new DataBlock(child1Name, 256); for (int i = 0; i < 32; ++i) { child1.writeDouble(i * 3500); } DataBlock child2 = new DataBlock(child2Name, 256); child2.writeString("Fee"); child2.writeString("Fi"); child2.writeString("Fo"); child2.writeString("Fum"); DataBlock grandChild = new DataBlock(grandChildName, 128); for (int i = 0; i < 4; ++i) { grandChild.writeLong(i * 16000); grandChild.writeDouble(i * 16000); } child1.addChildBlock(grandChild); block.addChildBlock(child1); block.addChildBlock(child2); ByteArrayOutputStream out = new ByteArrayOutputStream(); BlockWriter.writeBlock(out, block); byte[] binaryBlock = out.toByteArray(); ByteArrayInputStream in = new ByteArrayInputStream(binaryBlock); DataBlock readBlock = BlockReader.readBlock(in); assertTrue(readBlock.getName().equals(blockName)); for (int i = 0; i < 8; ++i) { int val = readBlock.readInt(); assertTrue(val == i * 42); } assertTrue(readBlock.getChildren().size() == 2); DataBlock readChild1 = readBlock.getChildren().get(0); DataBlock readChild2 = readBlock.getChildren().get(1); assertTrue(readChild1.getChildren().size() == 1); DataBlock readGrandchild = readChild1.getChildren().get(0); assertTrue(readChild1.getName().equals(child1Name)); assertTrue(readChild2.getName().equals(child2Name)); assertTrue(readGrandchild.getName().equals(grandChildName)); for (int i = 0; i < 32; ++i) { assertTrue(readChild1.readDouble() == i * 3500); } assertTrue(readChild2.readString().equals("Fee")); assertTrue(readChild2.readString().equals("Fi")); assertTrue(readChild2.readString().equals("Fo")); assertTrue(readChild2.readString().equals("Fum")); for (int i = 0; i < 4; ++i) { assertTrue(grandChild.readLong() == i * 16000); assertTrue(grandChild.readDouble() == i * 16000); } } }