/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 tachyon.io; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import junit.framework.Assert; import org.junit.Test; public class WriterReaderTest { private int mDataLength = 122; private ByteOrder[] mOrders = { ByteOrder.nativeOrder(), ByteOrder.LITTLE_ENDIAN, ByteOrder.BIG_ENDIAN }; private void byteBufferReaderMatcher(ByteBufferReader reader, ByteOrder order) { reader.order(order); Assert.assertEquals((byte) -128, reader.get()); Assert.assertEquals((byte) 55, reader.get()); Assert.assertEquals((byte) 127, reader.get()); byte[] byteArr = new byte[5]; reader.get(byteArr); Assert.assertEquals((byte) -11, byteArr[0]); Assert.assertEquals((byte) 33, byteArr[1]); Assert.assertEquals((byte) -55, byteArr[2]); Assert.assertEquals((byte) 99, byteArr[3]); Assert.assertEquals((byte) -103, byteArr[4]); byte[] dst = new byte[5]; reader.get(dst, 1, 2); Assert.assertEquals((byte) 33, dst[1]); Assert.assertEquals((byte) -55, dst[2]); Assert.assertEquals('\u0000', reader.getChar()); Assert.assertEquals('\uffff', reader.getChar()); Assert.assertEquals('A', reader.getChar()); Assert.assertEquals('a', reader.getChar()); Assert.assertEquals(1.552, reader.getDouble()); Assert.assertEquals(-1.552, reader.getDouble()); Assert.assertEquals(5555000.5, reader.getDouble()); Assert.assertEquals(-5555000.5, reader.getDouble()); Assert.assertEquals((float) 1.552, reader.getFloat()); Assert.assertEquals((float) -1.552, reader.getFloat()); Assert.assertEquals((float) 5555.5, reader.getFloat()); Assert.assertEquals((float) -5555.5, reader.getFloat()); Assert.assertEquals(9999, reader.getInt()); Assert.assertEquals(-9999, reader.getInt()); Assert.assertEquals(2147483647, reader.getInt()); Assert.assertEquals(-2147483648, reader.getInt()); Assert.assertEquals(99999, reader.getLong()); Assert.assertEquals(-99999, reader.getLong()); Assert.assertEquals(9223372036854775807L, reader.getLong()); Assert.assertEquals(-9223372036854775808L, reader.getLong()); Assert.assertEquals((short) 99, reader.getShort()); Assert.assertEquals((short) -99, reader.getShort()); Assert.assertEquals((short) 32767, reader.getShort()); Assert.assertEquals((short) -32768, reader.getShort()); } private void generateByteBuffer(ByteBufferWriter writer, ByteOrder order) { writer.put((byte) -128); writer.put((byte) 55); writer.put((byte) 127); byte[] byteArr = new byte[5]; byteArr[0] = -11; byteArr[1] = 33; byteArr[2] = -55; byteArr[3] = 99; byteArr[4] = -103; writer.put(byteArr); writer.put(byteArr, 1, 2); writer.putChar('\u0000'); writer.putChar('\uffff'); writer.putChar('A'); writer.putChar('a'); writer.putDouble(1.552); writer.putDouble(-1.552); writer.putDouble(5555000.5); writer.putDouble(-5555000.5); writer.putFloat((float) 1.552); writer.putFloat((float) -1.552); writer.putFloat((float) 5555.5); writer.putFloat((float) -5555.5); writer.putInt(9999); writer.putInt(-9999); writer.putInt(2147483647); writer.putInt(-2147483648); writer.putLong(99999); writer.putLong(-99999); writer.putLong(9223372036854775807L); writer.putLong(-9223372036854775808L); writer.putShort((short) 99); writer.putShort((short) -99); writer.putShort((short) 32767); writer.putShort((short) -32768); } @Test public void javaWriterJavaReaderTest() throws IOException { ByteBuffer buf = ByteBuffer.allocate(mDataLength); for (ByteOrder order : mOrders) { buf.clear(); buf.order(order); ByteBufferWriter writer = new JavaByteBufferWriter(buf); generateByteBuffer(writer, order); ByteBufferReader reader = new JavaByteBufferReader(writer.getByteBuffer()); byteBufferReaderMatcher(reader, order); } buf = ByteBuffer.allocateDirect(mDataLength); for (ByteOrder order : mOrders) { buf.clear(); buf.order(order); ByteBufferWriter writer = new JavaByteBufferWriter(buf); generateByteBuffer(writer, order); ByteBufferReader reader = new JavaByteBufferReader(writer.getByteBuffer()); byteBufferReaderMatcher(reader, order); } } // @Test // public void javaWriterUnsafeDirectReaderTest() throws IOException { // ByteBuffer buf = ByteBuffer.allocateDirect(mDataLength); // // for (ByteOrder order : mOrders) { // if (order != ByteOrder.nativeOrder()) { // continue; // } // buf.clear(); // buf.order(order); // ByteBufferWriter writer = new JavaByteBufferWriter(buf); // generateByteBuffer(writer, order); // ByteBufferReader reader = new UnsafeDirectByteBufferReader(writer.getByteBuffer()); // byteBufferReaderMatcher(reader, order); // } // } // // @Test // public void javaWriterUnsafeHeapReaderTest() throws IOException { // ByteBuffer buf = ByteBuffer.allocate(mDataLength); // // for (ByteOrder order : mOrders) { // if (order != ByteOrder.nativeOrder()) { // continue; // } // buf.clear(); // buf.order(order); // ByteBufferWriter writer = new JavaByteBufferWriter(buf); // generateByteBuffer(writer, order); // ByteBufferReader reader = new UnsafeHeapByteBufferReader(writer.getByteBuffer()); // byteBufferReaderMatcher(reader, order); // } // } // // @Test // public void UnsafeDirectWriterJavaReaderTest() throws IOException { // ByteBuffer buf = ByteBuffer.allocateDirect(mDataLength); // // for (ByteOrder order : mOrders) { // if (order != ByteOrder.nativeOrder()) { // continue; // } // buf.clear(); // buf.order(order); // ByteBufferWriter writer = new UnsafeDirectByteBufferWriter(buf); // generateByteBuffer(writer, order); // ByteBufferReader reader = new JavaByteBufferReader(writer.getByteBuffer()); // byteBufferReaderMatcher(reader, order); // } // } // // @Test // public void UnsafeDirectWriterUnsafeDirectReaderTest() throws IOException { // ByteBuffer buf = ByteBuffer.allocateDirect(mDataLength); // // for (ByteOrder order : mOrders) { // if (order != ByteOrder.nativeOrder()) { // continue; // } // buf.clear(); // buf.order(order); // ByteBufferWriter writer = new UnsafeDirectByteBufferWriter(buf); // generateByteBuffer(writer, order); // ByteBufferReader reader = new UnsafeDirectByteBufferReader(writer.getByteBuffer()); // byteBufferReaderMatcher(reader, order); // } // } // // @Test // public void UnsafeHeapWriterJavaReaderTest() throws IOException { // ByteBuffer buf = ByteBuffer.allocate(mDataLength); // // for (ByteOrder order : mOrders) { // if (order != ByteOrder.nativeOrder()) { // continue; // } // buf.clear(); // buf.order(order); // ByteBufferWriter writer = new UnsafeHeapByteBufferWriter(buf); // generateByteBuffer(writer, order); // ByteBufferReader reader = new JavaByteBufferReader(writer.getByteBuffer()); // byteBufferReaderMatcher(reader, order); // } // } // // @Test // public void UnsafeHeapWriterUnsafeHeapReaderTest() throws IOException { // ByteBuffer buf = ByteBuffer.allocate(mDataLength); // // for (ByteOrder order : mOrders) { // if (order != ByteOrder.nativeOrder()) { // continue; // } // buf.clear(); // buf.order(order); // ByteBufferWriter writer = new UnsafeHeapByteBufferWriter(buf); // generateByteBuffer(writer, order); // ByteBufferReader reader = new UnsafeHeapByteBufferReader(writer.getByteBuffer()); // byteBufferReaderMatcher(reader, order); // } // } }