@@ -233,4 +233,51 @@ class PackedFormatTest {
233233 decoder.decodeSerializableValue(Char .serializer())
234234 }
235235 }
236+
237+ @Test
238+ fun `builder defaultVarInt reduces size for positive integers` () {
239+ val payload = UnannotatedPayload (5 , 10L )
240+
241+ val standardFormat = PackedFormat .Default
242+ val optimizedFormat = PackedFormat { defaultVarInt = true }
243+
244+ val standardBytes = standardFormat.encodeToByteArray(UnannotatedPayload .serializer(), payload)
245+ val optimizedBytes = optimizedFormat.encodeToByteArray(UnannotatedPayload .serializer(), payload)
246+
247+ // Standard size: 4 bytes (Int) + 8 bytes (Long) = 12 bytes
248+ assertEquals(12 , standardBytes.size)
249+
250+ // Optimized size: 1 byte (VarInt 5) + 1 byte (VarLong 10) = 2 bytes
251+ assertEquals(2 , optimizedBytes.size)
252+ assertTrue(optimizedBytes.size < standardBytes.size)
253+
254+ // Validate roundtrip
255+ val decoded = optimizedFormat.decodeFromByteArray(UnannotatedPayload .serializer(), optimizedBytes)
256+ assertEquals(payload, decoded)
257+ }
258+
259+ @Test
260+ fun `builder defaultZigZag reduces size for negative integers` () {
261+ // -1 without ZigZag takes 5 bytes for Int and 10 bytes for Long in standard VarInt encoding
262+ val payload = UnannotatedPayload (- 1 , - 1L )
263+
264+ val standardFormat = PackedFormat .Default
265+ val varIntFormat = PackedFormat { defaultVarInt = true }
266+ val zigZagFormat = PackedFormat { defaultZigZag = true }
267+
268+ val standardBytes = standardFormat.encodeToByteArray(UnannotatedPayload .serializer(), payload)
269+ val varIntBytes = varIntFormat.encodeToByteArray(UnannotatedPayload .serializer(), payload)
270+ val zigZagBytes = zigZagFormat.encodeToByteArray(UnannotatedPayload .serializer(), payload)
271+
272+ // Standard: 12 bytes
273+ assertEquals(12 , standardBytes.size)
274+ // Basic VarInt of negative numbers uses max bytes: 5 + 10 = 15 bytes
275+ assertEquals(15 , varIntBytes.size)
276+ // ZigZag folds -1 into 1, which takes 1 byte each: 1 + 1 = 2 bytes
277+ assertEquals(2 , zigZagBytes.size)
278+
279+ // Validate roundtrip
280+ val decoded = zigZagFormat.decodeFromByteArray(UnannotatedPayload .serializer(), zigZagBytes)
281+ assertEquals(payload, decoded)
282+ }
236283}
0 commit comments