add more tests and fixed more glitches

This commit is contained in:
Sergey Chernov 2023-03-15 10:43:06 +01:00
parent 2823692b03
commit d97de2c3ea
5 changed files with 37 additions and 11 deletions

View File

@ -23,10 +23,10 @@ interface DataSink {
for(d in data) writeByte(d) for(d in data) writeByte(d)
} }
fun writeVarUInt(value: UInt) { Varint.encodeUnsigned(value.toULong())} fun writeVarUInt(value: UInt) { Varint.encodeUnsigned(value.toULong(), this)}
fun writeVarInt(value: UInt) { Varint.encodeSigned(value.toLong())} fun writeVarInt(value: UInt) { Varint.encodeSigned(value.toLong(), this)}
fun writeSmartUInt(value: UInt) { Smartint.encodeUnsigned(value.toULong())} fun writeSmartUInt(value: UInt) { Smartint.encodeUnsigned(value.toULong(), this)}
fun writeSmartInt(value: UInt) { Smartint.encodeSigned(value.toLong())} fun writeSmartInt(value: UInt) { Smartint.encodeSigned(value.toLong(), this)}
} }
inline fun <reified T:Any>DataSink.writeNumber(value: T) { inline fun <reified T:Any>DataSink.writeNumber(value: T) {

View File

@ -112,6 +112,7 @@ fun ByteArray.toDumpLines(wide: Boolean = false): List<String> {
} }
val remainder = from % lineSize val remainder = from % lineSize
if (remainder > 0) { if (remainder > 0) {
if( remainder < lineSize/2) b.append(' ')
var cnt = lineSize - remainder var cnt = lineSize - remainder
while (cnt-- > 0) b.append(' ') while (cnt-- > 0) b.append(' ')
} }

View File

@ -60,7 +60,7 @@ class BipackDecoder(val input: DataSource, var elementsCount: Int = 0,val isColl
var count = descriptor.elementsCount var count = descriptor.elementsCount
for (a in descriptor.annotations) { for (a in descriptor.annotations) {
if (a is Extendable) if (a is Extendable)
count = source.readSmartUInt().toInt() count = source.readVarUInt().toInt()
else if (a is Framed) { else if (a is Framed) {
val code = CRC.crc32(descriptor.serialName.encodeToByteArray()) val code = CRC.crc32(descriptor.serialName.encodeToByteArray())
// if we fail to read CRC, it is IO error, so DataSource.EndOfData will be // if we fail to read CRC, it is IO error, so DataSource.EndOfData will be

View File

@ -73,7 +73,7 @@ class BipackEncoder(val output: DataSink) : AbstractEncoder() {
CRC.crc32(descriptor.serialName.encodeToByteArray()) CRC.crc32(descriptor.serialName.encodeToByteArray())
) )
} else if (a is Extendable) { } else if (a is Extendable) {
sink.writeSmartUInt(descriptor.elementsCount.toUInt()) sink.writeVarUInt(descriptor.elementsCount.toUInt())
} }
} }
return BipackEncoder(sink) return BipackEncoder(sink)

View File

@ -64,14 +64,12 @@ class BipackEncoderTest {
@Test @Test
fun encodeExtendable() { fun encodeExtendable() {
val a = Foobar1(1, 2)//, "bum") val a = Foobar1(1, 2)//, "bum")
println(BipackEncoder.encode(a).toDump())
val b = BipackDecoder.decode<Foobar1>(BipackEncoder.encode(a)) val b = BipackDecoder.decode<Foobar1>(BipackEncoder.encode(a))
assertEquals(3, BipackEncoder.encode(a).size) assertEquals(3, BipackEncoder.encode(a).size)
assertEquals(a, b) assertEquals(a, b)
println(b)
val c = BipackDecoder.decode<Foobar2>(BipackEncoder.encode(a)) val c = BipackDecoder.decode<Foobar2>(BipackEncoder.encode(a))
// assertEquals(-1, c.other) assertEquals(-1, c.other)
// assertEquals(a.bar, c.bar) assertEquals(a.bar, c.bar)
} }
@Test @Test
@ -220,7 +218,7 @@ class BipackEncoderTest {
// @Test // @Test
@Test @Test
fun testMaps() { fun testMaps() {
val t1 = mapOf("foo" to "f1", "bar" to "b1", "bazz" to "b3")//f=17f/7f) val t1 = mapOf("foo bar" to "f1", "bar" to "b1", "bazz" to "b3")//f=17f/7f)
val d = BipackEncoder.encode(t1) val d = BipackEncoder.encode(t1)
println(d.toDump()) println(d.toDump())
println(t1) println(t1)
@ -229,6 +227,33 @@ class BipackEncoderTest {
// assertEquals(t1, d.decodeFromBipack()) // assertEquals(t1, d.decodeFromBipack())
} }
@Test
fun testMaps2() {
// val t1 = mapOf("foo" to Foobar1N(7))
val t1 = mapOf("foo" to Foobar1N(7), "bar" to Foobar1N(14), "bazz" to Foobar1N(77))//f=17f/7f)
val d = BipackEncoder.encode(t1)
println(d.toDump())
println(t1)
println(BipackDecoder.decode<Map<String,Foobar1N>>(d))
// println(d.decodeFromBipack<Map<String,String>>())
// assertEquals(t1, d.decodeFromBipack())
}
@Test
fun testMaps3() {
println(BipackEncoder.encode(Foobar1(1)).toDump())
println(BipackEncoder.encode(Foobar1(1)).decodeFromBipack<Foobar1>())
// val t1 = mapOf("foo" to Foobar1N(7))
val t1 = mapOf("foo" to Foobar1(7), "bar" to Foobar1(14), "bazz" to Foobar1(77))//f=17f/7f)
val d = BipackEncoder.encode(t1)
println(d.toDump())
println(t1)
println(BipackDecoder.decode<Map<String,Foobar1>>(d))
// println(d.decodeFromBipack<Map<String,String>>())
// assertEquals(t1, d.decodeFromBipack())
}
@Serializable @Serializable
// @CrcProtected // @CrcProtected
// @Framed // @Framed