/**
* Copyright 2014 Alexey Ragozin
*
* 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 org.gridkit.jvmtool.stacktrace;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Random;
import java.util.TimeZone;
import org.junit.Assert;
import org.junit.Test;
public class StackTreeCoderTest {
@Test
public void test() {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.set(2014, 01, 01);
long time = cal.getTimeInMillis();
System.out.println(time);
}
// @Test
public void verifyVarIntEncoding() throws IOException {
int n = 0;
int j = 0;
ByteArrayOutputStream bos;
DataOutputStream dos;
bos = new ByteArrayOutputStream(4 << 20);
dos = new DataOutputStream(bos);
for(int i = 0; i != (1 << 30) + 1000000; ++i) {
StackTraceCodec.writeVarInt(dos, i);
++n;
if (n == 1000000) {
System.out.println(i);
n = 0;
byte[] buf = bos.toByteArray();
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(buf));
for(;j <= i; ++j) {
int x = StackTraceCodec.readVarInt(dis);
Assert.assertEquals(j, x);
}
bos = new ByteArrayOutputStream(4 << 20);
dos = new DataOutputStream(bos);
}
}
}
@Test
public void verifyVarLongBoundaries() throws IOException {
ByteArrayOutputStream bos;
DataOutputStream dos;
bos = new ByteArrayOutputStream(4 << 20);
dos = new DataOutputStream(bos);
StackTraceCodec.writeVarLong(dos, 0);
StackTraceCodec.writeVarLong(dos, 1);
StackTraceCodec.writeVarLong(dos, -1);
StackTraceCodec.writeVarLong(dos, Long.MAX_VALUE);
StackTraceCodec.writeVarLong(dos, Long.MIN_VALUE);
StackTraceCodec.writeVarLong(dos, (0xFFFFFFFFl & Integer.MAX_VALUE));
StackTraceCodec.writeVarLong(dos, (0xFFFFFFFFl & Integer.MIN_VALUE));
byte[] buf = bos.toByteArray();
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(buf));
Assert.assertEquals(0, StackTraceCodec.readVarLong(dis));
Assert.assertEquals(1, StackTraceCodec.readVarLong(dis));
Assert.assertEquals(-1, StackTraceCodec.readVarLong(dis));
Assert.assertEquals(Long.MAX_VALUE, StackTraceCodec.readVarLong(dis));
Assert.assertEquals(Long.MIN_VALUE, StackTraceCodec.readVarLong(dis));
Assert.assertEquals((0xFFFFFFFFl & Integer.MAX_VALUE), StackTraceCodec.readVarLong(dis));
Assert.assertEquals((0xFFFFFFFFl & Integer.MIN_VALUE), StackTraceCodec.readVarLong(dis));
}
// @Test
public void verifyVarLongEncoding() throws IOException {
Random rnd = new Random(1);
int n = 0;
int j = 0;
ByteArrayOutputStream bos;
DataOutputStream dos;
bos = new ByteArrayOutputStream(4 << 20);
dos = new DataOutputStream(bos);
long[] lbuf = new long[1 << 20];
for(int i = 0; i != 1 << 30 ; ++i) {
lbuf[n] = rnd.nextLong();
StackTraceCodec.writeVarLong(dos, lbuf[n]);
++n;
if (n == lbuf.length) {
// System.out.println(i);
n = 0;
byte[] buf = bos.toByteArray();
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(buf));
for(j = 0;j != lbuf.length; ++j) {
long x = StackTraceCodec.readVarLong(dis);
Assert.assertEquals(lbuf[j], x);
}
bos = new ByteArrayOutputStream(4 << 20);
dos = new DataOutputStream(bos);
}
}
}
}