...

Text file src/github.com/google/flatbuffers/tests/KotlinTest.kt

Documentation: github.com/google/flatbuffers/tests

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

View as plain text