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 = Data([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(data: data) 33*890232f2SAndroid Build Coastguard Worker readVerifiedMonster(fb: _data) 34*890232f2SAndroid Build Coastguard Worker } 35*890232f2SAndroid Build Coastguard Worker testReadFromOtherLanguagesnull36*890232f2SAndroid Build Coastguard Worker func testReadFromOtherLanguages() { 37*890232f2SAndroid Build Coastguard Worker let path = FileManager.default.currentDirectoryPath 38*890232f2SAndroid Build Coastguard Worker let url = URL(fileURLWithPath: path, isDirectory: true) 39*890232f2SAndroid Build Coastguard Worker .appendingPathComponent("monsterdata_test").appendingPathExtension("mon") 40*890232f2SAndroid Build Coastguard Worker guard let data = try? Data(contentsOf: url) else { return } 41*890232f2SAndroid Build Coastguard Worker let _data = ByteBuffer(data: data) 42*890232f2SAndroid Build Coastguard Worker readVerifiedMonster(fb: _data) 43*890232f2SAndroid Build Coastguard Worker } 44*890232f2SAndroid Build Coastguard Worker testCreateMonsternull45*890232f2SAndroid Build Coastguard Worker func testCreateMonster() { 46*890232f2SAndroid Build Coastguard Worker let bytes = createMonster(withPrefix: false) 47*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 48*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]) 49*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 50*890232f2SAndroid Build Coastguard Worker let monster = MyGame_Example_Monster.getRootAsMonster(bb: bytes.buffer) 51*890232f2SAndroid Build Coastguard Worker readMonster(monster: monster) 52*890232f2SAndroid Build Coastguard Worker mutateMonster(fb: bytes.buffer) 53*890232f2SAndroid Build Coastguard Worker readMonster(monster: monster) 54*890232f2SAndroid Build Coastguard Worker } 55*890232f2SAndroid Build Coastguard Worker testCreateMonsterResizedBuffernull56*890232f2SAndroid Build Coastguard Worker func testCreateMonsterResizedBuffer() { 57*890232f2SAndroid Build Coastguard Worker let bytes = createMonster(withPrefix: false) 58*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 59*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]) 60*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 61*890232f2SAndroid Build Coastguard Worker readVerifiedMonster(fb: bytes.sizedBuffer) 62*890232f2SAndroid Build Coastguard Worker } 63*890232f2SAndroid Build Coastguard Worker testCreateMonsterPrefixednull64*890232f2SAndroid Build Coastguard Worker func testCreateMonsterPrefixed() { 65*890232f2SAndroid Build Coastguard Worker let bytes = createMonster(withPrefix: true) 66*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 67*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]) 68*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 69*890232f2SAndroid Build Coastguard Worker 70*890232f2SAndroid Build Coastguard Worker var buffer = bytes.buffer 71*890232f2SAndroid Build Coastguard Worker readMonster(monster: getPrefixedSizeRoot(byteBuffer: &buffer)) 72*890232f2SAndroid Build Coastguard Worker } 73*890232f2SAndroid Build Coastguard Worker testCreateMonsterUsingCreateMonsterMethodWithNilPosnull74*890232f2SAndroid Build Coastguard Worker func testCreateMonsterUsingCreateMonsterMethodWithNilPos() { 75*890232f2SAndroid Build Coastguard Worker var fbb = FlatBufferBuilder(initialSize: 1) 76*890232f2SAndroid Build Coastguard Worker let name = fbb.create(string: "Frodo") 77*890232f2SAndroid Build Coastguard Worker let mStart = Monster.startMonster(&fbb) 78*890232f2SAndroid Build Coastguard Worker Monster.add(name: name, &fbb) 79*890232f2SAndroid Build Coastguard Worker let root = Monster.endMonster(&fbb, start: mStart) 80*890232f2SAndroid Build Coastguard Worker fbb.finish(offset: root) 81*890232f2SAndroid Build Coastguard Worker let newMonster = Monster.getRootAsMonster(bb: fbb.sizedBuffer) 82*890232f2SAndroid Build Coastguard Worker XCTAssertNil(newMonster.pos) 83*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(newMonster.name, "Frodo") 84*890232f2SAndroid Build Coastguard Worker } 85*890232f2SAndroid Build Coastguard Worker testCreateMonsterUsingCreateMonsterMethodWithPosXnull86*890232f2SAndroid Build Coastguard Worker func testCreateMonsterUsingCreateMonsterMethodWithPosX() { 87*890232f2SAndroid Build Coastguard Worker var fbb = FlatBufferBuilder(initialSize: 1) 88*890232f2SAndroid Build Coastguard Worker let name = fbb.create(string: "Barney") 89*890232f2SAndroid Build Coastguard Worker let mStart = Monster.startMonster(&fbb) 90*890232f2SAndroid Build Coastguard Worker Monster.add( 91*890232f2SAndroid Build Coastguard Worker pos: MyGame_Example_Vec3( 92*890232f2SAndroid Build Coastguard Worker x: 10, 93*890232f2SAndroid Build Coastguard Worker y: 0, 94*890232f2SAndroid Build Coastguard Worker z: 0, 95*890232f2SAndroid Build Coastguard Worker test1: 0, 96*890232f2SAndroid Build Coastguard Worker test2: .blue, 97*890232f2SAndroid Build Coastguard Worker test3: .init()), 98*890232f2SAndroid Build Coastguard Worker &fbb) 99*890232f2SAndroid Build Coastguard Worker Monster.add(name: name, &fbb) 100*890232f2SAndroid Build Coastguard Worker let root = Monster.endMonster(&fbb, start: mStart) 101*890232f2SAndroid Build Coastguard Worker fbb.finish(offset: root) 102*890232f2SAndroid Build Coastguard Worker 103*890232f2SAndroid Build Coastguard Worker let newMonster = Monster.getRootAsMonster(bb: fbb.sizedBuffer) 104*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(newMonster.pos!.x, 10) 105*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(newMonster.name, "Barney") 106*890232f2SAndroid Build Coastguard Worker } 107*890232f2SAndroid Build Coastguard Worker testReadMonsterFromUnsafePointerWithoutCopyingnull108*890232f2SAndroid Build Coastguard Worker func testReadMonsterFromUnsafePointerWithoutCopying() { 109*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 110*890232f2SAndroid Build Coastguard Worker var array: [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] 111*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 112*890232f2SAndroid Build Coastguard Worker let unpacked = array 113*890232f2SAndroid Build Coastguard Worker .withUnsafeMutableBytes { (memory) -> MyGame_Example_MonsterT in 114*890232f2SAndroid Build Coastguard Worker let bytes = ByteBuffer( 115*890232f2SAndroid Build Coastguard Worker assumingMemoryBound: memory.baseAddress!, 116*890232f2SAndroid Build Coastguard Worker capacity: memory.count) 117*890232f2SAndroid Build Coastguard Worker var monster = Monster.getRootAsMonster(bb: bytes) 118*890232f2SAndroid Build Coastguard Worker readFlatbufferMonster(monster: &monster) 119*890232f2SAndroid Build Coastguard Worker let unpacked = monster.unpack() 120*890232f2SAndroid Build Coastguard Worker return unpacked 121*890232f2SAndroid Build Coastguard Worker } 122*890232f2SAndroid Build Coastguard Worker readObjectApi(monster: unpacked) 123*890232f2SAndroid Build Coastguard Worker } 124*890232f2SAndroid Build Coastguard Worker testArrayOfBoolsnull125*890232f2SAndroid Build Coastguard Worker func testArrayOfBools() { 126*890232f2SAndroid Build Coastguard Worker let boolArray = [false, true, false, true, false, true, false] 127*890232f2SAndroid Build Coastguard Worker var fbb = FlatBufferBuilder(initialSize: 1) 128*890232f2SAndroid Build Coastguard Worker let name = fbb.create(string: "Frodo") 129*890232f2SAndroid Build Coastguard Worker let bools = fbb.createVector(boolArray) 130*890232f2SAndroid Build Coastguard Worker let root = Monster.createMonster( 131*890232f2SAndroid Build Coastguard Worker &fbb, 132*890232f2SAndroid Build Coastguard Worker nameOffset: name, 133*890232f2SAndroid Build Coastguard Worker testarrayofboolsVectorOffset: bools) 134*890232f2SAndroid Build Coastguard Worker fbb.finish(offset: root) 135*890232f2SAndroid Build Coastguard Worker let monster = Monster.getRootAsMonster(bb: fbb.sizedBuffer) 136*890232f2SAndroid Build Coastguard Worker 137*890232f2SAndroid Build Coastguard Worker let values = monster.testarrayofbools 138*890232f2SAndroid Build Coastguard Worker 139*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(boolArray, values) 140*890232f2SAndroid Build Coastguard Worker 141*890232f2SAndroid Build Coastguard Worker for i in 0..<monster.testarrayofboolsCount { 142*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(boolArray[Int(i)], monster.testarrayofbools(at: i)) 143*890232f2SAndroid Build Coastguard Worker } 144*890232f2SAndroid Build Coastguard Worker } 145*890232f2SAndroid Build Coastguard Worker readVerifiedMonsternull146*890232f2SAndroid Build Coastguard Worker func readVerifiedMonster(fb: ByteBuffer) { 147*890232f2SAndroid Build Coastguard Worker var byteBuffer = fb 148*890232f2SAndroid Build Coastguard Worker XCTAssertNoThrow( 149*890232f2SAndroid Build Coastguard Worker try readMonster( 150*890232f2SAndroid Build Coastguard Worker monster: getCheckedRoot( 151*890232f2SAndroid Build Coastguard Worker byteBuffer: &byteBuffer) as MyGame_Example_Monster)) 152*890232f2SAndroid Build Coastguard Worker } 153*890232f2SAndroid Build Coastguard Worker readMonsternull154*890232f2SAndroid Build Coastguard Worker func readMonster(monster: Monster) { 155*890232f2SAndroid Build Coastguard Worker var monster = monster 156*890232f2SAndroid Build Coastguard Worker readFlatbufferMonster(monster: &monster) 157*890232f2SAndroid Build Coastguard Worker let unpacked: MyGame_Example_MonsterT? = monster.unpack() 158*890232f2SAndroid Build Coastguard Worker readObjectApi(monster: unpacked!) 159*890232f2SAndroid Build Coastguard Worker guard let buffer = unpacked?.serialize() 160*890232f2SAndroid Build Coastguard Worker else { fatalError("Couldnt generate bytebuffer") } 161*890232f2SAndroid Build Coastguard Worker var newMonster = Monster.getRootAsMonster(bb: buffer) 162*890232f2SAndroid Build Coastguard Worker readFlatbufferMonster(monster: &newMonster) 163*890232f2SAndroid Build Coastguard Worker } 164*890232f2SAndroid Build Coastguard Worker createMonsternull165*890232f2SAndroid Build Coastguard Worker func createMonster(withPrefix prefix: Bool) -> FlatBufferBuilder { 166*890232f2SAndroid Build Coastguard Worker var fbb = FlatBufferBuilder(initialSize: 1) 167*890232f2SAndroid Build Coastguard Worker let names = [ 168*890232f2SAndroid Build Coastguard Worker fbb.create(string: "Frodo"), 169*890232f2SAndroid Build Coastguard Worker fbb.create(string: "Barney"), 170*890232f2SAndroid Build Coastguard Worker fbb.create(string: "Wilma"), 171*890232f2SAndroid Build Coastguard Worker ] 172*890232f2SAndroid Build Coastguard Worker var offsets: [Offset] = [] 173*890232f2SAndroid Build Coastguard Worker let start1 = Monster.startMonster(&fbb) 174*890232f2SAndroid Build Coastguard Worker Monster.add(name: names[0], &fbb) 175*890232f2SAndroid Build Coastguard Worker offsets.append(Monster.endMonster(&fbb, start: start1)) 176*890232f2SAndroid Build Coastguard Worker let start2 = Monster.startMonster(&fbb) 177*890232f2SAndroid Build Coastguard Worker Monster.add(name: names[1], &fbb) 178*890232f2SAndroid Build Coastguard Worker offsets.append(Monster.endMonster(&fbb, start: start2)) 179*890232f2SAndroid Build Coastguard Worker let start3 = Monster.startMonster(&fbb) 180*890232f2SAndroid Build Coastguard Worker Monster.add(name: names[2], &fbb) 181*890232f2SAndroid Build Coastguard Worker offsets.append(Monster.endMonster(&fbb, start: start3)) 182*890232f2SAndroid Build Coastguard Worker 183*890232f2SAndroid Build Coastguard Worker let sortedArray = Monster.sortVectorOfMonster(offsets: offsets, &fbb) 184*890232f2SAndroid Build Coastguard Worker 185*890232f2SAndroid Build Coastguard Worker let str = fbb.create(string: "MyMonster") 186*890232f2SAndroid Build Coastguard Worker let test1 = fbb.create(string: "test1") 187*890232f2SAndroid Build Coastguard Worker let test2 = fbb.create(string: "test2") 188*890232f2SAndroid Build Coastguard Worker let _inv: [Byte] = [0, 1, 2, 3, 4] 189*890232f2SAndroid Build Coastguard Worker let inv = fbb.createVector(_inv) 190*890232f2SAndroid Build Coastguard Worker 191*890232f2SAndroid Build Coastguard Worker let fred = fbb.create(string: "Fred") 192*890232f2SAndroid Build Coastguard Worker let mon1Start = Monster.startMonster(&fbb) 193*890232f2SAndroid Build Coastguard Worker Monster.add(name: fred, &fbb) 194*890232f2SAndroid Build Coastguard Worker let mon2 = Monster.endMonster(&fbb, start: mon1Start) 195*890232f2SAndroid Build Coastguard Worker 196*890232f2SAndroid Build Coastguard Worker let test4 = fbb.createVector(ofStructs: [ 197*890232f2SAndroid Build Coastguard Worker MyGame_Example_Test(a: 30, b: 40), 198*890232f2SAndroid Build Coastguard Worker MyGame_Example_Test(a: 10, b: 20), 199*890232f2SAndroid Build Coastguard Worker ]) 200*890232f2SAndroid Build Coastguard Worker 201*890232f2SAndroid Build Coastguard Worker let stringTestVector = fbb.createVector(ofOffsets: [test1, test2]) 202*890232f2SAndroid Build Coastguard Worker let mStart = Monster.startMonster(&fbb) 203*890232f2SAndroid Build Coastguard Worker Monster.add( 204*890232f2SAndroid Build Coastguard Worker pos: MyGame_Example_Vec3( 205*890232f2SAndroid Build Coastguard Worker x: 1, 206*890232f2SAndroid Build Coastguard Worker y: 2, 207*890232f2SAndroid Build Coastguard Worker z: 3, 208*890232f2SAndroid Build Coastguard Worker test1: 3, 209*890232f2SAndroid Build Coastguard Worker test2: .green, 210*890232f2SAndroid Build Coastguard Worker test3: .init(a: 5, b: 6)), 211*890232f2SAndroid Build Coastguard Worker &fbb) 212*890232f2SAndroid Build Coastguard Worker Monster.add(hp: 80, &fbb) 213*890232f2SAndroid Build Coastguard Worker Monster.add(name: str, &fbb) 214*890232f2SAndroid Build Coastguard Worker Monster.addVectorOf(inventory: inv, &fbb) 215*890232f2SAndroid Build Coastguard Worker Monster.add(testType: .monster, &fbb) 216*890232f2SAndroid Build Coastguard Worker Monster.add(test: mon2, &fbb) 217*890232f2SAndroid Build Coastguard Worker Monster.addVectorOf(test4: test4, &fbb) 218*890232f2SAndroid Build Coastguard Worker Monster.addVectorOf(testarrayofstring: stringTestVector, &fbb) 219*890232f2SAndroid Build Coastguard Worker Monster.add(testbool: true, &fbb) 220*890232f2SAndroid Build Coastguard Worker Monster.addVectorOf(testarrayoftables: sortedArray, &fbb) 221*890232f2SAndroid Build Coastguard Worker let end = Monster.endMonster(&fbb, start: mStart) 222*890232f2SAndroid Build Coastguard Worker Monster.finish(&fbb, end: end, prefix: prefix) 223*890232f2SAndroid Build Coastguard Worker return fbb 224*890232f2SAndroid Build Coastguard Worker } 225*890232f2SAndroid Build Coastguard Worker mutateMonsternull226*890232f2SAndroid Build Coastguard Worker func mutateMonster(fb: ByteBuffer) { 227*890232f2SAndroid Build Coastguard Worker let monster = Monster.getRootAsMonster(bb: fb) 228*890232f2SAndroid Build Coastguard Worker XCTAssertFalse(monster.mutate(mana: 10)) 229*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayoftables(at: 0)?.name, "Barney") 230*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayoftables(at: 1)?.name, "Frodo") 231*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayoftables(at: 2)?.name, "Wilma") 232*890232f2SAndroid Build Coastguard Worker 233*890232f2SAndroid Build Coastguard Worker // Example of searching for a table by the key 234*890232f2SAndroid Build Coastguard Worker XCTAssertNotNil(monster.testarrayoftablesBy(key: "Frodo")) 235*890232f2SAndroid Build Coastguard Worker XCTAssertNotNil(monster.testarrayoftablesBy(key: "Barney")) 236*890232f2SAndroid Build Coastguard Worker XCTAssertNotNil(monster.testarrayoftablesBy(key: "Wilma")) 237*890232f2SAndroid Build Coastguard Worker 238*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testType, .monster) 239*890232f2SAndroid Build Coastguard Worker 240*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 1, at: 0), true) 241*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 2, at: 1), true) 242*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 3, at: 2), true) 243*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 4, at: 3), true) 244*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 5, at: 4), true) 245*890232f2SAndroid Build Coastguard Worker 246*890232f2SAndroid Build Coastguard Worker for i in 0..<monster.inventoryCount { 247*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.inventory(at: i), Byte(i + 1)) 248*890232f2SAndroid Build Coastguard Worker } 249*890232f2SAndroid Build Coastguard Worker 250*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 0, at: 0), true) 251*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 1, at: 1), true) 252*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 2, at: 2), true) 253*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 3, at: 3), true) 254*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(inventory: 4, at: 4), true) 255*890232f2SAndroid Build Coastguard Worker 256*890232f2SAndroid Build Coastguard Worker let vec = monster.mutablePos 257*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(vec?.x, 1) 258*890232f2SAndroid Build Coastguard Worker XCTAssertTrue(vec?.mutate(x: 55.0) ?? false) 259*890232f2SAndroid Build Coastguard Worker XCTAssertTrue(vec?.mutate(test1: 55) ?? false) 260*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(vec?.x, 55.0) 261*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(vec?.test1, 55.0) 262*890232f2SAndroid Build Coastguard Worker XCTAssertTrue(vec?.mutate(x: 1) ?? false) 263*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(vec?.x, 1) 264*890232f2SAndroid Build Coastguard Worker XCTAssertTrue(vec?.mutate(test1: 3) ?? false) 265*890232f2SAndroid Build Coastguard Worker } 266*890232f2SAndroid Build Coastguard Worker readFlatbufferMonsternull267*890232f2SAndroid Build Coastguard Worker func readFlatbufferMonster(monster: inout MyGame_Example_Monster) { 268*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.hp, 80) 269*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 150) 270*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.name, "MyMonster") 271*890232f2SAndroid Build Coastguard Worker let pos = monster.pos 272*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.x, 1) 273*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.y, 2) 274*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.z, 3) 275*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.test1, 3) 276*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.test2, .green) 277*890232f2SAndroid Build Coastguard Worker let test = pos?.test3 278*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(test?.a, 5) 279*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(test?.b, 6) 280*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testType, .monster) 281*890232f2SAndroid Build Coastguard Worker let monster2 = monster.test(type: Monster.self) 282*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster2?.name, "Fred") 283*890232f2SAndroid Build Coastguard Worker 284*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mutate(mana: 10), false) 285*890232f2SAndroid Build Coastguard Worker 286*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 150) 287*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.inventoryCount, 5) 288*890232f2SAndroid Build Coastguard Worker var sum: Byte = 0 289*890232f2SAndroid Build Coastguard Worker for i in 0...monster.inventoryCount { 290*890232f2SAndroid Build Coastguard Worker sum += monster.inventory(at: i) 291*890232f2SAndroid Build Coastguard Worker } 292*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(sum, 10) 293*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.test4Count, 2) 294*890232f2SAndroid Build Coastguard Worker 295*890232f2SAndroid Build Coastguard Worker let test0 = monster.test4(at: 0) 296*890232f2SAndroid Build Coastguard Worker let test1 = monster.test4(at: 1) 297*890232f2SAndroid Build Coastguard Worker var sum0 = 0 298*890232f2SAndroid Build Coastguard Worker var sum1 = 0 299*890232f2SAndroid Build Coastguard Worker if let a = test0?.a, let b = test0?.b { 300*890232f2SAndroid Build Coastguard Worker sum0 = Int(a) + Int(b) 301*890232f2SAndroid Build Coastguard Worker } 302*890232f2SAndroid Build Coastguard Worker if let a = test1?.a, let b = test1?.b { 303*890232f2SAndroid Build Coastguard Worker sum1 = Int(a) + Int(b) 304*890232f2SAndroid Build Coastguard Worker } 305*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(sum0 + sum1, 100) 306*890232f2SAndroid Build Coastguard Worker 307*890232f2SAndroid Build Coastguard Worker let mutableTest0 = monster.mutableTest4(at: 0) 308*890232f2SAndroid Build Coastguard Worker let mutableTest1 = monster.mutableTest4(at: 1) 309*890232f2SAndroid Build Coastguard Worker var sum2 = 0 310*890232f2SAndroid Build Coastguard Worker var sum3 = 0 311*890232f2SAndroid Build Coastguard Worker if let a = mutableTest0?.a, let b = mutableTest0?.b { 312*890232f2SAndroid Build Coastguard Worker sum2 = Int(a) + Int(b) 313*890232f2SAndroid Build Coastguard Worker } 314*890232f2SAndroid Build Coastguard Worker if let a = mutableTest1?.a, let b = mutableTest1?.b { 315*890232f2SAndroid Build Coastguard Worker sum3 = Int(a) + Int(b) 316*890232f2SAndroid Build Coastguard Worker } 317*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(sum2 + sum3, 100) 318*890232f2SAndroid Build Coastguard Worker 319*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayofstringCount, 2) 320*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayofstring(at: 0), "test1") 321*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayofstring(at: 1), "test2") 322*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testbool, true) 323*890232f2SAndroid Build Coastguard Worker 324*890232f2SAndroid Build Coastguard Worker let array = monster.nameSegmentArray 325*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(String(bytes: array ?? [], encoding: .utf8), "MyMonster") 326*890232f2SAndroid Build Coastguard Worker 327*890232f2SAndroid Build Coastguard Worker if 0 == monster.testarrayofboolsCount { 328*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayofbools.isEmpty, true) 329*890232f2SAndroid Build Coastguard Worker } else { 330*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testarrayofbools.isEmpty, false) 331*890232f2SAndroid Build Coastguard Worker } 332*890232f2SAndroid Build Coastguard Worker } 333*890232f2SAndroid Build Coastguard Worker readObjectApinull334*890232f2SAndroid Build Coastguard Worker func readObjectApi(monster: MyGame_Example_MonsterT) { 335*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.hp, 80) 336*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 150) 337*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.name, "MyMonster") 338*890232f2SAndroid Build Coastguard Worker let pos = monster.pos 339*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.x, 1) 340*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.y, 2) 341*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.z, 3) 342*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.test1, 3) 343*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(pos?.test2, .green) 344*890232f2SAndroid Build Coastguard Worker let test = pos?.test3 345*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(test?.a, 5) 346*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(test?.b, 6) 347*890232f2SAndroid Build Coastguard Worker let monster2 = monster.test?.value as? MyGame_Example_MonsterT 348*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster2?.name, "Fred") 349*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 150) 350*890232f2SAndroid Build Coastguard Worker monster.mana = 10 351*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 10) 352*890232f2SAndroid Build Coastguard Worker monster.mana = 150 353*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.mana, 150) 354*890232f2SAndroid Build Coastguard Worker 355*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.inventory.count, 5) 356*890232f2SAndroid Build Coastguard Worker var sum: Byte = 0 357*890232f2SAndroid Build Coastguard Worker for i in monster.inventory { 358*890232f2SAndroid Build Coastguard Worker sum += i 359*890232f2SAndroid Build Coastguard Worker } 360*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(sum, 10) 361*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.test4.count, 2) 362*890232f2SAndroid Build Coastguard Worker let test0 = monster.test4[0] 363*890232f2SAndroid Build Coastguard Worker let test1 = monster.test4[1] 364*890232f2SAndroid Build Coastguard Worker var sum0 = 0 365*890232f2SAndroid Build Coastguard Worker var sum1 = 0 366*890232f2SAndroid Build Coastguard Worker if let a = test0?.a, let b = test0?.b { 367*890232f2SAndroid Build Coastguard Worker sum0 = Int(a) + Int(b) 368*890232f2SAndroid Build Coastguard Worker } 369*890232f2SAndroid Build Coastguard Worker if let a = test1?.a, let b = test1?.b { 370*890232f2SAndroid Build Coastguard Worker sum1 = Int(a) + Int(b) 371*890232f2SAndroid Build Coastguard Worker } 372*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(sum0 + sum1, 100) 373*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.testbool, true) 374*890232f2SAndroid Build Coastguard Worker } 375*890232f2SAndroid Build Coastguard Worker testEncodingnull376*890232f2SAndroid Build Coastguard Worker func testEncoding() { 377*890232f2SAndroid Build Coastguard Worker let fbb = createMonster(withPrefix: false) 378*890232f2SAndroid Build Coastguard Worker var sizedBuffer = fbb.sizedBuffer 379*890232f2SAndroid Build Coastguard Worker do { 380*890232f2SAndroid Build Coastguard Worker let reader: Monster = try getCheckedRoot(byteBuffer: &sizedBuffer) 381*890232f2SAndroid Build Coastguard Worker let encoder = JSONEncoder() 382*890232f2SAndroid Build Coastguard Worker encoder.keyEncodingStrategy = .convertToSnakeCase 383*890232f2SAndroid Build Coastguard Worker let data = try encoder.encode(reader) 384*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(data, jsonData.data(using: .utf8)) 385*890232f2SAndroid Build Coastguard Worker } catch { 386*890232f2SAndroid Build Coastguard Worker XCTFail(error.localizedDescription) 387*890232f2SAndroid Build Coastguard Worker } 388*890232f2SAndroid Build Coastguard Worker } 389*890232f2SAndroid Build Coastguard Worker 390*890232f2SAndroid Build Coastguard Worker var jsonData: String { 391*890232f2SAndroid Build Coastguard Worker """ 392*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\"} 393*890232f2SAndroid Build Coastguard Worker """ 394*890232f2SAndroid Build Coastguard Worker } 395*890232f2SAndroid Build Coastguard Worker } 396