blob: a0b1068d9694c8fbe99fab7931b10e2df54fa4d5 [file] [log] [blame]
/**
* 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 org.apache.trevni;
import java.util.Random;
import java.io.ByteArrayOutputStream;
import org.junit.Assert;
import org.junit.Test;
public class TestIOBuffers {
private static final int COUNT = 1001;
@Test public void testEmpty() throws Exception {
OutputBuffer out = new OutputBuffer();
ByteArrayOutputStream temp = new ByteArrayOutputStream();
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
Assert.assertEquals(0, in.tell());
Assert.assertEquals(0, in.length());
}
@Test public void testZero() throws Exception {
Random random = TestUtil.createRandom();
OutputBuffer out = new OutputBuffer();
out.writeInt(0);
byte[] bytes = out.toByteArray();
Assert.assertEquals(1, bytes.length);
Assert.assertEquals(0, bytes[0]);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
Assert.assertEquals(0, in.readInt());
}
@Test public void testBoolean() throws Exception {
Random random = TestUtil.createRandom();
OutputBuffer out = new OutputBuffer();
for (int i = 0; i < COUNT; i++)
out.writeValue(random.nextBoolean(), ValueType.BOOLEAN);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
random = TestUtil.createRandom();
for (int i = 0; i < COUNT; i++)
Assert.assertEquals(random.nextBoolean(),
in.readValue(ValueType.BOOLEAN));
}
@Test public void testInt() throws Exception {
Random random = TestUtil.createRandom();
OutputBuffer out = new OutputBuffer();
for (int i = 0; i < COUNT; i++)
out.writeInt(random.nextInt());
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
random = TestUtil.createRandom();
for (int i = 0; i < COUNT; i++)
Assert.assertEquals(random.nextInt(), in.readInt());
}
@Test public void testLong() throws Exception {
Random random = TestUtil.createRandom();
OutputBuffer out = new OutputBuffer();
for (int i = 0; i < COUNT; i++)
out.writeLong(random.nextLong());
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
random = TestUtil.createRandom();
for (int i = 0; i < COUNT; i++)
Assert.assertEquals(random.nextLong(), in.readLong());
}
@Test public void testFixed32() throws Exception {
Random random = TestUtil.createRandom();
OutputBuffer out = new OutputBuffer();
for (int i = 0; i < COUNT; i++)
out.writeFixed32(random.nextInt());
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
random = TestUtil.createRandom();
for (int i = 0; i < COUNT; i++)
Assert.assertEquals(random.nextInt(), in.readFixed32());
}
@Test public void testFixed64() throws Exception {
Random random = TestUtil.createRandom();
OutputBuffer out = new OutputBuffer();
for (int i = 0; i < COUNT; i++)
out.writeFixed64(random.nextLong());
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
random = TestUtil.createRandom();
for (int i = 0; i < COUNT; i++)
Assert.assertEquals(random.nextLong(), in.readFixed64());
}
@Test public void testFloat() throws Exception {
Random random = TestUtil.createRandom();
OutputBuffer out = new OutputBuffer();
for (int i = 0; i < COUNT; i++)
out.writeFloat(random.nextFloat());
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
random = TestUtil.createRandom();
for (int i = 0; i < COUNT; i++)
Assert.assertEquals(random.nextFloat(), in.readFloat(), 0);
}
@Test public void testDouble() throws Exception {
OutputBuffer out = new OutputBuffer();
for (int i = 0; i < COUNT; i++)
out.writeDouble(Double.MIN_VALUE);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
for (int i = 0; i < COUNT; i++)
Assert.assertEquals(Double.MIN_VALUE, in.readDouble(), 0);
}
@Test public void testBytes() throws Exception {
Random random = TestUtil.createRandom();
OutputBuffer out = new OutputBuffer();
for (int i = 0; i < COUNT; i++)
out.writeBytes(TestUtil.randomBytes(random));
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
random = TestUtil.createRandom();
for (int i = 0; i < COUNT; i++)
Assert.assertEquals(TestUtil.randomBytes(random), in.readBytes(null));
}
@Test public void testString() throws Exception {
Random random = TestUtil.createRandom();
OutputBuffer out = new OutputBuffer();
for (int i = 0; i < COUNT; i++)
out.writeString(TestUtil.randomString(random));
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
random = TestUtil.createRandom();
for (int i = 0; i < COUNT; i++)
Assert.assertEquals(TestUtil.randomString(random), in.readString());
}
@Test public void testSkipNull() throws Exception {
long sentinel = Long.MAX_VALUE;
OutputBuffer out = new OutputBuffer();
out.writeValue(null, ValueType.NULL);
out.writeLong(sentinel);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
in.skipValue(ValueType.NULL);
Assert.assertEquals(sentinel, in.readLong());
}
@Test public void testSkipBoolean() throws Exception {
long sentinel = Long.MAX_VALUE;
OutputBuffer out = new OutputBuffer();
out.writeValue(false, ValueType.BOOLEAN);
out.writeLong(sentinel);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
in.skipValue(ValueType.BOOLEAN);
Assert.assertEquals(sentinel, in.readLong());
}
@Test public void testSkipInt() throws Exception {
long sentinel = Long.MAX_VALUE;
OutputBuffer out = new OutputBuffer();
out.writeValue(Integer.MAX_VALUE, ValueType.INT);
out.writeLong(sentinel);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
in.skipValue(ValueType.INT);
Assert.assertEquals(sentinel, in.readLong());
}
@Test public void testSkipLong() throws Exception {
long sentinel = Long.MAX_VALUE;
OutputBuffer out = new OutputBuffer();
out.writeValue(Long.MAX_VALUE, ValueType.LONG);
out.writeLong(sentinel);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
in.skipValue(ValueType.LONG);
Assert.assertEquals(sentinel, in.readLong());
}
@Test public void testSkipFixed32() throws Exception {
long sentinel = Long.MAX_VALUE;
OutputBuffer out = new OutputBuffer();
out.writeValue(Integer.MAX_VALUE, ValueType.FIXED32);
out.writeLong(sentinel);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
in.skipValue(ValueType.LONG);
Assert.assertEquals(sentinel, in.readLong());
}
@Test public void testSkipFixed64() throws Exception {
long sentinel = Long.MAX_VALUE;
OutputBuffer out = new OutputBuffer();
out.writeValue(Long.MAX_VALUE, ValueType.FIXED64);
out.writeLong(sentinel);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
in.skipValue(ValueType.LONG);
Assert.assertEquals(sentinel, in.readLong());
}
@Test public void testSkipFloat() throws Exception {
long sentinel = Long.MAX_VALUE;
OutputBuffer out = new OutputBuffer();
out.writeValue(Float.MAX_VALUE, ValueType.FLOAT);
out.writeLong(sentinel);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
in.skipValue(ValueType.FLOAT);
Assert.assertEquals(sentinel, in.readLong());
}
@Test public void testSkipDouble() throws Exception {
long sentinel = Long.MAX_VALUE;
OutputBuffer out = new OutputBuffer();
out.writeValue(Double.MAX_VALUE, ValueType.DOUBLE);
out.writeLong(sentinel);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
in.skipValue(ValueType.DOUBLE);
Assert.assertEquals(sentinel, in.readLong());
}
@Test public void testSkipString() throws Exception {
long sentinel = Long.MAX_VALUE;
OutputBuffer out = new OutputBuffer();
out.writeValue("trevni", ValueType.STRING);
out.writeLong(sentinel);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
in.skipValue(ValueType.STRING);
Assert.assertEquals(sentinel, in.readLong());
}
@Test public void testSkipBytes() throws Exception {
long sentinel = Long.MAX_VALUE;
OutputBuffer out = new OutputBuffer();
out.writeValue("trevni".getBytes(), ValueType.BYTES);
out.writeLong(sentinel);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
in.skipValue(ValueType.BYTES);
Assert.assertEquals(sentinel, in.readLong());
}
@Test public void testInitPos() throws Exception {
long sentinel = Long.MAX_VALUE;
OutputBuffer out = new OutputBuffer();
out.writeValue(Integer.MAX_VALUE, ValueType.INT);
out.writeLong(sentinel);
InputBuffer in = new InputBuffer(new InputBytes(out.toByteArray()));
in.readInt();
long pos = in.tell();
in = new InputBuffer(new InputBytes(out.toByteArray()), pos);
Assert.assertEquals(sentinel, in.readLong());
}
}