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