2021-08-20 16:51:19 +02:00
|
|
|
/* Copyright (c) 2008-2020, Nathan Sweet
|
2019-03-25 23:05:51 +01:00
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
|
|
|
|
* conditions are met:
|
|
|
|
*
|
|
|
|
* - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
|
|
* - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
|
|
|
|
* disclaimer in the documentation and/or other materials provided with the distribution.
|
|
|
|
* - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived
|
|
|
|
* from this software without specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
|
|
|
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
|
|
|
* SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
|
2021-04-25 22:01:36 +02:00
|
|
|
package dorkboxTest.network.kryo
|
|
|
|
|
|
|
|
import com.esotericsoftware.kryo.Kryo
|
2021-08-20 16:51:19 +02:00
|
|
|
import com.esotericsoftware.kryo.io.*
|
|
|
|
import dorkboxTest.network.kryo.KryoAssert.assertDoubleEquals
|
|
|
|
import dorkboxTest.network.kryo.KryoAssert.assertFloatEquals
|
2021-04-25 22:01:36 +02:00
|
|
|
import org.junit.Assert
|
|
|
|
import org.junit.Test
|
2021-08-20 16:51:19 +02:00
|
|
|
import java.io.*
|
|
|
|
import java.nio.Buffer
|
|
|
|
import java.nio.ByteBuffer
|
2021-04-25 22:01:36 +02:00
|
|
|
import java.util.*
|
|
|
|
|
|
|
|
/** @author Nathan Sweet
|
|
|
|
*/
|
2021-08-20 16:51:19 +02:00
|
|
|
internal class InputOutputTest : KryoTestCase() {
|
2021-04-25 22:01:36 +02:00
|
|
|
@Test
|
|
|
|
fun testByteBufferInputEnd() {
|
2021-08-20 16:51:19 +02:00
|
|
|
val `in` = Input(ByteArrayInputStream(byteArrayOf(123, 0, 0, 0)))
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertFalse(`in`.end())
|
|
|
|
`in`.setPosition(4)
|
|
|
|
Assert.assertTrue(`in`.end())
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
2021-08-20 16:51:19 +02:00
|
|
|
fun testOutputStream() {
|
|
|
|
val buffer = ByteArrayOutputStream()
|
|
|
|
val output = Output(buffer, 2)
|
2021-04-25 22:01:36 +02:00
|
|
|
output.writeBytes(byteArrayOf(11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26))
|
|
|
|
output.writeBytes(byteArrayOf(31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46))
|
|
|
|
output.writeBytes(byteArrayOf(51, 52, 53, 54, 55, 56, 57, 58))
|
|
|
|
output.writeBytes(byteArrayOf(61, 62, 63, 64, 65))
|
|
|
|
output.flush()
|
|
|
|
Assert.assertArrayEquals(
|
|
|
|
byteArrayOf( //
|
|
|
|
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, //
|
|
|
|
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, //
|
|
|
|
51, 52, 53, 54, 55, 56, 57, 58, //
|
|
|
|
61, 62, 63, 64, 65
|
2021-08-20 16:51:19 +02:00
|
|
|
), buffer.toByteArray()
|
2021-04-25 22:01:36 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
2021-08-20 16:51:19 +02:00
|
|
|
fun testInputStream() {
|
2021-04-25 22:01:36 +02:00
|
|
|
val bytes = byteArrayOf( //
|
|
|
|
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, //
|
|
|
|
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, //
|
|
|
|
51, 52, 53, 54, 55, 56, 57, 58, //
|
|
|
|
61, 62, 63, 64, 65
|
|
|
|
)
|
2021-08-20 16:51:19 +02:00
|
|
|
val buffer = ByteArrayInputStream(bytes)
|
|
|
|
var input = Input(buffer, 2)
|
2021-04-25 22:01:36 +02:00
|
|
|
val temp = ByteArray(1024)
|
|
|
|
var count = input.read(temp, 512, bytes.size)
|
|
|
|
Assert.assertEquals(bytes.size.toLong(), count.toLong())
|
|
|
|
var temp2 = ByteArray(count)
|
|
|
|
System.arraycopy(temp, 512, temp2, 0, count)
|
|
|
|
Assert.assertArrayEquals(bytes, temp2)
|
2021-08-20 16:51:19 +02:00
|
|
|
input = Input(bytes)
|
2021-04-25 22:01:36 +02:00
|
|
|
count = input.read(temp, 512, 512)
|
|
|
|
Assert.assertEquals(bytes.size.toLong(), count.toLong())
|
|
|
|
temp2 = ByteArray(count)
|
|
|
|
System.arraycopy(temp, 512, temp2, 0, count)
|
|
|
|
Assert.assertArrayEquals(bytes, temp2)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testWriteBytes() {
|
2021-08-20 16:51:19 +02:00
|
|
|
val buffer = Output(512)
|
2021-04-25 22:01:36 +02:00
|
|
|
buffer.writeBytes(byteArrayOf(11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26))
|
|
|
|
buffer.writeBytes(byteArrayOf(31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46))
|
|
|
|
buffer.writeByte(51)
|
|
|
|
buffer.writeBytes(byteArrayOf(52, 53, 54, 55, 56, 57, 58))
|
|
|
|
buffer.writeByte(61)
|
|
|
|
buffer.writeByte(62)
|
|
|
|
buffer.writeByte(63)
|
|
|
|
buffer.writeByte(64)
|
|
|
|
buffer.writeByte(65)
|
|
|
|
buffer.flush()
|
|
|
|
Assert.assertArrayEquals(
|
|
|
|
byteArrayOf( //
|
|
|
|
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, //
|
|
|
|
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, //
|
|
|
|
51, 52, 53, 54, 55, 56, 57, 58, //
|
|
|
|
61, 62, 63, 64, 65
|
|
|
|
), buffer.toBytes()
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testStrings() {
|
2021-08-20 16:51:19 +02:00
|
|
|
runStringTest(Output(4096))
|
|
|
|
runStringTest(Output(897))
|
|
|
|
runStringTest(Output(ByteArrayOutputStream()))
|
|
|
|
val write = Output(21)
|
2021-04-25 22:01:36 +02:00
|
|
|
val value = "abcdef\u00E1\u00E9\u00ED\u00F3\u00FA\u1234"
|
|
|
|
write.writeString(value)
|
2021-08-20 16:51:19 +02:00
|
|
|
var read = Input(write.toBytes())
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertEquals(value, read.readString())
|
|
|
|
write.reset()
|
|
|
|
write.writeString(null)
|
|
|
|
read = Input(write.toBytes())
|
|
|
|
Assert.assertNull(read.readString())
|
|
|
|
for (i in 0..258) runStringTest(i)
|
|
|
|
runStringTest(1)
|
|
|
|
runStringTest(2)
|
|
|
|
runStringTest(127)
|
|
|
|
runStringTest(256)
|
|
|
|
runStringTest(1024 * 1023)
|
|
|
|
runStringTest(1024 * 1024)
|
|
|
|
runStringTest(1024 * 1025)
|
|
|
|
runStringTest(1024 * 1026)
|
|
|
|
runStringTest(1024 * 1024 * 2)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun testGrowingBufferForAscii() {
|
2021-08-20 16:51:19 +02:00
|
|
|
// Initial size of 0.
|
|
|
|
val output = Output(0, 1024)
|
2021-04-25 22:01:36 +02:00
|
|
|
// Check that it is possible to write an ASCII string into the output buffer.
|
|
|
|
output.writeString("node/read")
|
2021-08-20 16:51:19 +02:00
|
|
|
Assert.assertEquals("node/read", Input(output.buffer, 0, output.position()).readString())
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Throws(IOException::class)
|
|
|
|
private fun runStringTest(length: Int) {
|
|
|
|
val write = Output(1024, -1)
|
|
|
|
val buffer = StringBuilder()
|
|
|
|
for (i in 0 until length) buffer.append(i.toChar())
|
|
|
|
val value = buffer.toString()
|
|
|
|
write.writeString(value)
|
|
|
|
write.writeString(value)
|
2021-08-20 16:51:19 +02:00
|
|
|
var read = Input(write.toBytes())
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertEquals(value, read.readString())
|
|
|
|
Assert.assertEquals(value, read.readStringBuilder().toString())
|
|
|
|
write.reset()
|
|
|
|
write.writeString(buffer.toString())
|
|
|
|
write.writeString(buffer.toString())
|
2021-08-20 16:51:19 +02:00
|
|
|
read = Input(write.toBytes())
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertEquals(value, read.readStringBuilder().toString())
|
|
|
|
Assert.assertEquals(value, read.readString())
|
|
|
|
if (length <= 127) {
|
|
|
|
write.reset()
|
|
|
|
write.writeAscii(value)
|
|
|
|
write.writeAscii(value)
|
2021-08-20 16:51:19 +02:00
|
|
|
read = Input(write.toBytes())
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertEquals(value, read.readStringBuilder().toString())
|
|
|
|
Assert.assertEquals(value, read.readString())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Throws(IOException::class)
|
2021-08-20 16:51:19 +02:00
|
|
|
private fun runStringTest(write: Output) {
|
2021-04-25 22:01:36 +02:00
|
|
|
val value1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\rabcdefghijklmnopqrstuvwxyz\n1234567890\t\"!`?'.,;:()[]{}<>|/@\\^$-%+=#_&~*"
|
|
|
|
val value2 = "abcdef\u00E1\u00E9\u00ED\u00F3\u00FA\u1234"
|
|
|
|
write.writeString("")
|
|
|
|
write.writeString("1")
|
|
|
|
write.writeString("22")
|
|
|
|
write.writeString("uno")
|
|
|
|
write.writeString("dos")
|
|
|
|
write.writeString("tres")
|
|
|
|
write.writeString(null)
|
|
|
|
write.writeString(value1)
|
|
|
|
write.writeString(value2)
|
|
|
|
for (i in 0..126) write.writeString(i.toChar().toString())
|
|
|
|
for (i in 0..126) write.writeString(i.toChar().toString() + "abc")
|
2021-08-20 16:51:19 +02:00
|
|
|
val read = Input(write.toBytes())
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertEquals("", read.readString())
|
|
|
|
Assert.assertEquals("1", read.readString())
|
|
|
|
Assert.assertEquals("22", read.readString())
|
|
|
|
Assert.assertEquals("uno", read.readString())
|
|
|
|
Assert.assertEquals("dos", read.readString())
|
|
|
|
Assert.assertEquals("tres", read.readString())
|
|
|
|
Assert.assertNull(read.readString())
|
|
|
|
Assert.assertEquals(value1, read.readString())
|
|
|
|
Assert.assertEquals(value2, read.readString())
|
|
|
|
for (i in 0..126) Assert.assertEquals(i.toChar().toString(), read.readString())
|
|
|
|
for (i in 0..126) Assert.assertEquals(i.toChar().toString() + "abc", read.readString())
|
|
|
|
read.reset()
|
|
|
|
Assert.assertEquals("", read.readStringBuilder().toString())
|
|
|
|
Assert.assertEquals("1", read.readStringBuilder().toString())
|
|
|
|
Assert.assertEquals("22", read.readStringBuilder().toString())
|
|
|
|
Assert.assertEquals("uno", read.readStringBuilder().toString())
|
|
|
|
Assert.assertEquals("dos", read.readStringBuilder().toString())
|
|
|
|
Assert.assertEquals("tres", read.readStringBuilder().toString())
|
|
|
|
Assert.assertNull(read.readStringBuilder())
|
|
|
|
Assert.assertEquals(value1, read.readStringBuilder().toString())
|
|
|
|
Assert.assertEquals(value2, read.readStringBuilder().toString())
|
|
|
|
for (i in 0..126) Assert.assertEquals(i.toChar().toString(), read.readStringBuilder().toString())
|
|
|
|
for (i in 0..126) Assert.assertEquals(i.toChar().toString() + "abc", read.readStringBuilder().toString())
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testCanReadInt() {
|
2021-08-20 16:51:19 +02:00
|
|
|
val write = Output(ByteArrayOutputStream())
|
|
|
|
var read = Input(write.toBytes())
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertFalse(read.canReadVarInt())
|
|
|
|
write.writeVarInt(400, true)
|
2021-08-20 16:51:19 +02:00
|
|
|
read = Input(write.toBytes())
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertTrue(read.canReadVarInt())
|
|
|
|
read.setLimit(read.limit() - 1)
|
|
|
|
Assert.assertFalse(read.canReadVarInt())
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testVarIntFlagOutput() {
|
2021-08-20 16:51:19 +02:00
|
|
|
val output = Output(4096)
|
|
|
|
val input = Input(output.buffer)
|
2021-04-25 22:01:36 +02:00
|
|
|
runVarIntFlagsTest(output, input)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testVarIntFlagByteBufferOutput() {
|
2021-08-20 16:51:19 +02:00
|
|
|
val output = ByteBufferOutput(4096)
|
|
|
|
val input = ByteBufferInput(output.byteBuffer)
|
2021-04-25 22:01:36 +02:00
|
|
|
runVarIntFlagsTest(output, input)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Throws(IOException::class)
|
|
|
|
private fun runVarIntFlagsTest(output: Output, input: Input) {
|
|
|
|
Assert.assertEquals(1, output.writeVarIntFlag(true, 63, true).toLong())
|
|
|
|
Assert.assertEquals(2, output.writeVarIntFlag(true, 64, true).toLong())
|
|
|
|
Assert.assertEquals(1, output.writeVarIntFlag(false, 63, true).toLong())
|
|
|
|
Assert.assertEquals(2, output.writeVarIntFlag(false, 64, true).toLong())
|
|
|
|
Assert.assertEquals(1, output.writeVarIntFlag(true, 31, false).toLong())
|
|
|
|
Assert.assertEquals(2, output.writeVarIntFlag(true, 32, false).toLong())
|
|
|
|
Assert.assertEquals(1, output.writeVarIntFlag(false, 31, false).toLong())
|
|
|
|
Assert.assertEquals(2, output.writeVarIntFlag(false, 32, false).toLong())
|
|
|
|
input.setPosition(0)
|
|
|
|
input.setLimit(output.position())
|
|
|
|
Assert.assertTrue(input.readVarIntFlag())
|
|
|
|
Assert.assertEquals(63, input.readVarIntFlag(true).toLong())
|
|
|
|
Assert.assertTrue(input.readVarIntFlag())
|
|
|
|
Assert.assertEquals(64, input.readVarIntFlag(true).toLong())
|
|
|
|
Assert.assertFalse(input.readVarIntFlag())
|
|
|
|
Assert.assertEquals(63, input.readVarIntFlag(true).toLong())
|
|
|
|
Assert.assertFalse(input.readVarIntFlag())
|
|
|
|
Assert.assertEquals(64, input.readVarIntFlag(true).toLong())
|
|
|
|
Assert.assertTrue(input.readVarIntFlag())
|
|
|
|
Assert.assertEquals(31, input.readVarIntFlag(false).toLong())
|
|
|
|
Assert.assertTrue(input.readVarIntFlag())
|
|
|
|
Assert.assertEquals(32, input.readVarIntFlag(false).toLong())
|
|
|
|
Assert.assertFalse(input.readVarIntFlag())
|
|
|
|
Assert.assertEquals(31, input.readVarIntFlag(false).toLong())
|
|
|
|
Assert.assertFalse(input.readVarIntFlag())
|
|
|
|
Assert.assertEquals(32, input.readVarIntFlag(false).toLong())
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testInts() {
|
2021-08-20 16:51:19 +02:00
|
|
|
runIntTest(Output(4096))
|
|
|
|
runIntTest(Output(ByteArrayOutputStream()))
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Throws(IOException::class)
|
|
|
|
private fun runIntTest(write: Output) {
|
|
|
|
write.writeInt(0)
|
|
|
|
write.writeInt(63)
|
|
|
|
write.writeInt(64)
|
|
|
|
write.writeInt(127)
|
|
|
|
write.writeInt(128)
|
|
|
|
write.writeInt(8192)
|
|
|
|
write.writeInt(16384)
|
|
|
|
write.writeInt(2097151)
|
|
|
|
write.writeInt(1048575)
|
|
|
|
write.writeInt(134217727)
|
|
|
|
write.writeInt(268435455)
|
|
|
|
write.writeInt(134217728)
|
|
|
|
write.writeInt(268435456)
|
|
|
|
write.writeInt(-2097151)
|
|
|
|
write.writeInt(-1048575)
|
|
|
|
write.writeInt(-134217727)
|
|
|
|
write.writeInt(-268435455)
|
|
|
|
write.writeInt(-134217728)
|
|
|
|
write.writeInt(-268435456)
|
|
|
|
Assert.assertEquals(1, write.writeVarInt(0, true).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarInt(0, false).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarInt(63, true).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarInt(63, false).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarInt(64, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarInt(64, false).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarInt(127, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarInt(127, false).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarInt(128, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarInt(128, false).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarInt(8191, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarInt(8191, false).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarInt(8192, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarInt(8192, false).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarInt(16383, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarInt(16383, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarInt(16384, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarInt(16384, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarInt(2097151, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarInt(2097151, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarInt(1048575, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarInt(1048575, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarInt(134217727, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarInt(134217727, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarInt(268435455, true).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(268435455, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarInt(134217728, true).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(134217728, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(268435456, true).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(268435456, false).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarInt(-64, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(-64, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarInt(-65, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(-65, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarInt(-8192, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(-8192, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarInt(-1048576, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(-1048576, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarInt(-134217728, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(-134217728, true).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(-134217729, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(-134217729, true).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(1000000000, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(1000000000, true).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(Int.MAX_VALUE - 1, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(Int.MAX_VALUE - 1, true).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(Int.MAX_VALUE, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarInt(Int.MAX_VALUE, true).toLong())
|
2021-08-20 16:51:19 +02:00
|
|
|
val read = Input(write.toBytes())
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertEquals(0, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(63, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(64, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(127, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(128, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(8192, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(16384, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(2097151, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(1048575, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(134217727, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(268435455, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(134217728, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(268435456, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(-2097151, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(-1048575, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(-134217727, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(-268435455, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(-134217728, read.readInt().toLong())
|
|
|
|
Assert.assertEquals(-268435456, read.readInt().toLong())
|
|
|
|
Assert.assertTrue(read.canReadVarInt())
|
|
|
|
Assert.assertTrue(read.canReadVarInt())
|
|
|
|
Assert.assertTrue(read.canReadVarInt())
|
|
|
|
Assert.assertEquals(0, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(0, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(63, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(63, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(64, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(64, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(127, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(127, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(128, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(128, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(8191, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(8191, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(8192, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(8192, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(16383, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(16383, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(16384, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(16384, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(2097151, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(2097151, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(1048575, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(1048575, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(134217727, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(134217727, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(268435455, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(268435455, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(134217728, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(134217728, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(268435456, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(268435456, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(-64, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(-64, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(-65, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(-65, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(-8192, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(-8192, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(-1048576, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(-1048576, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(-134217728, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(-134217728, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(-134217729, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(-134217729, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(1000000000, read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(1000000000, read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals((Int.MAX_VALUE - 1).toLong(), read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals((Int.MAX_VALUE - 1).toLong(), read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(Int.MAX_VALUE.toLong(), read.readVarInt(false).toLong())
|
|
|
|
Assert.assertEquals(Int.MAX_VALUE.toLong(), read.readVarInt(true).toLong())
|
|
|
|
Assert.assertFalse(read.canReadVarInt())
|
|
|
|
val random = Random()
|
|
|
|
for (i in 0..9999) {
|
|
|
|
val value = random.nextInt()
|
|
|
|
write.reset()
|
|
|
|
write.writeInt(value)
|
|
|
|
write.writeVarInt(value, true)
|
|
|
|
write.writeVarInt(value, false)
|
|
|
|
read.buffer = write.toBytes()
|
|
|
|
Assert.assertEquals(value.toLong(), read.readInt().toLong())
|
|
|
|
Assert.assertEquals(value.toLong(), read.readVarInt(true).toLong())
|
|
|
|
Assert.assertEquals(value.toLong(), read.readVarInt(false).toLong())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testLongs() {
|
2021-08-20 16:51:19 +02:00
|
|
|
runLongTest(Output(4096))
|
|
|
|
runLongTest(Output(ByteArrayOutputStream()))
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Throws(IOException::class)
|
|
|
|
private fun runLongTest(write: Output) {
|
|
|
|
write.writeLong(0)
|
|
|
|
write.writeLong(63)
|
|
|
|
write.writeLong(64)
|
|
|
|
write.writeLong(127)
|
|
|
|
write.writeLong(128)
|
|
|
|
write.writeLong(8192)
|
|
|
|
write.writeLong(16384)
|
|
|
|
write.writeLong(2097151)
|
|
|
|
write.writeLong(1048575)
|
|
|
|
write.writeLong(134217727)
|
|
|
|
write.writeLong(268435455)
|
|
|
|
write.writeLong(134217728)
|
|
|
|
write.writeLong(268435456)
|
|
|
|
write.writeLong(-2097151)
|
|
|
|
write.writeLong(-1048575)
|
|
|
|
write.writeLong(-134217727)
|
|
|
|
write.writeLong(-268435455)
|
|
|
|
write.writeLong(-134217728)
|
|
|
|
write.writeLong(-268435456)
|
|
|
|
Assert.assertEquals(1, write.writeVarLong(0, true).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarLong(0, false).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarLong(63, true).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarLong(63, false).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarLong(64, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarLong(64, false).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarLong(127, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarLong(127, false).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarLong(128, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarLong(128, false).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarLong(8191, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarLong(8191, false).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarLong(8192, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarLong(8192, false).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarLong(16383, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarLong(16383, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarLong(16384, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarLong(16384, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarLong(2097151, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarLong(2097151, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarLong(1048575, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarLong(1048575, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarLong(134217727, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarLong(134217727, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarLong(268435455L, true).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarLong(268435455L, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarLong(134217728L, true).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarLong(134217728L, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarLong(268435456L, true).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarLong(268435456L, false).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarLong(-64, false).toLong())
|
|
|
|
Assert.assertEquals(9, write.writeVarLong(-64, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarLong(-65, false).toLong())
|
|
|
|
Assert.assertEquals(9, write.writeVarLong(-65, true).toLong())
|
|
|
|
Assert.assertEquals(2, write.writeVarLong(-8192, false).toLong())
|
|
|
|
Assert.assertEquals(9, write.writeVarLong(-8192, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarLong(-1048576, false).toLong())
|
|
|
|
Assert.assertEquals(9, write.writeVarLong(-1048576, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarLong(-134217728, false).toLong())
|
|
|
|
Assert.assertEquals(9, write.writeVarLong(-134217728, true).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarLong(-134217729, false).toLong())
|
|
|
|
Assert.assertEquals(9, write.writeVarLong(-134217729, true).toLong())
|
2021-08-20 16:51:19 +02:00
|
|
|
val read = Input(write.toBytes())
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertEquals(0, read.readLong())
|
|
|
|
Assert.assertEquals(63, read.readLong())
|
|
|
|
Assert.assertEquals(64, read.readLong())
|
|
|
|
Assert.assertEquals(127, read.readLong())
|
|
|
|
Assert.assertEquals(128, read.readLong())
|
|
|
|
Assert.assertEquals(8192, read.readLong())
|
|
|
|
Assert.assertEquals(16384, read.readLong())
|
|
|
|
Assert.assertEquals(2097151, read.readLong())
|
|
|
|
Assert.assertEquals(1048575, read.readLong())
|
|
|
|
Assert.assertEquals(134217727, read.readLong())
|
|
|
|
Assert.assertEquals(268435455, read.readLong())
|
|
|
|
Assert.assertEquals(134217728, read.readLong())
|
|
|
|
Assert.assertEquals(268435456, read.readLong())
|
|
|
|
Assert.assertEquals(-2097151, read.readLong())
|
|
|
|
Assert.assertEquals(-1048575, read.readLong())
|
|
|
|
Assert.assertEquals(-134217727, read.readLong())
|
|
|
|
Assert.assertEquals(-268435455, read.readLong())
|
|
|
|
Assert.assertEquals(-134217728, read.readLong())
|
|
|
|
Assert.assertEquals(-268435456, read.readLong())
|
|
|
|
Assert.assertEquals(0, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(0, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(63, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(63, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(64, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(64, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(127, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(127, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(128, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(128, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(8191, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(8191, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(8192, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(8192, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(16383, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(16383, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(16384, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(16384, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(2097151, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(2097151, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(1048575, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(1048575, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(134217727, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(134217727, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(268435455, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(268435455, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(134217728, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(134217728, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(268435456, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(268435456, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(-64, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(-64, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(-65, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(-65, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(-8192, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(-8192, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(-1048576, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(-1048576, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(-134217728, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(-134217728, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(-134217729, read.readVarLong(false))
|
|
|
|
Assert.assertEquals(-134217729, read.readVarLong(true))
|
|
|
|
val random = Random()
|
|
|
|
for (i in 0..9999) {
|
|
|
|
val value = random.nextLong()
|
|
|
|
write.reset()
|
|
|
|
write.writeLong(value)
|
|
|
|
write.writeVarLong(value, true)
|
|
|
|
write.writeVarLong(value, false)
|
|
|
|
read.buffer = write.toBytes()
|
|
|
|
Assert.assertEquals(value, read.readLong())
|
|
|
|
Assert.assertEquals(value, read.readVarLong(true))
|
|
|
|
Assert.assertEquals(value, read.readVarLong(false))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testShorts() {
|
2021-08-20 16:51:19 +02:00
|
|
|
runShortTest(Output(4096))
|
|
|
|
runShortTest(Output(ByteArrayOutputStream()))
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Throws(IOException::class)
|
|
|
|
private fun runShortTest(write: Output) {
|
|
|
|
write.writeShort(0)
|
|
|
|
write.writeShort(63)
|
|
|
|
write.writeShort(64)
|
|
|
|
write.writeShort(127)
|
|
|
|
write.writeShort(128)
|
|
|
|
write.writeShort(8192)
|
|
|
|
write.writeShort(16384)
|
|
|
|
write.writeShort(32767)
|
|
|
|
write.writeShort(-63)
|
|
|
|
write.writeShort(-64)
|
|
|
|
write.writeShort(-127)
|
|
|
|
write.writeShort(-128)
|
|
|
|
write.writeShort(-8192)
|
|
|
|
write.writeShort(-16384)
|
|
|
|
write.writeShort(-32768)
|
2021-08-20 16:51:19 +02:00
|
|
|
val read = Input(write.toBytes())
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertEquals(0, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(63, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(64, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(127, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(128, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(8192, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(16384, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(32767, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(-63, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(-64, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(-127, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(-128, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(-8192, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(-16384, read.readShort().toLong())
|
|
|
|
Assert.assertEquals(-32768, read.readShort().toLong())
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testFloats() {
|
2021-08-20 16:51:19 +02:00
|
|
|
runFloatTest(Output(4096))
|
|
|
|
runFloatTest(Output(ByteArrayOutputStream()))
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Throws(IOException::class)
|
|
|
|
private fun runFloatTest(write: Output) {
|
|
|
|
write.writeFloat(0f)
|
|
|
|
write.writeFloat(63f)
|
|
|
|
write.writeFloat(64f)
|
|
|
|
write.writeFloat(127f)
|
|
|
|
write.writeFloat(128f)
|
|
|
|
write.writeFloat(8192f)
|
|
|
|
write.writeFloat(16384f)
|
|
|
|
write.writeFloat(32767f)
|
|
|
|
write.writeFloat(-63f)
|
|
|
|
write.writeFloat(-64f)
|
|
|
|
write.writeFloat(-127f)
|
|
|
|
write.writeFloat(-128f)
|
|
|
|
write.writeFloat(-8192f)
|
|
|
|
write.writeFloat(-16384f)
|
|
|
|
write.writeFloat(-32768f)
|
|
|
|
Assert.assertEquals(1, write.writeVarFloat(0f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarFloat(0f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarFloat(63f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarFloat(63f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarFloat(64f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarFloat(64f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarFloat(127f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarFloat(127f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarFloat(128f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarFloat(128f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarFloat(8191f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarFloat(8191f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarFloat(8192f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarFloat(8192f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarFloat(16383f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarFloat(16383f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarFloat(16384f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarFloat(16384f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarFloat(32767f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarFloat(32767f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarFloat(-64f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarFloat(-64f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarFloat(-65f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarFloat(-65f, 1000f, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarFloat(-8192f, 1000f, false).toLong())
|
|
|
|
Assert.assertEquals(5, write.writeVarFloat(-8192f, 1000f, true).toLong())
|
2021-08-20 16:51:19 +02:00
|
|
|
val read = Input(write.toBytes())
|
|
|
|
assertFloatEquals(read.readFloat(), 0f)
|
|
|
|
assertFloatEquals(read.readFloat(), 63f)
|
|
|
|
assertFloatEquals(read.readFloat(), 64f)
|
|
|
|
assertFloatEquals(read.readFloat(), 127f)
|
|
|
|
assertFloatEquals(read.readFloat(), 128f)
|
|
|
|
assertFloatEquals(read.readFloat(), 8192f)
|
|
|
|
assertFloatEquals(read.readFloat(), 16384f)
|
|
|
|
assertFloatEquals(read.readFloat(), 32767f)
|
|
|
|
assertFloatEquals(read.readFloat(), -63f)
|
|
|
|
assertFloatEquals(read.readFloat(), -64f)
|
|
|
|
assertFloatEquals(read.readFloat(), -127f)
|
|
|
|
assertFloatEquals(read.readFloat(), -128f)
|
|
|
|
assertFloatEquals(read.readFloat(), -8192f)
|
|
|
|
assertFloatEquals(read.readFloat(), -16384f)
|
|
|
|
assertFloatEquals(read.readFloat(), -32768f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), 0f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), 0f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), 63f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), 63f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), 64f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), 64f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), 127f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), 127f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), 128f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), 128f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), 8191f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), 8191f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), 8192f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), 8192f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), 16383f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), 16383f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), 16384f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), 16384f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), 32767f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), 32767f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), -64f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), -64f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), -65f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), -65f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, false), -8192f)
|
|
|
|
assertFloatEquals(read.readVarFloat(1000f, true), -8192f)
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testDoubles() {
|
2021-08-20 16:51:19 +02:00
|
|
|
runDoubleTest(Output(4096))
|
|
|
|
runDoubleTest(Output(ByteArrayOutputStream()))
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Throws(IOException::class)
|
|
|
|
private fun runDoubleTest(write: Output) {
|
|
|
|
write.writeDouble(0.0)
|
|
|
|
write.writeDouble(63.0)
|
|
|
|
write.writeDouble(64.0)
|
|
|
|
write.writeDouble(127.0)
|
|
|
|
write.writeDouble(128.0)
|
|
|
|
write.writeDouble(8192.0)
|
|
|
|
write.writeDouble(16384.0)
|
|
|
|
write.writeDouble(32767.0)
|
|
|
|
write.writeDouble(-63.0)
|
|
|
|
write.writeDouble(-64.0)
|
|
|
|
write.writeDouble(-127.0)
|
|
|
|
write.writeDouble(-128.0)
|
|
|
|
write.writeDouble(-8192.0)
|
|
|
|
write.writeDouble(-16384.0)
|
|
|
|
write.writeDouble(-32768.0)
|
|
|
|
Assert.assertEquals(1, write.writeVarDouble(0.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(1, write.writeVarDouble(0.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarDouble(63.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarDouble(63.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarDouble(64.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarDouble(64.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarDouble(127.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarDouble(127.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarDouble(128.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarDouble(128.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarDouble(8191.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarDouble(8191.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarDouble(8192.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarDouble(8192.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarDouble(16383.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarDouble(16383.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarDouble(16384.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarDouble(16384.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarDouble(32767.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarDouble(32767.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarDouble(-64.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(9, write.writeVarDouble(-64.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(3, write.writeVarDouble(-65.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(9, write.writeVarDouble(-65.0, 1000.0, true).toLong())
|
|
|
|
Assert.assertEquals(4, write.writeVarDouble(-8192.0, 1000.0, false).toLong())
|
|
|
|
Assert.assertEquals(9, write.writeVarDouble(-8192.0, 1000.0, true).toLong())
|
|
|
|
write.writeDouble(1.23456)
|
2021-08-20 16:51:19 +02:00
|
|
|
val read = Input(write.toBytes())
|
|
|
|
assertDoubleEquals(read.readDouble(), 0.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), 63.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), 64.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), 127.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), 128.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), 8192.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), 16384.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), 32767.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), -63.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), -64.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), -127.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), -128.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), -8192.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), -16384.0)
|
|
|
|
assertDoubleEquals(read.readDouble(), -32768.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), 0.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), 0.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), 63.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), 63.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), 64.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), 64.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), 127.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), 127.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), 128.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), 128.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), 8191.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), 8191.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), 8192.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), 8192.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), 16383.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), 16383.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), 16384.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), 16384.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), 32767.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), 32767.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), -64.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), -64.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), -65.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), -65.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, false), -8192.0)
|
|
|
|
assertDoubleEquals(read.readVarDouble(1000.0, true), -8192.0)
|
|
|
|
assertDoubleEquals(1.23456, read.readDouble())
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testBooleans() {
|
2021-08-20 16:51:19 +02:00
|
|
|
runBooleanTest(Output(4096))
|
|
|
|
runBooleanTest(Output(ByteArrayOutputStream()))
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Throws(IOException::class)
|
|
|
|
private fun runBooleanTest(write: Output) {
|
|
|
|
for (i in 0..99) {
|
|
|
|
write.writeBoolean(true)
|
|
|
|
write.writeBoolean(false)
|
|
|
|
}
|
2021-08-20 16:51:19 +02:00
|
|
|
val read = Input(write.toBytes())
|
2021-04-25 22:01:36 +02:00
|
|
|
for (i in 0..99) {
|
|
|
|
Assert.assertTrue(read.readBoolean())
|
|
|
|
Assert.assertFalse(read.readBoolean())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(IOException::class)
|
|
|
|
fun testChars() {
|
2021-08-20 16:51:19 +02:00
|
|
|
runCharTest(Output(4096))
|
|
|
|
runCharTest(Output(ByteArrayOutputStream()))
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Throws(IOException::class)
|
|
|
|
private fun runCharTest(write: Output) {
|
|
|
|
write.writeChar(0.toChar())
|
|
|
|
write.writeChar(63.toChar())
|
|
|
|
write.writeChar(64.toChar())
|
|
|
|
write.writeChar(127.toChar())
|
|
|
|
write.writeChar(128.toChar())
|
|
|
|
write.writeChar(8192.toChar())
|
|
|
|
write.writeChar(16384.toChar())
|
|
|
|
write.writeChar(32767.toChar())
|
|
|
|
write.writeChar(65535.toChar())
|
2021-08-20 16:51:19 +02:00
|
|
|
val read = Input(write.toBytes())
|
|
|
|
Assert.assertEquals(0, read.readChar().code.toLong())
|
|
|
|
Assert.assertEquals(63, read.readChar().code.toLong())
|
|
|
|
Assert.assertEquals(64, read.readChar().code.toLong())
|
|
|
|
Assert.assertEquals(127, read.readChar().code.toLong())
|
|
|
|
Assert.assertEquals(128, read.readChar().code.toLong())
|
|
|
|
Assert.assertEquals(8192, read.readChar().code.toLong())
|
|
|
|
Assert.assertEquals(16384, read.readChar().code.toLong())
|
|
|
|
Assert.assertEquals(32767, read.readChar().code.toLong())
|
|
|
|
Assert.assertEquals(65535, read.readChar().code.toLong())
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(Exception::class)
|
|
|
|
fun testInputWithOffset() {
|
|
|
|
val buf = ByteArray(30)
|
2021-08-20 16:51:19 +02:00
|
|
|
val `in` = Input(buf, 10, 10)
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertEquals(10, `in`.available().toLong())
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(Exception::class)
|
|
|
|
fun testSmallBuffers() {
|
2021-08-20 16:51:19 +02:00
|
|
|
val buf = ByteBuffer.allocate(1024)
|
|
|
|
val byteBufferOutputStream = ByteBufferOutputStream(buf)
|
|
|
|
val testOutput = Output(byteBufferOutputStream)
|
2021-04-25 22:01:36 +02:00
|
|
|
testOutput.writeBytes(ByteArray(512))
|
|
|
|
testOutput.writeBytes(ByteArray(512))
|
|
|
|
testOutput.flush()
|
2021-08-20 16:51:19 +02:00
|
|
|
val testInputs = ByteBufferInputStream()
|
|
|
|
(buf as Buffer).flip()
|
|
|
|
testInputs.byteBuffer = buf
|
|
|
|
val input = Input(testInputs, 512)
|
2021-04-25 22:01:36 +02:00
|
|
|
val toRead = ByteArray(512)
|
|
|
|
input.readBytes(toRead)
|
|
|
|
input.readBytes(toRead)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(Exception::class)
|
|
|
|
fun testVerySmallBuffers() {
|
|
|
|
val out1 = Output(4, -1)
|
2021-08-20 16:51:19 +02:00
|
|
|
val out2: Output = ByteBufferOutput(4, -1)
|
2021-04-25 22:01:36 +02:00
|
|
|
for (i in 0..15) {
|
|
|
|
out1.writeVarInt(92, false)
|
|
|
|
}
|
|
|
|
for (i in 0..15) {
|
|
|
|
out2.writeVarInt(92, false)
|
|
|
|
}
|
|
|
|
Assert.assertArrayEquals(out1.toBytes(), out2.toBytes())
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(Exception::class)
|
|
|
|
fun testZeroLengthOutputs() {
|
2021-08-20 16:51:19 +02:00
|
|
|
val kryo = Kryo()
|
2021-04-25 22:01:36 +02:00
|
|
|
val output = Output(0, 10000)
|
2021-08-20 16:51:19 +02:00
|
|
|
kryo.writeClassAndObject(output, "Test string")
|
|
|
|
val byteBufferOutput: Output = ByteBufferOutput(0, 10000)
|
|
|
|
kryo.writeClassAndObject(byteBufferOutput, "Test string")
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(Exception::class)
|
|
|
|
fun testFlushRoundTrip() {
|
|
|
|
val kryo = Kryo()
|
|
|
|
val s1 = "12345"
|
2021-08-20 16:51:19 +02:00
|
|
|
val os = ByteArrayOutputStream()
|
|
|
|
val objOutput = ObjectOutputStream(os)
|
|
|
|
val output = Output(objOutput)
|
2021-04-25 22:01:36 +02:00
|
|
|
kryo.writeClass(output, s1.javaClass)
|
|
|
|
kryo.writeObject(output, s1)
|
2021-08-20 16:51:19 +02:00
|
|
|
output.flush()
|
|
|
|
// objOutput.flush(); // this layer wasn't flushed prior to this bugfix, add it for a workaround
|
|
|
|
val b = os.toByteArray()
|
|
|
|
println("size: " + b.size)
|
|
|
|
val `in` = ByteArrayInputStream(b)
|
|
|
|
val objIn = ObjectInputStream(`in`)
|
|
|
|
val input = Input(objIn)
|
2021-04-25 22:01:36 +02:00
|
|
|
val r = kryo.readClass(input)
|
|
|
|
val s2 = kryo.readObject(input, r.type) as String
|
|
|
|
Assert.assertEquals(s1, s2)
|
|
|
|
}
|
|
|
|
|
2021-08-20 16:51:19 +02:00
|
|
|
@Test
|
|
|
|
fun testNewOutputMaxBufferSizeLessThanBufferSize() {
|
|
|
|
val bufferSize = 2
|
|
|
|
val maxBufferSize = 1
|
|
|
|
Assert.assertThrows(IllegalArgumentException::class.java) { Output(bufferSize, maxBufferSize) }
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun testSetOutputMaxBufferSizeLessThanBufferSize() {
|
2021-04-25 22:01:36 +02:00
|
|
|
val bufferSize = 2
|
2021-08-20 16:51:19 +02:00
|
|
|
val maxBufferSize = 1
|
|
|
|
val output = Output(bufferSize, bufferSize)
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertNotNull(output)
|
2021-08-20 16:51:19 +02:00
|
|
|
Assert.assertThrows(IllegalArgumentException::class.java) { output.setBuffer(ByteArray(bufferSize), maxBufferSize) }
|
2021-04-25 22:01:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun testNewOutputMaxBufferSizeIsMinusOne() {
|
|
|
|
val bufferSize = 2
|
|
|
|
val maxBufferSize = -1
|
|
|
|
val output = Output(bufferSize, maxBufferSize)
|
|
|
|
Assert.assertNotNull(output)
|
|
|
|
// This test should pass as long as no exception thrown
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun testSetOutputMaxBufferSizeIsMinusOne() {
|
|
|
|
val bufferSize = 2
|
|
|
|
val maxBufferSize = -1
|
2021-08-20 16:51:19 +02:00
|
|
|
val output = Output(bufferSize, bufferSize)
|
2021-04-25 22:01:36 +02:00
|
|
|
Assert.assertNotNull(output)
|
|
|
|
output.setBuffer(ByteArray(bufferSize), maxBufferSize)
|
|
|
|
// This test should pass as long as no exception thrown
|
|
|
|
}
|
2019-03-25 23:05:51 +01:00
|
|
|
}
|