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 17 import DictionaryLookup.*; 18 import MyGame.Example.* 19 import optional_scalars.* 20 import com.google.flatbuffers.ByteBufferUtil 21 import com.google.flatbuffers.FlatBufferBuilder 22 import NamespaceA.* 23 import NamespaceA.NamespaceB.* 24 import NamespaceA.NamespaceB.TableInNestedNS 25 import java.io.File 26 import java.io.FileOutputStream 27 import java.io.InputStream 28 import java.io.RandomAccessFile 29 import java.nio.ByteBuffer 30 import java.nio.ByteOrder 31 import java.nio.channels.FileChannel 32 33 import com.google.flatbuffers.Constants.SIZE_PREFIX_LENGTH 34 35 @kotlin.ExperimentalUnsignedTypes 36 class KotlinTest { 37 38 companion object { 39 @JvmStatic mainnull40 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 TestDictionaryLookupnull87 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 TestEnumsnull106 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 TestBuffernull113 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 TestExtendedBuffernull168 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 TestNamespaceNestingnull176 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 TestNestedFlatBuffernull188 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 TestCreateByteVectornull223 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 TestCreateUninitializedVectornull240 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 TestByteBufferFactorynull261 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 TestSizedInputStreamnull285 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 TestBuilderBasicsnull310 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 TestVectorOfUnionsnull454 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 TestSharedStringPoolnull484 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 TestScalarOptionalnull493 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 } 623