xref: /aosp_15_r20/external/flatbuffers/tests/KotlinTest.kt (revision 890232f25432b36107d06881e0a25aaa6b473652)
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