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