1*890232f2SAndroid Build Coastguard Worker /* 2*890232f2SAndroid Build Coastguard Worker * Copyright 2021 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 Foundation 18*890232f2SAndroid Build Coastguard Worker import XCTest 19*890232f2SAndroid Build Coastguard Worker @testable import FlatBuffers 20*890232f2SAndroid Build Coastguard Worker 21*890232f2SAndroid Build Coastguard Worker typealias Test = MyGame_Example_Test 22*890232f2SAndroid Build Coastguard Worker typealias Monster = MyGame_Example_Monster 23*890232f2SAndroid Build Coastguard Worker typealias Vec3 = MyGame_Example_Vec3 24*890232f2SAndroid Build Coastguard Worker typealias Stat = MyGame_Example_Stat 25*890232f2SAndroid Build Coastguard Worker 26*890232f2SAndroid Build Coastguard Worker class FlatBuffersMonsterWriterTests: XCTestCase { 27*890232f2SAndroid Build Coastguard Worker testDatanull28*890232f2SAndroid Build Coastguard Worker func testData() { 29*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 30*890232f2SAndroid Build Coastguard Worker let data: [UInt8] = [48, 0, 0, 0, 77, 79, 78, 83, 0, 0, 0, 0, 36, 0, 72, 0, 40, 0, 0, 0, 38, 0, 32, 0, 0, 0, 28, 0, 0, 0, 27, 0, 20, 0, 16, 0, 12, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 36, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 68, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 120, 0, 0, 0, 0, 0, 80, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0, 2, 0, 0, 0, 64, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 30, 0, 40, 0, 10, 0, 20, 0, 152, 255, 255, 255, 4, 0, 0, 0, 4, 0, 0, 0, 70, 114, 101, 100, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 50, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 49, 0, 0, 0, 9, 0, 0, 0, 77, 121, 77, 111, 110, 115, 116, 101, 114, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 4, 0, 0, 0, 240, 255, 255, 255, 32, 0, 0, 0, 248, 255, 255, 255, 36, 0, 0, 0, 12, 0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 12, 0, 0, 0, 28, 0, 0, 0, 5, 0, 0, 0, 87, 105, 108, 109, 97, 0, 0, 0, 6, 0, 0, 0, 66, 97, 114, 110, 101, 121, 0, 0, 5, 0, 0, 0, 70, 114, 111, 100, 111, 0, 0, 0] 31*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 32*890232f2SAndroid Build Coastguard Worker let _data = ByteBuffer(bytes: data) 33*890232f2SAndroid Build Coastguard Worker readVerifiedMonster(fb: _data) 34*890232f2SAndroid Build Coastguard Worker } 35*890232f2SAndroid Build Coastguard Worker testCreateMonsternull36*890232f2SAndroid Build Coastguard Worker func testCreateMonster() { 37*890232f2SAndroid Build Coastguard Worker let bytes = createMonster(withPrefix: false) 38*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 39*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(bytes.sizedByteArray, [48, 0, 0, 0, 77, 79, 78, 83, 0, 0, 0, 0, 36, 0, 72, 0, 40, 0, 0, 0, 38, 0, 32, 0, 0, 0, 28, 0, 0, 0, 27, 0, 20, 0, 16, 0, 12, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 36, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 68, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 120, 0, 0, 0, 0, 0, 80, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0, 2, 0, 0, 0, 64, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 30, 0, 40, 0, 10, 0, 20, 0, 152, 255, 255, 255, 4, 0, 0, 0, 4, 0, 0, 0, 70, 114, 101, 100, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 50, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 49, 0, 0, 0, 9, 0, 0, 0, 77, 121, 77, 111, 110, 115, 116, 101, 114, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 4, 0, 0, 0, 240, 255, 255, 255, 32, 0, 0, 0, 248, 255, 255, 255, 36, 0, 0, 0, 12, 0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 12, 0, 0, 0, 28, 0, 0, 0, 5, 0, 0, 0, 87, 105, 108, 109, 97, 0, 0, 0, 6, 0, 0, 0, 66, 97, 114, 110, 101, 121, 0, 0, 5, 0, 0, 0, 70, 114, 111, 100, 111, 0, 0, 0]) 40*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 41*890232f2SAndroid Build Coastguard Worker let monster = MyGame_Example_Monster.getRootAsMonster(bb: bytes.buffer) 42*890232f2SAndroid Build Coastguard Worker readMonster(monster: monster) 43*890232f2SAndroid Build Coastguard Worker mutateMonster(fb: bytes.buffer) 44*890232f2SAndroid Build Coastguard Worker readMonster(monster: monster) 45*890232f2SAndroid Build Coastguard Worker } 46*890232f2SAndroid Build Coastguard Worker testCreateMonsterResizedBuffernull47*890232f2SAndroid Build Coastguard Worker func testCreateMonsterResizedBuffer() { 48*890232f2SAndroid Build Coastguard Worker let bytes = createMonster(withPrefix: false) 49*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 50*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(bytes.sizedByteArray, [48, 0, 0, 0, 77, 79, 78, 83, 0, 0, 0, 0, 36, 0, 72, 0, 40, 0, 0, 0, 38, 0, 32, 0, 0, 0, 28, 0, 0, 0, 27, 0, 20, 0, 16, 0, 12, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 36, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 68, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 120, 0, 0, 0, 0, 0, 80, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0, 2, 0, 0, 0, 64, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 30, 0, 40, 0, 10, 0, 20, 0, 152, 255, 255, 255, 4, 0, 0, 0, 4, 0, 0, 0, 70, 114, 101, 100, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 50, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 49, 0, 0, 0, 9, 0, 0, 0, 77, 121, 77, 111, 110, 115, 116, 101, 114, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 4, 0, 0, 0, 240, 255, 255, 255, 32, 0, 0, 0, 248, 255, 255, 255, 36, 0, 0, 0, 12, 0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 12, 0, 0, 0, 28, 0, 0, 0, 5, 0, 0, 0, 87, 105, 108, 109, 97, 0, 0, 0, 6, 0, 0, 0, 66, 97, 114, 110, 101, 121, 0, 0, 5, 0, 0, 0, 70, 114, 111, 100, 111, 0, 0, 0]) 51*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 52*890232f2SAndroid Build Coastguard Worker readVerifiedMonster(fb: bytes.sizedBuffer) 53*890232f2SAndroid Build Coastguard Worker } 54*890232f2SAndroid Build Coastguard Worker testCreateMonsterPrefixednull55*890232f2SAndroid Build Coastguard Worker func testCreateMonsterPrefixed() { 56*890232f2SAndroid Build Coastguard Worker let bytes = createMonster(withPrefix: true) 57*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 58*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(bytes.sizedByteArray, [44, 1, 0, 0, 44, 0, 0, 0, 77, 79, 78, 83, 36, 0, 72, 0, 40, 0, 0, 0, 38, 0, 32, 0, 0, 0, 28, 0, 0, 0, 27, 0, 20, 0, 16, 0, 12, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 36, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 68, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 120, 0, 0, 0, 0, 0, 80, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0, 2, 0, 0, 0, 64, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 30, 0, 40, 0, 10, 0, 20, 0, 152, 255, 255, 255, 4, 0, 0, 0, 4, 0, 0, 0, 70, 114, 101, 100, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 50, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 49, 0, 0, 0, 9, 0, 0, 0, 77, 121, 77, 111, 110, 115, 116, 101, 114, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 4, 0, 0, 0, 240, 255, 255, 255, 32, 0, 0, 0, 248, 255, 255, 255, 36, 0, 0, 0, 12, 0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 12, 0, 0, 0, 28, 0, 0, 0, 5, 0, 0, 0, 87, 105, 108, 109, 97, 0, 0, 0, 6, 0, 0, 0, 66, 97, 114, 110, 101, 121, 0, 0, 5, 0, 0, 0, 70, 114, 111, 100, 111, 0, 0, 0]) 59*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 60*890232f2SAndroid Build Coastguard Worker 61*890232f2SAndroid Build Coastguard Worker var buffer = bytes.buffer 62*890232f2SAndroid Build Coastguard Worker readMonster(monster: getPrefixedSizeRoot(byteBuffer: &buffer)) 63*890232f2SAndroid Build Coastguard Worker } 64*890232f2SAndroid Build Coastguard Worker testCreateMonsterUsingCreateMonsterMethodWithNilPosnull65*890232f2SAndroid Build Coastguard Worker func testCreateMonsterUsingCreateMonsterMethodWithNilPos() { 66*890232f2SAndroid Build Coastguard Worker var fbb = FlatBufferBuilder(initialSize: 1) 67*890232f2SAndroid Build Coastguard Worker let name = fbb.create(string: "Frodo") 68*890232f2SAndroid Build Coastguard Worker let mStart = Monster.startMonster(&fbb) 69*890232f2SAndroid Build Coastguard Worker Monster.add(name: name, &fbb) 70*890232f2SAndroid Build Coastguard Worker let root = Monster.endMonster(&fbb, start: mStart) 71*890232f2SAndroid Build Coastguard Worker fbb.finish(offset: root) 72*890232f2SAndroid Build Coastguard Worker let newMonster = Monster.getRootAsMonster(bb: fbb.sizedBuffer) 73*890232f2SAndroid Build Coastguard Worker XCTAssertNil(newMonster.pos) 74*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(newMonster.name, "Frodo") 75*890232f2SAndroid Build Coastguard Worker } 76*890232f2SAndroid Build Coastguard Worker testCreateMonsterUsingCreateMonsterMethodWithPosXnull77*890232f2SAndroid Build Coastguard Worker func testCreateMonsterUsingCreateMonsterMethodWithPosX() { 78*890232f2SAndroid Build Coastguard Worker var fbb = FlatBufferBuilder(initialSize: 1) 79*890232f2SAndroid Build Coastguard Worker let name = fbb.create(string: "Barney") 80*890232f2SAndroid Build Coastguard Worker let mStart = Monster.startMonster(&fbb) 81*890232f2SAndroid Build Coastguard Worker Monster.add( 82*890232f2SAndroid Build Coastguard Worker pos: MyGame_Example_Vec3( 83*890232f2SAndroid Build Coastguard Worker x: 10, 84*890232f2SAndroid Build Coastguard Worker y: 0, 85*890232f2SAndroid Build Coastguard Worker z: 0, 86*890232f2SAndroid Build Coastguard Worker test1: 0, 87*890232f2SAndroid Build Coastguard Worker test2: .blue, 88*890232f2SAndroid Build Coastguard Worker test3: .init()), 89*890232f2SAndroid Build Coastguard Worker &fbb) 90*890232f2SAndroid Build Coastguard Worker Monster.add(name: name, &fbb) 91*890232f2SAndroid Build Coastguard Worker let root = Monster.endMonster(&fbb, start: mStart) 92*890232f2SAndroid Build Coastguard Worker fbb.finish(offset: root) 93*890232f2SAndroid Build Coastguard Worker 94*890232f2SAndroid Build Coastguard Worker let newMonster = Monster.getRootAsMonster(bb: fbb.sizedBuffer) 95*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(newMonster.pos!.x, 10) 96*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(newMonster.name, "Barney") 97*890232f2SAndroid Build Coastguard Worker } 98*890232f2SAndroid Build Coastguard Worker testArrayOfBoolsnull99*890232f2SAndroid Build Coastguard Worker func testArrayOfBools() { 100*890232f2SAndroid Build Coastguard Worker let boolArray = [false, true, false, true, false, true, false] 101*890232f2SAndroid Build Coastguard Worker var fbb = FlatBufferBuilder(initialSize: 1) 102*890232f2SAndroid Build Coastguard Worker let name = fbb.create(string: "Frodo") 103*890232f2SAndroid Build Coastguard Worker let bools = fbb.createVector(boolArray) 104*890232f2SAndroid Build Coastguard Worker let root = Monster.createMonster( 105*890232f2SAndroid Build Coastguard Worker &fbb, 106*890232f2SAndroid Build Coastguard Worker nameOffset: name, 107*890232f2SAndroid Build Coastguard Worker testarrayofboolsVectorOffset: bools) 108*890232f2SAndroid Build Coastguard Worker fbb.finish(offset: root) 109*890232f2SAndroid Build Coastguard Worker let monster = Monster.getRootAsMonster(bb: fbb.sizedBuffer) 110*890232f2SAndroid Build Coastguard Worker 111*890232f2SAndroid Build Coastguard Worker let values = monster.testarrayofbools 112*890232f2SAndroid Build Coastguard Worker 113*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(boolArray, values) 114*890232f2SAndroid Build Coastguard Worker 115*890232f2SAndroid Build Coastguard Worker for i in 0..<monster.testarrayofboolsCount { 116*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(boolArray[Int(i)], monster.testarrayofbools(at: i)) 117*890232f2SAndroid Build Coastguard Worker } 118*890232f2SAndroid Build Coastguard Worker } 119*890232f2SAndroid Build Coastguard Worker readVerifiedMonsternull120*890232f2SAndroid Build Coastguard Worker func readVerifiedMonster(fb: ByteBuffer) { 121*890232f2SAndroid Build Coastguard Worker var byteBuffer = fb 122*890232f2SAndroid Build Coastguard Worker XCTAssertNoThrow( 123*890232f2SAndroid Build Coastguard Worker try readMonster( 124*890232f2SAndroid Build Coastguard Worker monster: getCheckedRoot( 125*890232f2SAndroid Build Coastguard Worker byteBuffer: &byteBuffer) as MyGame_Example_Monster)) 126*890232f2SAndroid Build Coastguard Worker } 127*890232f2SAndroid Build Coastguard Worker readMonsternull128*890232f2SAndroid Build Coastguard Worker func readMonster(monster: Monster) { 129*890232f2SAndroid Build Coastguard Worker var monster = monster 130*890232f2SAndroid Build Coastguard Worker readFlatbufferMonster(monster: &monster) 131*890232f2SAndroid Build Coastguard Worker let unpacked: MyGame_Example_MonsterT? = monster.unpack() 132*890232f2SAndroid Build Coastguard Worker readObjectApi(monster: unpacked!) 133*890232f2SAndroid Build Coastguard Worker guard let buffer = unpacked?.serialize() 134*890232f2SAndroid Build Coastguard Worker else { fatalError("Couldnt generate bytebuffer") } 135*890232f2SAndroid Build Coastguard Worker var newMonster = Monster.getRootAsMonster(bb: buffer) 136*890232f2SAndroid Build Coastguard Worker readFlatbufferMonster(monster: &newMonster) 137*890232f2SAndroid Build Coastguard Worker } 138*890232f2SAndroid Build Coastguard Worker createMonsternull139*890232f2SAndroid Build Coastguard Worker func createMonster(withPrefix prefix: Bool) -> FlatBufferBuilder { 140*890232f2SAndroid Build Coastguard Worker var fbb = FlatBufferBuilder(initialSize: 1) 141*890232f2SAndroid Build Coastguard Worker let names = [ 142*890232f2SAndroid Build Coastguard Worker fbb.create(string: "Frodo"), 143*890232f2SAndroid Build Coastguard Worker fbb.create(string: "Barney"), 144*890232f2SAndroid Build Coastguard Worker fbb.create(string: "Wilma"), 145*890232f2SAndroid Build Coastguard Worker ] 146*890232f2SAndroid Build Coastguard Worker var offsets: [Offset] = [] 147*890232f2SAndroid Build Coastguard Worker let start1 = Monster.startMonster(&fbb) 148*890232f2SAndroid Build Coastguard Worker Monster.add(name: names[0], &fbb) 149*890232f2SAndroid Build Coastguard Worker offsets.append(Monster.endMonster(&fbb, start: start1)) 150*890232f2SAndroid Build Coastguard Worker let start2 = Monster.startMonster(&fbb) 151*890232f2SAndroid Build Coastguard Worker Monster.add(name: names[1], &fbb) 152*890232f2SAndroid Build Coastguard Worker offsets.append(Monster.endMonster(&fbb, start: start2)) 153*890232f2SAndroid Build Coastguard Worker let start3 = Monster.startMonster(&fbb) 154*890232f2SAndroid Build Coastguard Worker Monster.add(name: names[2], &fbb) 155*890232f2SAndroid Build Coastguard Worker offsets.append(Monster.endMonster(&fbb, start: start3)) 156*890232f2SAndroid Build Coastguard Worker 157*890232f2SAndroid Build Coastguard Worker let sortedArray = Monster.sortVectorOfMonster(offsets: offsets, &fbb) 158*890232f2SAndroid Build Coastguard Worker 159*890232f2SAndroid Build Coastguard Worker let str = fbb.create(string: "MyMonster") 160*890232f2SAndroid Build Coastguard Worker let test1 = fbb.create(string: "test1") 161*890232f2SAndroid Build Coastguard Worker let test2 = fbb.create(string: "test2") 162*890232f2SAndroid Build Coastguard Worker let _inv: [Byte] = [0, 1, 2, 3, 4] 163*890232f2SAndroid Build Coastguard Worker let inv = fbb.createVector(_inv) 164*890232f2SAndroid Build Coastguard Worker 165*890232f2SAndroid Build Coastguard Worker let fred = fbb.create(string: "Fred") 166*890232f2SAndroid Build Coastguard Worker let mon1Start = Monster.startMonster(&fbb) 167*890232f2SAndroid Build Coastguard Worker Monster.add(name: fred, &fbb) 168*890232f2SAndroid Build Coastguard Worker let mon2 = Monster.endMonster(&fbb, start: mon1Start) 169*890232f2SAndroid Build Coastguard Worker 170*890232f2SAndroid Build Coastguard Worker let test4 = fbb.createVector(ofStructs: [ 171*890232f2SAndroid Build Coastguard Worker MyGame_Example_Test(a: 30, b: 40), 172*890232f2SAndroid Build Coastguard Worker MyGame_Example_Test(a: 10, b: 20), 173*890232f2SAndroid Build Coastguard Worker ]) 174*890232f2SAndroid Build Coastguard Worker 175*890232f2SAndroid Build Coastguard Worker let stringTestVector = fbb.createVector(ofOffsets: [test1, test2]) 176*890232f2SAndroid Build Coastguard Worker let mStart = Monster.startMonster(&fbb) 177*890232f2SAndroid Build Coastguard Worker Monster.add( 178*890232f2SAndroid Build Coastguard Worker pos: MyGame_Example_Vec3( 179*890232f2SAndroid Build Coastguard Worker x: 1, 180*890232f2SAndroid Build Coastguard Worker y: 2, 181*890232f2SAndroid Build Coastguard Worker z: 3, 182*890232f2SAndroid Build Coastguard Worker test1: 3, 183*890232f2SAndroid Build Coastguard Worker test2: .green, 184*890232f2SAndroid Build Coastguard Worker test3: .init(a: 5, b: 6)), 185*890232f2SAndroid Build Coastguard Worker &fbb) 186*890232f2SAndroid Build Coastguard Worker Monster.add(hp: 80, &fbb) 187*890232f2SAndroid Build Coastguard Worker Monster.add(name: str, &fbb) 188*890232f2SAndroid Build Coastguard Worker Monster.addVectorOf(inventory: inv, &fbb) 189*890232f2SAndroid Build Coastguard Worker Monster.add(testType: .monster, &fbb) 190*890232f2SAndroid Build Coastguard Worker Monster.add(test: mon2, &fbb) 191*890232f2SAndroid Build Coastguard Worker Monster.addVectorOf(test4: test4, &fbb) 192*890232f2SAndroid Build Coastguard Worker Monster.addVectorOf(testarrayofstring: stringTestVector, &fbb) 193*890232f2SAndroid Build Coastguard Worker Monster.add(testbool: true, &fbb) 194*890232f2SAndroid Build Coastguard Worker Monster.addVectorOf(testarrayoftables: sortedArray, &fbb) 195*890232f2SAndroid Build Coastguard Worker let end = Monster.endMonster(&fbb, start: mStart) 196*890232f2SAndroid Build Coastguard Worker Monster.finish(&fbb, end: end, prefix: prefix) 197*890232f2SAndroid Build Coastguard Worker return fbb 198*890232f2SAndroid Build Coastguard Worker } 199*890232f2SAndroid Build Coastguard Worker mutateMonsternull200*890232f2SAndroid Build Coastguard Worker func mutateMonster(fb: ByteBuffer) { 201*890232f2SAndroid Build Coastguard Worker let monster = Monster.getRootAsMonster(bb: fb) 202*890232f2SAndroid Build Coastguard Worker XCTAssertFalse(monster.mutate(mana: 10)) 203*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayoftables(at: 0)?.name, "Barney") 204*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayoftables(at: 1)?.name, "Frodo") 205*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayoftables(at: 2)?.name, "Wilma") 206*890232f2SAndroid Build Coastguard Worker 207*890232f2SAndroid Build Coastguard Worker // Example of searching for a table by the key 208*890232f2SAndroid Build Coastguard Worker XCTAssertNotNil(monster.testarrayoftablesBy(key: "Frodo")) 209*890232f2SAndroid Build Coastguard Worker XCTAssertNotNil(monster.testarrayoftablesBy(key: "Barney")) 210*890232f2SAndroid Build Coastguard Worker XCTAssertNotNil(monster.testarrayoftablesBy(key: "Wilma")) 211*890232f2SAndroid Build Coastguard Worker 212*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testType, .monster) 213*890232f2SAndroid Build Coastguard Worker 214*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 1, at: 0), true) 215*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 2, at: 1), true) 216*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 3, at: 2), true) 217*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 4, at: 3), true) 218*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 5, at: 4), true) 219*890232f2SAndroid Build Coastguard Worker 220*890232f2SAndroid Build Coastguard Worker for i in 0..<monster.inventoryCount { 221*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.inventory(at: i), Byte(i + 1)) 222*890232f2SAndroid Build Coastguard Worker } 223*890232f2SAndroid Build Coastguard Worker 224*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 0, at: 0), true) 225*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 1, at: 1), true) 226*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 2, at: 2), true) 227*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 3, at: 3), true) 228*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 4, at: 4), true) 229*890232f2SAndroid Build Coastguard Worker 230*890232f2SAndroid Build Coastguard Worker let vec = monster.mutablePos 231*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(vec?.x, 1) 232*890232f2SAndroid Build Coastguard Worker XCTAssertTrue(vec?.mutate(x: 55.0) ?? false) 233*890232f2SAndroid Build Coastguard Worker XCTAssertTrue(vec?.mutate(test1: 55) ?? false) 234*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(vec?.x, 55.0) 235*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(vec?.test1, 55.0) 236*890232f2SAndroid Build Coastguard Worker XCTAssertTrue(vec?.mutate(x: 1) ?? false) 237*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(vec?.x, 1) 238*890232f2SAndroid Build Coastguard Worker XCTAssertTrue(vec?.mutate(test1: 3) ?? false) 239*890232f2SAndroid Build Coastguard Worker } 240*890232f2SAndroid Build Coastguard Worker readFlatbufferMonsternull241*890232f2SAndroid Build Coastguard Worker func readFlatbufferMonster(monster: inout MyGame_Example_Monster) { 242*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.hp, 80) 243*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 150) 244*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.name, "MyMonster") 245*890232f2SAndroid Build Coastguard Worker let pos = monster.pos 246*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.x, 1) 247*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.y, 2) 248*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.z, 3) 249*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.test1, 3) 250*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.test2, .green) 251*890232f2SAndroid Build Coastguard Worker let test = pos?.test3 252*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(test?.a, 5) 253*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(test?.b, 6) 254*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testType, .monster) 255*890232f2SAndroid Build Coastguard Worker let monster2 = monster.test(type: Monster.self) 256*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster2?.name, "Fred") 257*890232f2SAndroid Build Coastguard Worker 258*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(mana: 10), false) 259*890232f2SAndroid Build Coastguard Worker 260*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 150) 261*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.inventoryCount, 5) 262*890232f2SAndroid Build Coastguard Worker var sum: Byte = 0 263*890232f2SAndroid Build Coastguard Worker for i in 0...monster.inventoryCount { 264*890232f2SAndroid Build Coastguard Worker sum += monster.inventory(at: i) 265*890232f2SAndroid Build Coastguard Worker } 266*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(sum, 10) 267*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.test4Count, 2) 268*890232f2SAndroid Build Coastguard Worker 269*890232f2SAndroid Build Coastguard Worker let test0 = monster.test4(at: 0) 270*890232f2SAndroid Build Coastguard Worker let test1 = monster.test4(at: 1) 271*890232f2SAndroid Build Coastguard Worker var sum0 = 0 272*890232f2SAndroid Build Coastguard Worker var sum1 = 0 273*890232f2SAndroid Build Coastguard Worker if let a = test0?.a, let b = test0?.b { 274*890232f2SAndroid Build Coastguard Worker sum0 = Int(a) + Int(b) 275*890232f2SAndroid Build Coastguard Worker } 276*890232f2SAndroid Build Coastguard Worker if let a = test1?.a, let b = test1?.b { 277*890232f2SAndroid Build Coastguard Worker sum1 = Int(a) + Int(b) 278*890232f2SAndroid Build Coastguard Worker } 279*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(sum0 + sum1, 100) 280*890232f2SAndroid Build Coastguard Worker 281*890232f2SAndroid Build Coastguard Worker let mutableTest0 = monster.mutableTest4(at: 0) 282*890232f2SAndroid Build Coastguard Worker let mutableTest1 = monster.mutableTest4(at: 1) 283*890232f2SAndroid Build Coastguard Worker var sum2 = 0 284*890232f2SAndroid Build Coastguard Worker var sum3 = 0 285*890232f2SAndroid Build Coastguard Worker if let a = mutableTest0?.a, let b = mutableTest0?.b { 286*890232f2SAndroid Build Coastguard Worker sum2 = Int(a) + Int(b) 287*890232f2SAndroid Build Coastguard Worker } 288*890232f2SAndroid Build Coastguard Worker if let a = mutableTest1?.a, let b = mutableTest1?.b { 289*890232f2SAndroid Build Coastguard Worker sum3 = Int(a) + Int(b) 290*890232f2SAndroid Build Coastguard Worker } 291*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(sum2 + sum3, 100) 292*890232f2SAndroid Build Coastguard Worker 293*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayofstringCount, 2) 294*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayofstring(at: 0), "test1") 295*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayofstring(at: 1), "test2") 296*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testbool, true) 297*890232f2SAndroid Build Coastguard Worker 298*890232f2SAndroid Build Coastguard Worker let array = monster.nameSegmentArray 299*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(String(bytes: array ?? [], encoding: .utf8), "MyMonster") 300*890232f2SAndroid Build Coastguard Worker 301*890232f2SAndroid Build Coastguard Worker if 0 == monster.testarrayofboolsCount { 302*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayofbools.isEmpty, true) 303*890232f2SAndroid Build Coastguard Worker } else { 304*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayofbools.isEmpty, false) 305*890232f2SAndroid Build Coastguard Worker } 306*890232f2SAndroid Build Coastguard Worker } 307*890232f2SAndroid Build Coastguard Worker readObjectApinull308*890232f2SAndroid Build Coastguard Worker func readObjectApi(monster: MyGame_Example_MonsterT) { 309*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.hp, 80) 310*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 150) 311*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.name, "MyMonster") 312*890232f2SAndroid Build Coastguard Worker let pos = monster.pos 313*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.x, 1) 314*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.y, 2) 315*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.z, 3) 316*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.test1, 3) 317*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.test2, .green) 318*890232f2SAndroid Build Coastguard Worker let test = pos?.test3 319*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(test?.a, 5) 320*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(test?.b, 6) 321*890232f2SAndroid Build Coastguard Worker let monster2 = monster.test?.value as? MyGame_Example_MonsterT 322*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster2?.name, "Fred") 323*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 150) 324*890232f2SAndroid Build Coastguard Worker monster.mana = 10 325*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 10) 326*890232f2SAndroid Build Coastguard Worker monster.mana = 150 327*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 150) 328*890232f2SAndroid Build Coastguard Worker 329*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.inventory.count, 5) 330*890232f2SAndroid Build Coastguard Worker var sum: Byte = 0 331*890232f2SAndroid Build Coastguard Worker for i in monster.inventory { 332*890232f2SAndroid Build Coastguard Worker sum += i 333*890232f2SAndroid Build Coastguard Worker } 334*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(sum, 10) 335*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.test4.count, 2) 336*890232f2SAndroid Build Coastguard Worker let test0 = monster.test4[0] 337*890232f2SAndroid Build Coastguard Worker let test1 = monster.test4[1] 338*890232f2SAndroid Build Coastguard Worker var sum0 = 0 339*890232f2SAndroid Build Coastguard Worker var sum1 = 0 340*890232f2SAndroid Build Coastguard Worker if let a = test0?.a, let b = test0?.b { 341*890232f2SAndroid Build Coastguard Worker sum0 = Int(a) + Int(b) 342*890232f2SAndroid Build Coastguard Worker } 343*890232f2SAndroid Build Coastguard Worker if let a = test1?.a, let b = test1?.b { 344*890232f2SAndroid Build Coastguard Worker sum1 = Int(a) + Int(b) 345*890232f2SAndroid Build Coastguard Worker } 346*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(sum0 + sum1, 100) 347*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testbool, true) 348*890232f2SAndroid Build Coastguard Worker } 349*890232f2SAndroid Build Coastguard Worker 350*890232f2SAndroid Build Coastguard Worker var jsonData: String { 351*890232f2SAndroid Build Coastguard Worker """ 352*890232f2SAndroid Build Coastguard Worker {\"hp\":80,\"inventory\":[0,1,2,3,4],\"test\":{\"name\":\"Fred\"},\"testarrayofstring\":[\"test1\",\"test2\"],\"testarrayoftables\":[{\"name\":\"Barney\"},{\"name\":\"Frodo\"},{\"name\":\"Wilma\"}],\"test4\":[{\"a\":30,\"b\":40},{\"a\":10,\"b\":20}],\"testbool\":true,\"test_type\":\"Monster\",\"pos\":{\"y\":2,\"test3\":{\"a\":5,\"b\":6},\"z\":3,\"x\":1,\"test1\":3,\"test2\":\"Green\"},\"name\":\"MyMonster\"} 353*890232f2SAndroid Build Coastguard Worker """ 354*890232f2SAndroid Build Coastguard Worker } 355*890232f2SAndroid Build Coastguard Worker } 356