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)
}
fun writeVarUInt(value: UInt) { Varint.encodeUnsigned(value.toULong())}
fun writeVarInt(value: UInt) { Varint.encodeSigned(value.toLong())}
fun writeSmartUInt(value: UInt) { Smartint.encodeUnsigned(value.toULong())}
fun writeSmartInt(value: UInt) { Smartint.encodeSigned(value.toLong())}
fun writeVarUInt(value: UInt) { Varint.encodeUnsigned(value.toULong(), this)}
fun writeVarInt(value: UInt) { Varint.encodeSigned(value.toLong(), this)}
fun writeSmartUInt(value: UInt) { Smartint.encodeUnsigned(value.toULong(), this)}
fun writeSmartInt(value: UInt) { Smartint.encodeSigned(value.toLong(), this)}
}
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
if (remainder > 0) {
if( remainder < lineSize/2) b.append(' ')
var cnt = lineSize - remainder
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
for (a in descriptor.annotations) {
if (a is Extendable)
count = source.readSmartUInt().toInt()
count = source.readVarUInt().toInt()
else if (a is Framed) {
val code = CRC.crc32(descriptor.serialName.encodeToByteArray())
// 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())
)
} else if (a is Extendable) {
sink.writeSmartUInt(descriptor.elementsCount.toUInt())
sink.writeVarUInt(descriptor.elementsCount.toUInt())
}
}
return BipackEncoder(sink)

View File

@ -64,14 +64,12 @@ class BipackEncoderTest {
@Test
fun encodeExtendable() {
val a = Foobar1(1, 2)//, "bum")
println(BipackEncoder.encode(a).toDump())
val b = BipackDecoder.decode<Foobar1>(BipackEncoder.encode(a))
assertEquals(3, BipackEncoder.encode(a).size)
assertEquals(a, b)
println(b)
val c = BipackDecoder.decode<Foobar2>(BipackEncoder.encode(a))
// assertEquals(-1, c.other)
// assertEquals(a.bar, c.bar)
assertEquals(-1, c.other)
assertEquals(a.bar, c.bar)
}
@Test
@ -220,7 +218,7 @@ class BipackEncoderTest {
// @Test
@Test
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)
println(d.toDump())
println(t1)
@ -229,6 +227,33 @@ class BipackEncoderTest {
// 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
// @CrcProtected
// @Framed