1/*
2 * Copyright 2014 Google Inc. All rights reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import DictionaryLookup.*;
18import MyGame.Example.*
19import optional_scalars.*
20import com.google.flatbuffers.ByteBufferUtil
21import com.google.flatbuffers.FlatBufferBuilder
22import NamespaceA.*
23import NamespaceA.NamespaceB.*
24import NamespaceA.NamespaceB.TableInNestedNS
25import java.io.File
26import java.io.FileOutputStream
27import java.io.InputStream
28import java.io.RandomAccessFile
29import java.nio.ByteBuffer
30import java.nio.ByteOrder
31import java.nio.channels.FileChannel
32
33import com.google.flatbuffers.Constants.SIZE_PREFIX_LENGTH
34
35@kotlin.ExperimentalUnsignedTypes
36class KotlinTest {
37
38 companion object {
39 @JvmStatic
40 fun main(args: Array<String>) {
41
42 // First, let's test reading a FlatBuffer generated by C++ code:
43 // This file was generated from monsterdata_test.json
44
45 val data = RandomAccessFile(File("monsterdata_test.mon"), "r").use {
46 val temp = ByteArray(it.length().toInt())
47 it.readFully(temp)
48 temp
49 }
50
51 // Now test it:
52
53 val bb = ByteBuffer.wrap(data)
54 TestBuffer(bb)
55
56 // Second, let's create a FlatBuffer from scratch in Java, and test it also.
57 // We use an initial size of 1 to exercise the reallocation algorithm,
58 // normally a size larger than the typical FlatBuffer you generate would be
59 // better for performance.
60 val fbb = FlatBufferBuilder(1)
61
62 TestBuilderBasics(fbb, true)
63 TestBuilderBasics(fbb, false)
64
65 TestExtendedBuffer(fbb.dataBuffer().asReadOnlyBuffer())
66
67 TestNamespaceNesting()
68
69 TestNestedFlatBuffer()
70
71 TestCreateByteVector()
72
73 TestCreateUninitializedVector()
74
75 TestByteBufferFactory()
76
77 TestSizedInputStream()
78
79 TestVectorOfUnions()
80
81 TestSharedStringPool()
82 TestScalarOptional()
83 TestDictionaryLookup()
84 println("FlatBuffers test: completed successfully")
85 }
86
87 fun TestDictionaryLookup() {
88 val fbb = FlatBufferBuilder(16)
89 val lfIndex = LongFloatEntry.createLongFloatEntry(fbb, 0, 99.0f)
90 val vectorEntriesIdx = LongFloatMap.createEntriesVector(fbb, intArrayOf(lfIndex))
91 val rootIdx = LongFloatMap.createLongFloatMap(fbb, vectorEntriesIdx)
92
93 LongFloatMap.finishLongFloatMapBuffer(fbb, rootIdx)
94 val map = LongFloatMap.getRootAsLongFloatMap(fbb.dataBuffer())
95 assert(map.entriesLength == 1)
96
97 val e = map.entries(0)!!
98 assert(e.key == 0L)
99 assert(e.value == 99.0f)
100
101 val e2 = map.entriesByKey(0)!!
102 assert(e2.key == 0L)
103 assert(e2.value == 99.0f)
104 }
105
106 fun TestEnums() {
107 assert(Color.name(Color.Red.toInt()) == "Red")
108 assert(Color.name(Color.Blue.toInt()) == "Blue")
109 assert(Any_.name(Any_.NONE.toInt()) == "NONE")
110 assert(Any_.name(Any_.Monster.toInt()) == "Monster")
111 }
112
113 fun TestBuffer(bb: ByteBuffer) {
114 assert(Monster.MonsterBufferHasIdentifier(bb) == true)
115
116 val monster = Monster.getRootAsMonster(bb)
117
118 assert(monster.hp == 80.toShort())
119 assert(monster.mana == 150.toShort()) // default
120
121 assert(monster.name == "MyMonster")
122 // monster.friendly() // can't access, deprecated
123
124 val pos = monster.pos!!
125 assert(pos.x == 1.0f)
126 assert(pos.y == 2.0f)
127 assert(pos.z == 3.0f)
128 assert(pos.test1 == 3.0)
129 // issue: int != byte
130 assert(pos.test2 == Color.Green)
131 val t = pos.test3!!
132 assert(t.a == 5.toShort())
133 assert(t.b == 6.toByte())
134
135 assert(monster.testType == Any_.Monster)
136 val monster2 = Monster()
137 assert(monster.test(monster2) != null == true)
138 assert(monster2.name == "Fred")
139
140 assert(monster.inventoryLength == 5)
141 var invsum = 0u
142 for (i in 0 until monster.inventoryLength)
143 invsum += monster.inventory(i)
144 assert(invsum == 10u)
145
146 // Alternative way of accessing a vector:
147 val ibb = monster.inventoryAsByteBuffer
148 invsum = 0u
149 while (ibb.position() < ibb.limit())
150 invsum += ibb.get().toUInt()
151 assert(invsum == 10u)
152
153
154 val test_0 = monster.test4(0)!!
155 val test_1 = monster.test4(1)!!
156 assert(monster.test4Length == 2)
157 assert(test_0.a + test_0.b + test_1.a + test_1.b == 100)
158
159 assert(monster.testarrayofstringLength == 2)
160 assert(monster.testarrayofstring(0) == "test1")
161 assert(monster.testarrayofstring(1) == "test2")
162
163 assert(monster.testbool == true)
164 }
165
166 // this method checks additional fields not present in the binary buffer read from file
167 // these new tests are performed on top of the regular tests
168 fun TestExtendedBuffer(bb: ByteBuffer) {
169 TestBuffer(bb)
170
171 val monster = Monster.getRootAsMonster(bb)
172
173 assert(monster.testhashu32Fnv1 == (Integer.MAX_VALUE + 1L).toUInt())
174 }
175
176 fun TestNamespaceNesting() {
177 // reference / manipulate these to verify compilation
178 val fbb = FlatBufferBuilder(1)
179
180 TableInNestedNS.startTableInNestedNS(fbb)
181 TableInNestedNS.addFoo(fbb, 1234)
182 val nestedTableOff = TableInNestedNS.endTableInNestedNS(fbb)
183
184 TableInFirstNS.startTableInFirstNS(fbb)
185 TableInFirstNS.addFooTable(fbb, nestedTableOff)
186 }
187
188 fun TestNestedFlatBuffer() {
189 val nestedMonsterName = "NestedMonsterName"
190 val nestedMonsterHp: Short = 600
191 val nestedMonsterMana: Short = 1024
192
193 var fbb1: FlatBufferBuilder? = FlatBufferBuilder(16)
194 val str1 = fbb1!!.createString(nestedMonsterName)
195 Monster.startMonster(fbb1)
196 Monster.addName(fbb1, str1)
197 Monster.addHp(fbb1, nestedMonsterHp)
198 Monster.addMana(fbb1, nestedMonsterMana)
199 val monster1 = Monster.endMonster(fbb1)
200 Monster.finishMonsterBuffer(fbb1, monster1)
201 val fbb1Bytes = fbb1.sizedByteArray()
202
203 val fbb2 = FlatBufferBuilder(16)
204 val str2 = fbb2.createString("My Monster")
205 val nestedBuffer = Monster.createTestnestedflatbufferVector(fbb2, fbb1Bytes.asUByteArray())
206 Monster.startMonster(fbb2)
207 Monster.addName(fbb2, str2)
208 Monster.addHp(fbb2, 50.toShort())
209 Monster.addMana(fbb2, 32.toShort())
210 Monster.addTestnestedflatbuffer(fbb2, nestedBuffer)
211 val monster = Monster.endMonster(fbb2)
212 Monster.finishMonsterBuffer(fbb2, monster)
213
214 // Now test the data extracted from the nested buffer
215 val mons = Monster.getRootAsMonster(fbb2.dataBuffer())
216 val nestedMonster = mons.testnestedflatbufferAsMonster!!
217
218 assert(nestedMonsterMana == nestedMonster.mana)
219 assert(nestedMonsterHp == nestedMonster.hp)
220 assert(nestedMonsterName == nestedMonster.name)
221 }
222
223 fun TestCreateByteVector() {
224 val fbb = FlatBufferBuilder(16)
225 val str = fbb.createString("MyMonster")
226 val inventory = byteArrayOf(0, 1, 2, 3, 4)
227 val vec = fbb.createByteVector(inventory)
228 Monster.startMonster(fbb)
229 Monster.addInventory(fbb, vec)
230 Monster.addName(fbb, str)
231 val monster1 = Monster.endMonster(fbb)
232 Monster.finishMonsterBuffer(fbb, monster1)
233 val monsterObject = Monster.getRootAsMonster(fbb.dataBuffer())
234
235 assert(monsterObject.inventory(1) == inventory[1].toUByte())
236 assert(monsterObject.inventoryLength == inventory.size)
237 assert(ByteBuffer.wrap(inventory) == monsterObject.inventoryAsByteBuffer)
238 }
239
240 fun TestCreateUninitializedVector() {
241 val fbb = FlatBufferBuilder(16)
242 val str = fbb.createString("MyMonster")
243 val inventory = byteArrayOf(0, 1, 2, 3, 4)
244 val bb = fbb.createUnintializedVector(1, inventory.size, 1)
245 for (i in inventory) {
246 bb.put(i)
247 }
248 val vec = fbb.endVector()
249 Monster.startMonster(fbb)
250 Monster.addInventory(fbb, vec)
251 Monster.addName(fbb, str)
252 val monster1 = Monster.endMonster(fbb)
253 Monster.finishMonsterBuffer(fbb, monster1)
254 val monsterObject = Monster.getRootAsMonster(fbb.dataBuffer())
255
256 assert(monsterObject.inventory(1) == inventory[1].toUByte())
257 assert(monsterObject.inventoryLength == inventory.size)
258 assert(ByteBuffer.wrap(inventory) == monsterObject.inventoryAsByteBuffer)
259 }
260
261 fun TestByteBufferFactory() {
262 class MappedByteBufferFactory : FlatBufferBuilder.ByteBufferFactory() {
263 override fun newByteBuffer(capacity: Int): ByteBuffer? {
264 var bb: ByteBuffer?
265 try {
266 bb = RandomAccessFile("javatest.bin", "rw").channel.map(
267 FileChannel.MapMode.READ_WRITE,
268 0,
269 capacity.toLong()
270 ).order(ByteOrder.LITTLE_ENDIAN)
271 } catch (e: Throwable) {
272 println("FlatBuffers test: couldn't map ByteBuffer to a file")
273 bb = null
274 }
275
276 return bb
277 }
278 }
279
280 val fbb = FlatBufferBuilder(1, MappedByteBufferFactory())
281
282 TestBuilderBasics(fbb, false)
283 }
284
285 fun TestSizedInputStream() {
286 // Test on default FlatBufferBuilder that uses HeapByteBuffer
287 val fbb = FlatBufferBuilder(1)
288
289 TestBuilderBasics(fbb, false)
290
291 val `in` = fbb.sizedInputStream()
292 val array = fbb.sizedByteArray()
293 var count = 0
294 var currentVal = 0
295
296 while (currentVal != -1 && count < array.size) {
297 try {
298 currentVal = `in`.read()
299 } catch (e: java.io.IOException) {
300 println("FlatBuffers test: couldn't read from InputStream")
301 return
302 }
303
304 assert(currentVal.toByte() == array[count])
305 count++
306 }
307 assert(count == array.size)
308 }
309
310 fun TestBuilderBasics(fbb: FlatBufferBuilder, sizePrefix: Boolean) {
311 val names = intArrayOf(fbb.createString("Frodo"), fbb.createString("Barney"), fbb.createString("Wilma"))
312 val off = IntArray(3)
313 Monster.startMonster(fbb)
314 Monster.addName(fbb, names[0])
315 off[0] = Monster.endMonster(fbb)
316 Monster.startMonster(fbb)
317 Monster.addName(fbb, names[1])
318 off[1] = Monster.endMonster(fbb)
319 Monster.startMonster(fbb)
320 Monster.addName(fbb, names[2])
321 off[2] = Monster.endMonster(fbb)
322 val sortMons = fbb.createSortedVectorOfTables(Monster(), off)
323
324 // We set up the same values as monsterdata.json:
325
326 val str = fbb.createString("MyMonster")
327
328 val inv = Monster.createInventoryVector(fbb, byteArrayOf(0, 1, 2, 3, 4).asUByteArray())
329
330 val fred = fbb.createString("Fred")
331 Monster.startMonster(fbb)
332 Monster.addName(fbb, fred)
333 val mon2 = Monster.endMonster(fbb)
334
335 Monster.startTest4Vector(fbb, 2)
336 Test.createTest(fbb, 10.toShort(), 20.toByte())
337 Test.createTest(fbb, 30.toShort(), 40.toByte())
338 val test4 = fbb.endVector()
339
340 val testArrayOfString =
341 Monster.createTestarrayofstringVector(fbb, intArrayOf(fbb.createString("test1"), fbb.createString("test2")))
342
343 Monster.startMonster(fbb)
344 Monster.addPos(
345 fbb, Vec3.createVec3(
346 fbb, 1.0f, 2.0f, 3.0f, 3.0,
347 Color.Green, 5.toShort(), 6.toByte()
348 )
349 )
350 Monster.addHp(fbb, 80.toShort())
351 Monster.addName(fbb, str)
352 Monster.addInventory(fbb, inv)
353 Monster.addTestType(fbb, Any_.Monster)
354 Monster.addTest(fbb, mon2)
355 Monster.addTest4(fbb, test4)
356 Monster.addTestarrayofstring(fbb, testArrayOfString)
357 Monster.addTestbool(fbb, true)
358 Monster.addTesthashu32Fnv1(fbb, (Integer.MAX_VALUE + 1L).toUInt())
359 Monster.addTestarrayoftables(fbb, sortMons)
360 val mon = Monster.endMonster(fbb)
361
362 if (sizePrefix) {
363 Monster.finishSizePrefixedMonsterBuffer(fbb, mon)
364 } else {
365 Monster.finishMonsterBuffer(fbb, mon)
366 }
367
368 // Write the result to a file for debugging purposes:
369 // Note that the binaries are not necessarily identical, since the JSON
370 // parser may serialize in a slightly different order than the above
371 // Java code. They are functionally equivalent though.
372
373 try {
374 val filename = "monsterdata_java_wire" + (if (sizePrefix) "_sp" else "") + ".mon"
375 val fc = FileOutputStream(filename).channel
376 fc.write(fbb.dataBuffer().duplicate())
377 fc.close()
378 } catch (e: java.io.IOException) {
379 println("FlatBuffers test: couldn't write file")
380 return
381 }
382
383 // Test it:
384 var dataBuffer = fbb.dataBuffer()
385 if (sizePrefix) {
386 assert(
387 ByteBufferUtil.getSizePrefix(dataBuffer) + SIZE_PREFIX_LENGTH ==
388 dataBuffer.remaining()
389 )
390 dataBuffer = ByteBufferUtil.removeSizePrefix(dataBuffer)
391 }
392 TestExtendedBuffer(dataBuffer)
393
394 // Make sure it also works with read only ByteBuffers. This is slower,
395 // since creating strings incurs an additional copy
396 // (see Table.__string).
397 TestExtendedBuffer(dataBuffer.asReadOnlyBuffer())
398
399 TestEnums()
400
401 //Attempt to mutate Monster fields and check whether the buffer has been mutated properly
402 // revert to original values after testing
403 val monster = Monster.getRootAsMonster(dataBuffer)
404
405 // mana is optional and does not exist in the buffer so the mutation should fail
406 // the mana field should retain its default value
407 assert(monster.mutateMana(10.toShort()) == false)
408 assert(monster.mana == 150.toShort())
409
410 // Accessing a vector of sorted by the key tables
411 assert(monster.testarrayoftables(0)!!.name == "Barney")
412 assert(monster.testarrayoftables(1)!!.name == "Frodo")
413 assert(monster.testarrayoftables(2)!!.name == "Wilma")
414
415 // Example of searching for a table by the key
416 assert(monster.testarrayoftablesByKey("Frodo")!!.name == "Frodo")
417 assert(monster.testarrayoftablesByKey("Barney")!!.name == "Barney")
418 assert(monster.testarrayoftablesByKey("Wilma")!!.name == "Wilma")
419
420 // testType is an existing field and mutating it should succeed
421 assert(monster.testType == Any_.Monster)
422 assert(monster.mutateTestType(Any_.NONE) == true)
423 assert(monster.testType == Any_.NONE)
424 assert(monster.mutateTestType(Any_.Monster) == true)
425 assert(monster.testType == Any_.Monster)
426
427 //mutate the inventory vector
428 assert(monster.mutateInventory(0, 1u) == true)
429 assert(monster.mutateInventory(1, 2u) == true)
430 assert(monster.mutateInventory(2, 3u) == true)
431 assert(monster.mutateInventory(3, 4u) == true)
432 assert(monster.mutateInventory(4, 5u) == true)
433
434 for (i in 0 until monster.inventoryLength) {
435 assert(monster.inventory(i) == (i.toUByte() + 1u).toUByte())
436 }
437
438 //reverse mutation
439 assert(monster.mutateInventory(0, 0u) == true)
440 assert(monster.mutateInventory(1, 1u) == true)
441 assert(monster.mutateInventory(2, 2u) == true)
442 assert(monster.mutateInventory(3, 3u) == true)
443 assert(monster.mutateInventory(4, 4u) == true)
444
445 // get a struct field and edit one of its fields
446 val pos = monster.pos!!
447 assert(pos.x == 1.0f)
448 pos.mutateX(55.0f)
449 assert(pos.x == 55.0f)
450 pos.mutateX(1.0f)
451 assert(pos.x == 1.0f)
452 }
453
454 fun TestVectorOfUnions() {
455 val fbb = FlatBufferBuilder()
456
457 val swordAttackDamage = 1
458
459 val characterVector = intArrayOf(Attacker.createAttacker(fbb, swordAttackDamage))
460
461 val characterTypeVector = ubyteArrayOf(Character_.MuLan)
462
463 Movie.finishMovieBuffer(
464 fbb,
465 Movie.createMovie(
466 fbb,
467 0u,
468 0,
469 Movie.createCharactersTypeVector(fbb, characterTypeVector),
470 Movie.createCharactersVector(fbb, characterVector)
471 )
472 )
473
474 val movie = Movie.getRootAsMovie(fbb.dataBuffer())
475
476 assert(movie.charactersTypeLength == characterTypeVector.size)
477 assert(movie.charactersLength == characterVector.size)
478
479 assert(movie.charactersType(0) == characterTypeVector[0])
480
481 assert((movie.characters(Attacker(), 0) as Attacker).swordAttackDamage == swordAttackDamage)
482 }
483
484 fun TestSharedStringPool() {
485 val fb = FlatBufferBuilder(1);
486 val testString = "My string";
487 val offset = fb.createSharedString(testString);
488 for (i in 0..10) {
489 assert(offset == fb.createSharedString(testString));
490 }
491 }
492
493 fun TestScalarOptional() {
494 val fbb = FlatBufferBuilder(1)
495 ScalarStuff.startScalarStuff(fbb)
496 var pos = ScalarStuff.endScalarStuff(fbb)
497 fbb.finish(pos)
498
499 var scalarStuff = ScalarStuff.getRootAsScalarStuff(fbb.dataBuffer())
500
501 assert(scalarStuff.justI8 == 0.toByte())
502 assert(scalarStuff.maybeI8 == null)
503 assert(scalarStuff.defaultI8 == 42.toByte())
504 assert(scalarStuff.justU8 == 0.toUByte())
505 assert(scalarStuff.maybeU8 == null)
506 assert(scalarStuff.defaultU8 == 42.toUByte())
507 assert(scalarStuff.justI16 == 0.toShort())
508 assert(scalarStuff.maybeI16 == null)
509 assert(scalarStuff.defaultI16 == 42.toShort())
510 assert(scalarStuff.justU16 == 0.toUShort())
511 assert(scalarStuff.maybeU16 == null)
512 assert(scalarStuff.defaultU16 == 42.toUShort())
513 assert(scalarStuff.justI32 == 0)
514 assert(scalarStuff.maybeI32 == null)
515 assert(scalarStuff.defaultI32 == 42)
516 assert(scalarStuff.justU32 == 0.toUInt())
517 assert(scalarStuff.maybeU32 == null)
518 assert(scalarStuff.defaultU32 == 42U)
519 assert(scalarStuff.justI64 == 0L)
520 assert(scalarStuff.maybeI64 == null)
521 assert(scalarStuff.defaultI64 == 42L)
522 assert(scalarStuff.justU64 == 0UL)
523 assert(scalarStuff.maybeU64 == null)
524 assert(scalarStuff.defaultU64 == 42UL)
525 assert(scalarStuff.justF32 == 0.0f)
526 assert(scalarStuff.maybeF32 == null)
527 assert(scalarStuff.defaultF32 == 42.0f)
528 assert(scalarStuff.justF64 == 0.0)
529 assert(scalarStuff.maybeF64 == null)
530 assert(scalarStuff.defaultF64 == 42.0)
531 assert(scalarStuff.justBool == false)
532 assert(scalarStuff.maybeBool == null)
533 assert(scalarStuff.defaultBool == true)
534 assert(scalarStuff.justEnum == OptionalByte.None)
535 assert(scalarStuff.maybeEnum == null)
536 assert(scalarStuff.defaultEnum == OptionalByte.One)
537
538 fbb.clear()
539
540 ScalarStuff.startScalarStuff(fbb)
541 ScalarStuff.addJustI8(fbb, 5.toByte())
542 ScalarStuff.addMaybeI8(fbb, 5.toByte())
543 ScalarStuff.addDefaultI8(fbb, 5.toByte())
544 ScalarStuff.addJustU8(fbb, 6.toUByte())
545 ScalarStuff.addMaybeU8(fbb, 6.toUByte())
546 ScalarStuff.addDefaultU8(fbb, 6.toUByte())
547 ScalarStuff.addJustI16(fbb, 7.toShort())
548 ScalarStuff.addMaybeI16(fbb, 7.toShort())
549 ScalarStuff.addDefaultI16(fbb, 7.toShort())
550 ScalarStuff.addJustU16(fbb, 8.toUShort())
551 ScalarStuff.addMaybeU16(fbb, 8.toUShort())
552 ScalarStuff.addDefaultU16(fbb, 8.toUShort())
553 ScalarStuff.addJustI32(fbb, 9)
554 ScalarStuff.addMaybeI32(fbb, 9)
555 ScalarStuff.addDefaultI32(fbb, 9)
556 ScalarStuff.addJustU32(fbb, 10.toUInt())
557 ScalarStuff.addMaybeU32(fbb, 10.toUInt())
558 ScalarStuff.addDefaultU32(fbb, 10.toUInt())
559 ScalarStuff.addJustI64(fbb, 11L)
560 ScalarStuff.addMaybeI64(fbb, 11L)
561 ScalarStuff.addDefaultI64(fbb, 11L)
562 ScalarStuff.addJustU64(fbb, 12UL)
563 ScalarStuff.addMaybeU64(fbb, 12UL)
564 ScalarStuff.addDefaultU64(fbb, 12UL)
565 ScalarStuff.addJustF32(fbb, 13.0f)
566 ScalarStuff.addMaybeF32(fbb, 13.0f)
567 ScalarStuff.addDefaultF32(fbb, 13.0f)
568 ScalarStuff.addJustF64(fbb, 14.0)
569 ScalarStuff.addMaybeF64(fbb, 14.0)
570 ScalarStuff.addDefaultF64(fbb, 14.0)
571 ScalarStuff.addJustBool(fbb, true)
572 ScalarStuff.addMaybeBool(fbb, true)
573 ScalarStuff.addDefaultBool(fbb, true)
574 ScalarStuff.addJustEnum(fbb, OptionalByte.Two)
575 ScalarStuff.addMaybeEnum(fbb, OptionalByte.Two)
576 ScalarStuff.addDefaultEnum(fbb, OptionalByte.Two)
577
578 pos = ScalarStuff.endScalarStuff(fbb)
579
580 fbb.finish(pos)
581
582 scalarStuff = ScalarStuff.getRootAsScalarStuff(fbb.dataBuffer())
583
584 assert(scalarStuff.justI8 == 5.toByte())
585 assert(scalarStuff.maybeI8 == 5.toByte())
586 assert(scalarStuff.defaultI8 == 5.toByte())
587 assert(scalarStuff.justU8 == 6.toUByte())
588 assert(scalarStuff.maybeU8 == 6.toUByte())
589 assert(scalarStuff.defaultU8 == 6.toUByte())
590 assert(scalarStuff.justI16 == 7.toShort())
591 assert(scalarStuff.maybeI16 == 7.toShort())
592 assert(scalarStuff.defaultI16 == 7.toShort())
593 assert(scalarStuff.justU16 == 8.toUShort())
594 assert(scalarStuff.maybeU16 == 8.toUShort())
595 assert(scalarStuff.defaultU16 == 8.toUShort())
596 assert(scalarStuff.justI32 == 9)
597 assert(scalarStuff.maybeI32 == 9)
598 assert(scalarStuff.defaultI32 == 9)
599 assert(scalarStuff.justU32 == 10u)
600 assert(scalarStuff.maybeU32 == 10u)
601 assert(scalarStuff.defaultU32 == 10u)
602 assert(scalarStuff.justI64 == 11L)
603 assert(scalarStuff.maybeI64 == 11L)
604 assert(scalarStuff.defaultI64 == 11L)
605 assert(scalarStuff.justU64 == 12UL)
606 assert(scalarStuff.maybeU64 == 12UL)
607 assert(scalarStuff.defaultU64 == 12UL)
608 assert(scalarStuff.justF32 == 13.0f)
609 assert(scalarStuff.maybeF32 == 13.0f)
610 assert(scalarStuff.defaultF32 == 13.0f)
611 assert(scalarStuff.justF64 == 14.0)
612 assert(scalarStuff.maybeF64 == 14.0)
613 assert(scalarStuff.defaultF64 == 14.0)
614 assert(scalarStuff.justBool == true)
615 assert(scalarStuff.maybeBool == true)
616 assert(scalarStuff.defaultBool == true)
617 assert(scalarStuff.justEnum == OptionalByte.Two)
618 assert(scalarStuff.maybeEnum == OptionalByte.Two)
619 assert(scalarStuff.defaultEnum == OptionalByte.Two)
620 }
621 }
622}
View as plain text