/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002,2008 Oracle. All rights reserved. * * $Id: TupleFormatTest.java,v 12.9 2008/02/07 17:12:30 mark Exp $ */ package com.sleepycat.bind.tuple.test; import java.util.Arrays; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import com.sleepycat.bind.tuple.TupleBinding; import com.sleepycat.bind.tuple.TupleInput; import com.sleepycat.bind.tuple.TupleOutput; import com.sleepycat.db.DatabaseEntry; import com.sleepycat.util.test.SharedTestUtils; /** * @author Mark Hayes */ public class TupleFormatTest extends TestCase { private TupleInput in; private TupleOutput out; private DatabaseEntry buffer; public static void main(String[] args) throws Exception { junit.framework.TestResult tr = junit.textui.TestRunner.run(suite()); if (tr.errorCount() > 0 || tr.failureCount() > 0) { System.exit(1); } else { System.exit(0); } } public static Test suite() throws Exception { TestSuite suite = new TestSuite(TupleFormatTest.class); return suite; } public TupleFormatTest(String name) { super(name); } public void setUp() { SharedTestUtils.printTestName("TupleFormatTest." + getName()); buffer = new DatabaseEntry(); out = new TupleOutput(); } public void tearDown() { /* Ensure that GC can cleanup. */ in = null; out = null; buffer = null; } private void copyOutputToInput() { TupleBinding.outputToEntry(out, buffer); assertEquals(out.size(), buffer.getSize()); in = TupleBinding.entryToInput(buffer); assertEquals(in.available(), buffer.getSize()); assertEquals(in.getBufferLength(), buffer.getSize()); } private void stringTest(String val) { out.reset(); out.writeString(val); assertEquals(val.length() + 1, out.size()); // assume 1-byte chars copyOutputToInput(); assertEquals(val, in.readString()); assertEquals(0, in.available()); } public void testString() { stringTest(""); stringTest("a"); stringTest("abc"); out.reset(); out.writeString("abc"); out.writeString("defg"); assertEquals(9, out.size()); copyOutputToInput(); assertEquals("abc", in.readString()); assertEquals("defg", in.readString()); assertEquals(0, in.available()); out.reset(); out.writeString("abc"); out.writeString("defg"); out.writeString("hijkl"); assertEquals(15, out.size()); copyOutputToInput(); assertEquals("abc", in.readString()); assertEquals("defg", in.readString()); assertEquals("hijkl", in.readString()); assertEquals(0, in.available()); } private void fixedStringTest(char[] val) { out.reset(); out.writeString(val); assertEquals(val.length, out.size()); // assume 1 byte chars copyOutputToInput(); char[] val2 = new char[val.length]; in.readString(val2); assertTrue(Arrays.equals(val, val2)); assertEquals(0, in.available()); in.reset(); String val3 = in.readString(val.length); assertTrue(Arrays.equals(val, val3.toCharArray())); assertEquals(0, in.available()); } public void testFixedString() { fixedStringTest(new char[0]); fixedStringTest(new char[] {'a'}); fixedStringTest(new char[] {'a', 'b', 'c'}); out.reset(); out.writeString(new char[] {'a', 'b', 'c'}); out.writeString(new char[] {'d', 'e', 'f', 'g'}); assertEquals(7, out.size()); copyOutputToInput(); assertEquals("abc", in.readString(3)); assertEquals("defg", in.readString(4)); assertEquals(0, in.available()); out.reset(); out.writeString(new char[] {'a', 'b', 'c'}); out.writeString(new char[] {'d', 'e', 'f', 'g'}); out.writeString(new char[] {'h', 'i', 'j', 'k', 'l'}); assertEquals(12, out.size()); copyOutputToInput(); assertEquals("abc", in.readString(3)); assertEquals("defg", in.readString(4)); assertEquals("hijkl", in.readString(5)); assertEquals(0, in.available()); } public void testNullString() { out.reset(); out.writeString((String) null); assertEquals(2, out.size()); copyOutputToInput(); assertEquals(null, in.readString()); assertEquals(0, in.available()); out.reset(); out.writeString((String) null); out.writeString("x"); assertEquals(4, out.size()); copyOutputToInput(); assertEquals(null, in.readString()); assertEquals(2, in.available()); assertEquals("x", in.readString()); assertEquals(0, in.available()); out.reset(); out.writeString("x"); out.writeString((String) null); assertEquals(4, out.size()); copyOutputToInput(); assertEquals("x", in.readString()); assertEquals(2, in.available()); assertEquals(null, in.readString()); assertEquals(0, in.available()); out.reset(); out.writeString((String) null); out.writeInt(123); assertEquals(6, out.size()); copyOutputToInput(); assertEquals(null, in.readString()); assertEquals(4, in.available()); assertEquals(123, in.readInt()); assertEquals(0, in.available()); out.reset(); out.writeInt(123); out.writeString((String) null); assertEquals(6, out.size()); copyOutputToInput(); assertEquals(123, in.readInt()); assertEquals(2, in.available()); assertEquals(null, in.readString()); assertEquals(0, in.available()); } private void charsTest(char[] val) { for (int mode = 0; mode < 2; mode += 1) { out.reset(); switch (mode) { case 0: out.writeChars(val); break; case 1: out.writeChars(new String(val)); break; default: throw new IllegalStateException(); } assertEquals(val.length * 2, out.size()); copyOutputToInput(); char[] val2 = new char[val.length]; in.readChars(val2); assertTrue(Arrays.equals(val, val2)); assertEquals(0, in.available()); in.reset(); String val3 = in.readChars(val.length); assertTrue(Arrays.equals(val, val3.toCharArray())); assertEquals(0, in.available()); } } public void testChars() { charsTest(new char[0]); charsTest(new char[] {'a'}); charsTest(new char[] {'a', 'b', 'c'}); out.reset(); out.writeChars("abc"); out.writeChars("defg"); assertEquals(7 * 2, out.size()); copyOutputToInput(); assertEquals("abc", in.readChars(3)); assertEquals("defg", in.readChars(4)); assertEquals(0, in.available()); out.reset(); out.writeChars("abc"); out.writeChars("defg"); out.writeChars("hijkl"); assertEquals(12 * 2, out.size()); copyOutputToInput(); assertEquals("abc", in.readChars(3)); assertEquals("defg", in.readChars(4)); assertEquals("hijkl", in.readChars(5)); assertEquals(0, in.available()); } private void bytesTest(char[] val) { char[] valBytes = new char[val.length]; for (int i = 0; i < val.length; i += 1) valBytes[i] = (char) (val[i] & 0xFF); for (int mode = 0; mode < 2; mode += 1) { out.reset(); switch (mode) { case 0: out.writeBytes(val); break; case 1: out.writeBytes(new String(val)); break; default: throw new IllegalStateException(); } assertEquals(val.length, out.size()); copyOutputToInput(); char[] val2 = new char[val.length]; in.readBytes(val2); assertTrue(Arrays.equals(valBytes, val2)); assertEquals(0, in.available()); in.reset(); String val3 = in.readBytes(val.length); assertTrue(Arrays.equals(valBytes, val3.toCharArray())); assertEquals(0, in.available()); } } public void testBytes() { bytesTest(new char[0]); bytesTest(new char[] {'a'}); bytesTest(new char[] {'a', 'b', 'c'}); bytesTest(new char[] {0x7F00, 0x7FFF, 0xFF00, 0xFFFF}); out.reset(); out.writeBytes("abc"); out.writeBytes("defg"); assertEquals(7, out.size()); copyOutputToInput(); assertEquals("abc", in.readBytes(3)); assertEquals("defg", in.readBytes(4)); assertEquals(0, in.available()); out.reset(); out.writeBytes("abc"); out.writeBytes("defg"); out.writeBytes("hijkl"); assertEquals(12, out.size()); copyOutputToInput(); assertEquals("abc", in.readBytes(3)); assertEquals("defg", in.readBytes(4)); assertEquals("hijkl", in.readBytes(5)); assertEquals(0, in.available()); } private void booleanTest(boolean val) { out.reset(); out.writeBoolean(val); assertEquals(1, out.size()); copyOutputToInput(); assertEquals(val, in.readBoolean()); assertEquals(0, in.available()); } public void testBoolean() { booleanTest(true); booleanTest(false); out.reset(); out.writeBoolean(true); out.writeBoolean(false); assertEquals(2, out.size()); copyOutputToInput(); assertEquals(true, in.readBoolean()); assertEquals(false, in.readBoolean()); assertEquals(0, in.available()); out.reset(); out.writeBoolean(true); out.writeBoolean(false); out.writeBoolean(true); assertEquals(3, out.size()); copyOutputToInput(); assertEquals(true, in.readBoolean()); assertEquals(false, in.readBoolean()); assertEquals(true, in.readBoolean()); assertEquals(0, in.available()); } private void unsignedByteTest(int val) { unsignedByteTest(val, val); } private void unsignedByteTest(int val, int expected) { out.reset(); out.writeUnsignedByte(val); assertEquals(1, out.size()); copyOutputToInput(); assertEquals(expected, in.readUnsignedByte()); } public void testUnsignedByte() { unsignedByteTest(0); unsignedByteTest(1); unsignedByteTest(254); unsignedByteTest(255); unsignedByteTest(256, 0); unsignedByteTest(-1, 255); unsignedByteTest(-2, 254); unsignedByteTest(-255, 1); out.reset(); out.writeUnsignedByte(0); out.writeUnsignedByte(1); out.writeUnsignedByte(255); assertEquals(3, out.size()); copyOutputToInput(); assertEquals(0, in.readUnsignedByte()); assertEquals(1, in.readUnsignedByte()); assertEquals(255, in.readUnsignedByte()); assertEquals(0, in.available()); } private void unsignedShortTest(int val) { unsignedShortTest(val, val); } private void unsignedShortTest(int val, int expected) { out.reset(); out.writeUnsignedShort(val); assertEquals(2, out.size()); copyOutputToInput(); assertEquals(expected, in.readUnsignedShort()); } public void testUnsignedShort() { unsignedShortTest(0); unsignedShortTest(1); unsignedShortTest(255); unsignedShortTest(256); unsignedShortTest(257); unsignedShortTest(Short.MAX_VALUE - 1); unsignedShortTest(Short.MAX_VALUE); unsignedShortTest(Short.MAX_VALUE + 1); unsignedShortTest(0xFFFF - 1); unsignedShortTest(0xFFFF); unsignedShortTest(0xFFFF + 1, 0); unsignedShortTest(0x7FFF0000, 0); unsignedShortTest(0xFFFF0000, 0); unsignedShortTest(-1, 0xFFFF); unsignedShortTest(-2, 0xFFFF - 1); unsignedShortTest(-0xFFFF, 1); out.reset(); out.writeUnsignedShort(0); out.writeUnsignedShort(1); out.writeUnsignedShort(0xFFFF); assertEquals(6, out.size()); copyOutputToInput(); assertEquals(0, in.readUnsignedShort()); assertEquals(1, in.readUnsignedShort()); assertEquals(0xFFFF, in.readUnsignedShort()); assertEquals(0, in.available()); } private void unsignedIntTest(long val) { unsignedIntTest(val, val); } private void unsignedIntTest(long val, long expected) { out.reset(); out.writeUnsignedInt(val); assertEquals(4, out.size()); copyOutputToInput(); assertEquals(expected, in.readUnsignedInt()); } public void testUnsignedInt() { unsignedIntTest(0L); unsignedIntTest(1L); unsignedIntTest(255L); unsignedIntTest(256L); unsignedIntTest(257L); unsignedIntTest(Short.MAX_VALUE - 1L); unsignedIntTest(Short.MAX_VALUE); unsignedIntTest(Short.MAX_VALUE + 1L); unsignedIntTest(Integer.MAX_VALUE - 1L); unsignedIntTest(Integer.MAX_VALUE); unsignedIntTest(Integer.MAX_VALUE + 1L); unsignedIntTest(0xFFFFFFFFL - 1L); unsignedIntTest(0xFFFFFFFFL); unsignedIntTest(0xFFFFFFFFL + 1L, 0L); unsignedIntTest(0x7FFFFFFF00000000L, 0L); unsignedIntTest(0xFFFFFFFF00000000L, 0L); unsignedIntTest(-1, 0xFFFFFFFFL); unsignedIntTest(-2, 0xFFFFFFFFL - 1L); unsignedIntTest(-0xFFFFFFFFL, 1L); out.reset(); out.writeUnsignedInt(0L); out.writeUnsignedInt(1L); out.writeUnsignedInt(0xFFFFFFFFL); assertEquals(12, out.size()); copyOutputToInput(); assertEquals(0L, in.readUnsignedInt()); assertEquals(1L, in.readUnsignedInt()); assertEquals(0xFFFFFFFFL, in.readUnsignedInt()); assertEquals(0L, in.available()); } private void byteTest(int val) { out.reset(); out.writeByte(val); assertEquals(1, out.size()); copyOutputToInput(); assertEquals((byte) val, in.readByte()); } public void testByte() { byteTest(0); byteTest(1); byteTest(-1); byteTest(Byte.MAX_VALUE - 1); byteTest(Byte.MAX_VALUE); byteTest(Byte.MAX_VALUE + 1); byteTest(Byte.MIN_VALUE + 1); byteTest(Byte.MIN_VALUE); byteTest(Byte.MIN_VALUE - 1); byteTest(0x7F); byteTest(0xFF); byteTest(0x7FFF); byteTest(0xFFFF); byteTest(0x7FFFFFFF); byteTest(0xFFFFFFFF); out.reset(); out.writeByte(0); out.writeByte(1); out.writeByte(-1); assertEquals(3, out.size()); copyOutputToInput(); assertEquals(0, in.readByte()); assertEquals(1, in.readByte()); assertEquals(-1, in.readByte()); assertEquals(0, in.available()); } private void shortTest(int val) { out.reset(); out.writeShort(val); assertEquals(2, out.size()); copyOutputToInput(); assertEquals((short) val, in.readShort()); } public void testShort() { shortTest(0); shortTest(1); shortTest(-1); shortTest(Short.MAX_VALUE - 1); shortTest(Short.MAX_VALUE); shortTest(Short.MAX_VALUE + 1); shortTest(Short.MIN_VALUE + 1); shortTest(Short.MIN_VALUE); shortTest(Short.MIN_VALUE - 1); shortTest(0x7F); shortTest(0xFF); shortTest(0x7FFF); shortTest(0xFFFF); shortTest(0x7FFFFFFF); shortTest(0xFFFFFFFF); out.reset(); out.writeShort(0); out.writeShort(1); out.writeShort(-1); assertEquals(3 * 2, out.size()); copyOutputToInput(); assertEquals(0, in.readShort()); assertEquals(1, in.readShort()); assertEquals(-1, in.readShort()); assertEquals(0, in.available()); } private void intTest(int val) { out.reset(); out.writeInt(val); assertEquals(4, out.size()); copyOutputToInput(); assertEquals((int) val, in.readInt()); } public void testInt() { intTest(0); intTest(1); intTest(-1); intTest(Integer.MAX_VALUE - 1); intTest(Integer.MAX_VALUE); intTest(Integer.MAX_VALUE + 1); intTest(Integer.MIN_VALUE + 1); intTest(Integer.MIN_VALUE); intTest(Integer.MIN_VALUE - 1); intTest(0x7F); intTest(0xFF); intTest(0x7FFF); intTest(0xFFFF); intTest(0x7FFFFFFF); intTest(0xFFFFFFFF); out.reset(); out.writeInt(0); out.writeInt(1); out.writeInt(-1); assertEquals(3 * 4, out.size()); copyOutputToInput(); assertEquals(0, in.readInt()); assertEquals(1, in.readInt()); assertEquals(-1, in.readInt()); assertEquals(0, in.available()); } private void longTest(long val) { out.reset(); out.writeLong(val); assertEquals(8, out.size()); copyOutputToInput(); assertEquals((long) val, in.readLong()); } public void testLong() { longTest(0); longTest(1); longTest(-1); longTest(Long.MAX_VALUE - 1); longTest(Long.MAX_VALUE); longTest(Long.MAX_VALUE + 1); longTest(Long.MIN_VALUE + 1); longTest(Long.MIN_VALUE); longTest(Long.MIN_VALUE - 1); longTest(0x7F); longTest(0xFF); longTest(0x7FFF); longTest(0xFFFF); longTest(0x7FFFFFFF); longTest(0xFFFFFFFF); longTest(0x7FFFFFFFFFFFFFFFL); longTest(0xFFFFFFFFFFFFFFFFL); out.reset(); out.writeLong(0); out.writeLong(1); out.writeLong(-1); assertEquals(3 * 8, out.size()); copyOutputToInput(); assertEquals(0, in.readLong()); assertEquals(1, in.readLong()); assertEquals(-1, in.readLong()); assertEquals(0, in.available()); } private void floatTest(double val) { out.reset(); out.writeFloat((float) val); assertEquals(4, out.size()); copyOutputToInput(); if (Double.isNaN(val)) { assertTrue(Float.isNaN(in.readFloat())); } else { assertEquals((float) val, in.readFloat(), 0); } } public void testFloat() { floatTest(0); floatTest(1); floatTest(-1); floatTest(1.0); floatTest(0.1); floatTest(-1.0); floatTest(-0.1); floatTest(Float.NaN); floatTest(Float.NEGATIVE_INFINITY); floatTest(Float.POSITIVE_INFINITY); floatTest(Short.MAX_VALUE); floatTest(Short.MIN_VALUE); floatTest(Integer.MAX_VALUE); floatTest(Integer.MIN_VALUE); floatTest(Long.MAX_VALUE); floatTest(Long.MIN_VALUE); floatTest(Float.MAX_VALUE); floatTest(Float.MAX_VALUE + 1); floatTest(Float.MIN_VALUE + 1); floatTest(Float.MIN_VALUE); floatTest(Float.MIN_VALUE - 1); floatTest(0x7F); floatTest(0xFF); floatTest(0x7FFF); floatTest(0xFFFF); floatTest(0x7FFFFFFF); floatTest(0xFFFFFFFF); floatTest(0x7FFFFFFFFFFFFFFFL); floatTest(0xFFFFFFFFFFFFFFFFL); out.reset(); out.writeFloat(0); out.writeFloat(1); out.writeFloat(-1); assertEquals(3 * 4, out.size()); copyOutputToInput(); assertEquals(0, in.readFloat(), 0); assertEquals(1, in.readFloat(), 0); assertEquals(-1, in.readFloat(), 0); assertEquals(0, in.available(), 0); } private void doubleTest(double val) { out.reset(); out.writeDouble((double) val); assertEquals(8, out.size()); copyOutputToInput(); if (Double.isNaN(val)) { assertTrue(Double.isNaN(in.readDouble())); } else { assertEquals((double) val, in.readDouble(), 0); } } public void testDouble() { doubleTest(0); doubleTest(1); doubleTest(-1); doubleTest(1.0); doubleTest(0.1); doubleTest(-1.0); doubleTest(-0.1); doubleTest(Double.NaN); doubleTest(Double.NEGATIVE_INFINITY); doubleTest(Double.POSITIVE_INFINITY); doubleTest(Short.MAX_VALUE); doubleTest(Short.MIN_VALUE); doubleTest(Integer.MAX_VALUE); doubleTest(Integer.MIN_VALUE); doubleTest(Long.MAX_VALUE); doubleTest(Long.MIN_VALUE); doubleTest(Float.MAX_VALUE); doubleTest(Float.MIN_VALUE); doubleTest(Double.MAX_VALUE - 1); doubleTest(Double.MAX_VALUE); doubleTest(Double.MAX_VALUE + 1); doubleTest(Double.MIN_VALUE + 1); doubleTest(Double.MIN_VALUE); doubleTest(Double.MIN_VALUE - 1); doubleTest(0x7F); doubleTest(0xFF); doubleTest(0x7FFF); doubleTest(0xFFFF); doubleTest(0x7FFFFFFF); doubleTest(0xFFFFFFFF); doubleTest(0x7FFFFFFFFFFFFFFFL); doubleTest(0xFFFFFFFFFFFFFFFFL); out.reset(); out.writeDouble(0); out.writeDouble(1); out.writeDouble(-1); assertEquals(3 * 8, out.size()); copyOutputToInput(); assertEquals(0, in.readDouble(), 0); assertEquals(1, in.readDouble(), 0); assertEquals(-1, in.readDouble(), 0); assertEquals(0, in.available(), 0); } private void sortedFloatTest(double val) { out.reset(); out.writeSortedFloat((float) val); assertEquals(4, out.size()); copyOutputToInput(); if (Double.isNaN(val)) { assertTrue(Float.isNaN(in.readSortedFloat())); } else { assertEquals((float) val, in.readSortedFloat(), 0); } } public void testSortedFloat() { sortedFloatTest(0); sortedFloatTest(1); sortedFloatTest(-1); sortedFloatTest(1.0); sortedFloatTest(0.1); sortedFloatTest(-1.0); sortedFloatTest(-0.1); sortedFloatTest(Float.NaN); sortedFloatTest(Float.NEGATIVE_INFINITY); sortedFloatTest(Float.POSITIVE_INFINITY); sortedFloatTest(Short.MAX_VALUE); sortedFloatTest(Short.MIN_VALUE); sortedFloatTest(Integer.MAX_VALUE); sortedFloatTest(Integer.MIN_VALUE); sortedFloatTest(Long.MAX_VALUE); sortedFloatTest(Long.MIN_VALUE); sortedFloatTest(Float.MAX_VALUE); sortedFloatTest(Float.MAX_VALUE + 1); sortedFloatTest(Float.MIN_VALUE + 1); sortedFloatTest(Float.MIN_VALUE); sortedFloatTest(Float.MIN_VALUE - 1); sortedFloatTest(0x7F); sortedFloatTest(0xFF); sortedFloatTest(0x7FFF); sortedFloatTest(0xFFFF); sortedFloatTest(0x7FFFFFFF); sortedFloatTest(0xFFFFFFFF); sortedFloatTest(0x7FFFFFFFFFFFFFFFL); sortedFloatTest(0xFFFFFFFFFFFFFFFFL); out.reset(); out.writeSortedFloat(0); out.writeSortedFloat(1); out.writeSortedFloat(-1); assertEquals(3 * 4, out.size()); copyOutputToInput(); assertEquals(0, in.readSortedFloat(), 0); assertEquals(1, in.readSortedFloat(), 0); assertEquals(-1, in.readSortedFloat(), 0); assertEquals(0, in.available(), 0); } private void sortedDoubleTest(double val) { out.reset(); out.writeSortedDouble((double) val); assertEquals(8, out.size()); copyOutputToInput(); if (Double.isNaN(val)) { assertTrue(Double.isNaN(in.readSortedDouble())); } else { assertEquals((double) val, in.readSortedDouble(), 0); } } public void testSortedDouble() { sortedDoubleTest(0); sortedDoubleTest(1); sortedDoubleTest(-1); sortedDoubleTest(1.0); sortedDoubleTest(0.1); sortedDoubleTest(-1.0); sortedDoubleTest(-0.1); sortedDoubleTest(Double.NaN); sortedDoubleTest(Double.NEGATIVE_INFINITY); sortedDoubleTest(Double.POSITIVE_INFINITY); sortedDoubleTest(Short.MAX_VALUE); sortedDoubleTest(Short.MIN_VALUE); sortedDoubleTest(Integer.MAX_VALUE); sortedDoubleTest(Integer.MIN_VALUE); sortedDoubleTest(Long.MAX_VALUE); sortedDoubleTest(Long.MIN_VALUE); sortedDoubleTest(Float.MAX_VALUE); sortedDoubleTest(Float.MIN_VALUE); sortedDoubleTest(Double.MAX_VALUE - 1); sortedDoubleTest(Double.MAX_VALUE); sortedDoubleTest(Double.MAX_VALUE + 1); sortedDoubleTest(Double.MIN_VALUE + 1); sortedDoubleTest(Double.MIN_VALUE); sortedDoubleTest(Double.MIN_VALUE - 1); sortedDoubleTest(0x7F); sortedDoubleTest(0xFF); sortedDoubleTest(0x7FFF); sortedDoubleTest(0xFFFF); sortedDoubleTest(0x7FFFFFFF); sortedDoubleTest(0xFFFFFFFF); sortedDoubleTest(0x7FFFFFFFFFFFFFFFL); sortedDoubleTest(0xFFFFFFFFFFFFFFFFL); out.reset(); out.writeSortedDouble(0); out.writeSortedDouble(1); out.writeSortedDouble(-1); assertEquals(3 * 8, out.size()); copyOutputToInput(); assertEquals(0, in.readSortedDouble(), 0); assertEquals(1, in.readSortedDouble(), 0); assertEquals(-1, in.readSortedDouble(), 0); assertEquals(0, in.available(), 0); } private void packedIntTest(int val, int size) { out.reset(); out.writePackedInt(val); assertEquals(size, out.size()); copyOutputToInput(); assertEquals(size, in.getPackedIntByteLength()); assertEquals(val, in.readPackedInt()); } public void testPackedInt() { /* Exhaustive value testing is in PackedIntTest. */ packedIntTest(119, 1); packedIntTest(0xFFFF + 119, 3); packedIntTest(Integer.MAX_VALUE, 5); out.reset(); out.writePackedInt(119); out.writePackedInt(0xFFFF + 119); out.writePackedInt(Integer.MAX_VALUE); assertEquals(1 + 3 + 5, out.size()); copyOutputToInput(); assertEquals(119, in.readPackedInt(), 0); assertEquals(0xFFFF + 119, in.readPackedInt(), 0); assertEquals(Integer.MAX_VALUE, in.readPackedInt(), 0); assertEquals(0, in.available(), 0); } private void packedLongTest(long val, int size) { out.reset(); out.writePackedLong(val); assertEquals(size, out.size()); copyOutputToInput(); assertEquals(size, in.getPackedLongByteLength()); assertEquals(val, in.readPackedLong()); } public void testPackedLong() { /* Exhaustive value testing is in PackedIntTest. */ packedLongTest(119, 1); packedLongTest(0xFFFFFFFFL + 119, 5); packedLongTest(Long.MAX_VALUE, 9); out.reset(); out.writePackedLong(119); out.writePackedLong(0xFFFFFFFFL + 119); out.writePackedLong(Long.MAX_VALUE); assertEquals(1 + 5 + 9, out.size()); copyOutputToInput(); assertEquals(119, in.readPackedLong(), 0); assertEquals(0xFFFFFFFFL + 119, in.readPackedLong(), 0); assertEquals(Long.MAX_VALUE, in.readPackedLong(), 0); assertEquals(0, in.available(), 0); } }