1 package kotlinx.serialization.protobuf
2 
3 import kotlinx.serialization.HexConverter
4 import kotlinx.serialization.Serializable
5 import kotlinx.serialization.decodeFromByteArray
6 import kotlinx.serialization.encodeToByteArray
7 import kotlin.test.Test
8 import kotlin.test.assertEquals
9 
10 class ProtobufHugeClassTest {
11     @Serializable
12     data class Lists64(
13         val field0: List<Int>,
14         val field1: List<Int>,
15         val field2: List<Int>,
16         val field3: List<Int>,
17         val field4: List<Int>,
18         val field5: List<Int>,
19         val field6: List<Int>,
20         val field7: List<Int>,
21         val field8: List<Int>,
22         val field9: List<Int>,
23 
24         val field10: List<Int>,
25         val field11: List<Int>,
26         val field12: List<Int>,
27         val field13: List<Int>,
28         val field14: List<Int>,
29         val field15: List<Int>,
30         val field16: List<Int>,
31         val field17: List<Int>,
32         val field18: List<Int>,
33         val field19: List<Int>,
34 
35         val field20: List<Int>,
36         val field21: List<Int>,
37         val field22: List<Int>,
38         val field23: List<Int>,
39         val field24: List<Int>,
40         val field25: List<Int>,
41         val field26: List<Int>,
42         val field27: List<Int>,
43         val field28: List<Int>,
44         val field29: List<Int>,
45 
46         val field30: List<Int>,
47         val field31: List<Int>,
48         val field32: List<Int>,
49         val field33: List<Int>,
50         val field34: List<Int>,
51         val field35: List<Int>,
52         val field36: List<Int>,
53         val field37: List<Int>,
54         val field38: List<Int>,
55         val field39: List<Int>,
56 
57         val field40: List<Int>,
58         val field41: List<Int>,
59         val field42: List<Int>,
60         val field43: List<Int>,
61         val field44: List<Int>,
62         val field45: List<Int>,
63         val field46: List<Int>,
64         val field47: List<Int>,
65         val field48: List<Int>,
66         val field49: List<Int>,
67 
68         val field50: List<Int>,
69         val field51: List<Int>,
70         val field52: List<Int>,
71         val field53: List<Int>,
72         val field54: List<Int>,
73         val field55: List<Int>,
74         val field56: List<Int>,
75         val field57: List<Int>,
76         val field58: List<Int>,
77         val field59: List<Int>,
78 
79         val field60: List<Int>,
80         val field61: List<Int>,
81         val field62: List<Int>,
82         val field63: List<Int>
83     )
84 
85     @Serializable
86     data class Values70(
87         val field0: Int?,
88         val field1: Int?,
89         val field2: Int?,
90         val field3: Int?,
91         val field4: Int?,
92         val field5: Int?,
93         val field6: Int?,
94         val field7: Int?,
95         val field8: Int?,
96         val field9: Int?,
97 
98         val field10: Int?,
99         val field11: Int?,
100         val field12: Int?,
101         val field13: Int?,
102         val field14: Int?,
103         val field15: Int?,
104         val field16: Int?,
105         val field17: Int?,
106         val field18: Int?,
107         val field19: Int?,
108 
109         val field20: Int?,
110         val field21: Int?,
111         val field22: Int?,
112         val field23: Int?,
113         val field24: Int?,
114         val field25: Int?,
115         val field26: Int?,
116         val field27: Int?,
117         val field28: Int?,
118         val field29: Int?,
119 
120         val field30: Int?,
121         val field31: Int?,
122         val field32: Int?,
123         val field33: Int?,
124         val field34: Int?,
125         val field35: Int?,
126         val field36: Int?,
127         val field37: Int?,
128         val field38: Int?,
129         val field39: Int?,
130 
131         val field40: Int?,
132         val field41: Int?,
133         val field42: Int?,
134         val field43: Int?,
135         val field44: Int?,
136         val field45: Int?,
137         val field46: Int?,
138         val field47: Int?,
139         val field48: Int?,
140         val field49: Int?,
141 
142         val field50: Int?,
143         val field51: Int?,
144         val field52: Int?,
145         val field53: Int?,
146         val field54: Int?,
147         val field55: Int?,
148         val field56: Int?,
149         val field57: Int?,
150         val field58: Int?,
151         val field59: Int?,
152 
153         val field60: Int?,
154         val field61: Int?,
155         val field62: Int?,
156         val field63: Int?,
157         val field64: Int?,
158         val field65: Int?,
159         val field66: Int?,
160         val field67: Int?,
161         val field68: Int?,
162         val field69: Int?
163     )
164 
165     @Serializable
166     data class Values128(
167         val field0: Int?,
168         val field1: Int?,
169         val field2: Int?,
170         val field3: Int?,
171         val field4: Int?,
172         val field5: Int?,
173         val field6: Int?,
174         val field7: Int?,
175         val field8: Int?,
176         val field9: Int?,
177 
178         val field10: Int?,
179         val field11: Int?,
180         val field12: Int?,
181         val field13: Int?,
182         val field14: Int?,
183         val field15: Int?,
184         val field16: Int?,
185         val field17: Int?,
186         val field18: Int?,
187         val field19: Int?,
188 
189         val field20: Int?,
190         val field21: Int?,
191         val field22: Int?,
192         val field23: Int?,
193         val field24: Int?,
194         val field25: Int?,
195         val field26: Int?,
196         val field27: Int?,
197         val field28: Int?,
198         val field29: Int?,
199 
200         val field30: Int?,
201         val field31: Int?,
202         val field32: Int?,
203         val field33: Int?,
204         val field34: Int?,
205         val field35: Int?,
206         val field36: Int?,
207         val field37: Int?,
208         val field38: Int?,
209         val field39: Int?,
210 
211         val field40: Int?,
212         val field41: Int?,
213         val field42: Int?,
214         val field43: Int?,
215         val field44: Int?,
216         val field45: Int?,
217         val field46: Int?,
218         val field47: Int?,
219         val field48: Int?,
220         val field49: Int?,
221 
222         val field50: Int?,
223         val field51: Int?,
224         val field52: Int?,
225         val field53: Int?,
226         val field54: Int?,
227         val field55: Int?,
228         val field56: Int?,
229         val field57: Int?,
230         val field58: Int?,
231         val field59: Int?,
232 
233         val field60: Int?,
234         val field61: Int?,
235         val field62: Int?,
236         val field63: Int?,
237         val field64: Int?,
238         val field65: Int?,
239         val field66: Int?,
240         val field67: Int?,
241         val field68: Int?,
242         val field69: Int?,
243 
244         val field70: Int?,
245         val field71: Int?,
246         val field72: Int?,
247         val field73: Int?,
248         val field74: Int?,
249         val field75: Int?,
250         val field76: Int?,
251         val field77: Int?,
252         val field78: Int?,
253         val field79: Int?,
254 
255         val field80: Int?,
256         val field81: Int?,
257         val field82: Int?,
258         val field83: Int?,
259         val field84: Int?,
260         val field85: Int?,
261         val field86: Int?,
262         val field87: Int?,
263         val field88: Int?,
264         val field89: Int?,
265 
266         val field90: Int?,
267         val field91: Int?,
268         val field92: Int?,
269         val field93: Int?,
270         val field94: Int?,
271         val field95: Int?,
272         val field96: Int?,
273         val field97: Int?,
274         val field98: Int?,
275         val field99: Int?,
276 
277         val field100: Int?,
278         val field101: Int?,
279         val field102: Int?,
280         val field103: Int?,
281         val field104: Int?,
282         val field105: Int?,
283         val field106: Int?,
284         val field107: Int?,
285         val field108: Int?,
286         val field109: Int?,
287 
288         val field110: Int?,
289         val field111: Int?,
290         val field112: Int?,
291         val field113: Int?,
292         val field114: Int?,
293         val field115: Int?,
294         val field116: Int?,
295         val field117: Int?,
296         val field118: Int?,
297         val field119: Int?,
298 
299         val field120: Int?,
300         val field121: Int?,
301         val field122: Int?,
302         val field123: Int?,
303         val field124: Int?,
304         val field125: Int?,
305         val field126: Int?,
306         val field127: Int?
307     )
308     @Serializable
309     data class Values130(
310         val field0: Int?,
311         val field1: Int?,
312         val field2: Int?,
313         val field3: Int?,
314         val field4: Int?,
315         val field5: Int?,
316         val field6: Int?,
317         val field7: Int?,
318         val field8: Int?,
319         val field9: Int?,
320 
321         val field10: Int?,
322         val field11: Int?,
323         val field12: Int?,
324         val field13: Int?,
325         val field14: Int?,
326         val field15: Int?,
327         val field16: Int?,
328         val field17: Int?,
329         val field18: Int?,
330         val field19: Int?,
331 
332         val field20: Int?,
333         val field21: Int?,
334         val field22: Int?,
335         val field23: Int?,
336         val field24: Int?,
337         val field25: Int?,
338         val field26: Int?,
339         val field27: Int?,
340         val field28: Int?,
341         val field29: Int?,
342 
343         val field30: Int?,
344         val field31: Int?,
345         val field32: Int?,
346         val field33: Int?,
347         val field34: Int?,
348         val field35: Int?,
349         val field36: Int?,
350         val field37: Int?,
351         val field38: Int?,
352         val field39: Int?,
353 
354         val field40: Int?,
355         val field41: Int?,
356         val field42: Int?,
357         val field43: Int?,
358         val field44: Int?,
359         val field45: Int?,
360         val field46: Int?,
361         val field47: Int?,
362         val field48: Int?,
363         val field49: Int?,
364 
365         val field50: Int?,
366         val field51: Int?,
367         val field52: Int?,
368         val field53: Int?,
369         val field54: Int?,
370         val field55: Int?,
371         val field56: Int?,
372         val field57: Int?,
373         val field58: Int?,
374         val field59: Int?,
375 
376         val field60: Int?,
377         val field61: Int?,
378         val field62: Int?,
379         val field63: Int?,
380         val field64: Int?,
381         val field65: Int?,
382         val field66: Int?,
383         val field67: Int?,
384         val field68: Int?,
385         val field69: Int?,
386 
387         val field70: Int?,
388         val field71: Int?,
389         val field72: Int?,
390         val field73: Int?,
391         val field74: Int?,
392         val field75: Int?,
393         val field76: Int?,
394         val field77: Int?,
395         val field78: Int?,
396         val field79: Int?,
397 
398         val field80: Int?,
399         val field81: Int?,
400         val field82: Int?,
401         val field83: Int?,
402         val field84: Int?,
403         val field85: Int?,
404         val field86: Int?,
405         val field87: Int?,
406         val field88: Int?,
407         val field89: Int?,
408 
409         val field90: Int?,
410         val field91: Int?,
411         val field92: Int?,
412         val field93: Int?,
413         val field94: Int?,
414         val field95: Int?,
415         val field96: Int?,
416         val field97: Int?,
417         val field98: Int?,
418         val field99: Int?,
419 
420         val field100: Int?,
421         val field101: Int?,
422         val field102: Int?,
423         val field103: Int?,
424         val field104: Int?,
425         val field105: Int?,
426         val field106: Int?,
427         val field107: Int?,
428         val field108: Int?,
429         val field109: Int?,
430 
431         val field110: Int?,
432         val field111: Int?,
433         val field112: Int?,
434         val field113: Int?,
435         val field114: Int?,
436         val field115: Int?,
437         val field116: Int?,
438         val field117: Int?,
439         val field118: Int?,
440         val field119: Int?,
441 
442         val field120: Int?,
443         val field121: Int?,
444         val field122: Int?,
445         val field123: Int?,
446         val field124: Int?,
447         val field125: Int?,
448         val field126: Int?,
449         val field127: Int?,
450         val field128: Int?,
451         val field129: Int?
452     )
453 
454     private val lists64: Lists64 =
455         Lists64(
456             emptyList(),
457             listOf(1, 42),
458             emptyList(),
459             emptyList(),
460             emptyList(),
461             emptyList(),
462             emptyList(),
463             emptyList(),
464             emptyList(),
465             emptyList(),
466 
467             emptyList(),
468             emptyList(),
469             listOf(12, 43),
470             emptyList(),
471             emptyList(),
472             emptyList(),
473             emptyList(),
474             emptyList(),
475             emptyList(),
476             emptyList(),
477 
478             emptyList(),
479             emptyList(),
480             emptyList(),
481             emptyList(),
482             emptyList(),
483             emptyList(),
484             emptyList(),
485             emptyList(),
486             emptyList(),
487             emptyList(),
488 
489             emptyList(),
490             emptyList(),
491             emptyList(),
492             emptyList(),
493             emptyList(),
494             emptyList(),
495             emptyList(),
496             emptyList(),
497             emptyList(),
498             emptyList(),
499 
500             emptyList(),
501             emptyList(),
502             emptyList(),
503             emptyList(),
504             emptyList(),
505             emptyList(),
506             emptyList(),
507             emptyList(),
508             emptyList(),
509             emptyList(),
510 
511             emptyList(),
512             emptyList(),
513             emptyList(),
514             emptyList(),
515             emptyList(),
516             emptyList(),
517             emptyList(),
518             emptyList(),
519             emptyList(),
520             emptyList(),
521 
522             emptyList(),
523             emptyList(),
524             emptyList(),
525             emptyList()
526         )
527 
528     private val values70: Values70 = Values70(
529         null, null, null, 3, null, null, null, null, null, null,
530         null, null, null, null, null, null, null, null, null, null,
531         null, null, null, null, null, null, null, null, null, null,
532         null, null, null, null, null, null, null, null, null, null,
533         null, null, 42, null, null, null, null, null, null, null,
534         null, null, null, null, null, null, null, null, null, null,
535         null, null, null, null, null, null, 66, null, null, null
536     )
537 
538     private val values128: Values128 = Values128(
539         null, null, null, 3, null, null, null, null, null, null,
540         null, null, null, null, null, null, null, null, null, null,
541         null, null, null, null, null, null, null, null, null, null,
542         null, null, null, null, null, null, null, null, null, null,
543         null, null, 42, null, null, null, null, null, null, null,
544         null, null, null, null, null, null, null, null, null, null,
545         null, null, null, null, null, null, 66, null, null, null,
546         null, null, null, null, null, null, null, null, null, null,
547         null, null, null, null, null, null, null, null, null, null,
548         null, null, null, null, null, null, null, null, null, null,
549         null, null, null, null, null, null, null, null, null, null,
550         null, null, null, null, null, 115, null, null, null, null,
551         null, null, null, null, null, null, null, null
552     )
553 
554     private val values130: Values130 = Values130(
555         null, null, null, 3, null, null, null, null, null, null,
556         null, null, null, null, null, null, null, null, null, null,
557         null, null, null, null, null, null, null, null, null, null,
558         null, null, null, null, null, null, null, null, null, null,
559         null, null, 42, null, null, null, null, null, null, null,
560         null, null, null, null, null, null, null, null, null, null,
561         null, null, null, null, null, null, 66, null, null, null,
562         null, null, null, null, null, null, null, null, null, null,
563         null, null, null, null, null, null, null, null, null, null,
564         null, null, null, null, null, null, null, null, null, null,
565         null, null, null, null, null, null, null, null, null, null,
566         null, null, null, null, null, 115, null, null, null, null,
567         null, null, null, null, null, null, null, null, 128, null
568     )
569 
570     @Test
testLists64null571     fun testLists64() {
572         val bytes = ProtoBuf.encodeToByteArray(lists64)
573         println(HexConverter.printHexBinary(bytes))
574 
575         val decoded = ProtoBuf.decodeFromByteArray<Lists64>(bytes)
576         assertEquals(lists64, decoded)
577     }
578 
579     @Test
testValues70null580     fun testValues70() {
581         val bytes = ProtoBuf.encodeToByteArray(values70)
582         println(HexConverter.printHexBinary(bytes))
583 
584         val decoded = ProtoBuf.decodeFromByteArray<Values70>(bytes)
585         assertEquals(values70, decoded)
586     }
587 
588     @Test
testValues128null589     fun testValues128() {
590         val bytes = ProtoBuf.encodeToByteArray(values128)
591         println(HexConverter.printHexBinary(bytes))
592 
593         val decoded = ProtoBuf.decodeFromByteArray<Values128>(bytes)
594         assertEquals(values128, decoded)
595     }
596 
597     @Test
testValues130null598     fun testValues130() {
599         val bytes = ProtoBuf.encodeToByteArray(values130)
600         println(HexConverter.printHexBinary(bytes))
601 
602         val decoded = ProtoBuf.decodeFromByteArray<Values130>(bytes)
603         assertEquals(values130, decoded)
604     }
605 }
606