Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 1 | /* |
| 2 | * Copyright 2020 Google Inc. All rights reserved. |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 17 | import Foundation |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 18 | import XCTest |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 19 | @testable import FlatBuffers |
| 20 | |
| 21 | typealias Test = MyGame_Example_Test |
| 22 | typealias Monster = MyGame_Example_Monster |
| 23 | typealias Vec3 = MyGame_Example_Vec3 |
| 24 | typealias Stat = MyGame_Example_Stat |
| 25 | |
| 26 | class FlatBuffersMonsterWriterTests: XCTestCase { |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 27 | |
| 28 | func testData() { |
| 29 | 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]) |
| 30 | let _data = ByteBuffer(data: data) |
| 31 | readMonster(fb: _data) |
| 32 | } |
| 33 | |
| 34 | func testReadFromOtherLanguages() { |
| 35 | let path = FileManager.default.currentDirectoryPath |
| 36 | let url = URL(fileURLWithPath: path, isDirectory: true).appendingPathComponent("monsterdata_test").appendingPathExtension("mon") |
| 37 | guard let data = try? Data(contentsOf: url) else { return } |
| 38 | let _data = ByteBuffer(data: data) |
| 39 | readMonster(fb: _data) |
| 40 | } |
| 41 | |
| 42 | func testCreateMonster() { |
| 43 | let bytes = createMonster(withPrefix: false) |
| 44 | 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]) |
| 45 | readMonster(fb: bytes.buffer) |
| 46 | mutateMonster(fb: bytes.buffer) |
| 47 | readMonster(fb: bytes.buffer) |
| 48 | } |
| 49 | |
| 50 | func testCreateMonsterResizedBuffer() { |
| 51 | let bytes = createMonster(withPrefix: false) |
| 52 | 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]) |
| 53 | readMonster(fb: bytes.sizedBuffer) |
| 54 | } |
| 55 | |
| 56 | func testCreateMonsterPrefixed() { |
| 57 | let bytes = createMonster(withPrefix: true) |
| 58 | 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 | |
| 60 | let newBuf = FlatBuffersUtils.removeSizePrefix(bb: bytes.buffer) |
| 61 | readMonster(fb: newBuf) |
| 62 | } |
| 63 | |
| 64 | func testCreateMonsterUsingCreateMonsterMethodWithNilPos() { |
| 65 | var fbb = FlatBufferBuilder(initialSize: 1) |
| 66 | let name = fbb.create(string: "Frodo") |
| 67 | let mStart = Monster.startMonster(&fbb) |
| 68 | Monster.add(name: name, &fbb) |
| 69 | let root = Monster.endMonster(&fbb, start: mStart) |
| 70 | fbb.finish(offset: root) |
| 71 | let newMonster = Monster.getRootAsMonster(bb: fbb.sizedBuffer) |
| 72 | XCTAssertNil(newMonster.pos) |
| 73 | XCTAssertEqual(newMonster.name, "Frodo") |
| 74 | } |
| 75 | |
| 76 | func testCreateMonsterUsingCreateMonsterMethodWithPosX() { |
| 77 | var fbb = FlatBufferBuilder(initialSize: 1) |
| 78 | let name = fbb.create(string: "Barney") |
| 79 | let mStart = Monster.startMonster(&fbb) |
| 80 | Monster.add(pos: MyGame_Example_Vec3.createVec3(builder: &fbb, x: 10, test2: .blue), &fbb) |
| 81 | Monster.add(name: name, &fbb) |
| 82 | let root = Monster.endMonster(&fbb, start: mStart) |
| 83 | fbb.finish(offset: root) |
| 84 | |
| 85 | let newMonster = Monster.getRootAsMonster(bb: fbb.sizedBuffer) |
| 86 | XCTAssertEqual(newMonster.pos!.x, 10) |
| 87 | XCTAssertEqual(newMonster.name, "Barney") |
| 88 | } |
| 89 | |
| 90 | func testReadMonsterFromUnsafePointerWithoutCopying() { |
| 91 | 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] |
| 92 | let unpacked = array.withUnsafeMutableBytes { (memory) -> MyGame_Example_MonsterT in |
| 93 | let bytes = ByteBuffer(assumingMemoryBound: memory.baseAddress!, capacity: memory.count) |
| 94 | var monster = Monster.getRootAsMonster(bb: bytes) |
| 95 | readFlatbufferMonster(monster: &monster) |
| 96 | let unpacked = monster.unpack() |
| 97 | return unpacked |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 98 | } |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 99 | readObjectApi(monster: unpacked) |
| 100 | } |
| 101 | |
| 102 | func readMonster(fb: ByteBuffer) { |
| 103 | var monster = Monster.getRootAsMonster(bb: fb) |
| 104 | readFlatbufferMonster(monster: &monster) |
| 105 | let unpacked: MyGame_Example_MonsterT? = monster.unpack() |
| 106 | readObjectApi(monster: unpacked!) |
| 107 | guard let buffer = unpacked?.serialize() else { fatalError("Couldnt generate bytebuffer") } |
| 108 | var newMonster = Monster.getRootAsMonster(bb: buffer) |
| 109 | readFlatbufferMonster(monster: &newMonster) |
| 110 | } |
| 111 | |
| 112 | func createMonster(withPrefix prefix: Bool) -> FlatBufferBuilder { |
| 113 | var fbb = FlatBufferBuilder(initialSize: 1) |
| 114 | let names = [fbb.create(string: "Frodo"), fbb.create(string: "Barney"), fbb.create(string: "Wilma")] |
| 115 | var offsets: [Offset<UOffset>] = [] |
| 116 | let start1 = Monster.startMonster(&fbb) |
| 117 | Monster.add(name: names[0], &fbb) |
| 118 | offsets.append(Monster.endMonster(&fbb, start: start1)) |
| 119 | let start2 = Monster.startMonster(&fbb) |
| 120 | Monster.add(name: names[1], &fbb) |
| 121 | offsets.append(Monster.endMonster(&fbb, start: start2)) |
| 122 | let start3 = Monster.startMonster(&fbb) |
| 123 | Monster.add(name: names[2], &fbb) |
| 124 | offsets.append(Monster.endMonster(&fbb, start: start3)) |
| 125 | |
| 126 | let sortedArray = Monster.sortVectorOfMonster(offsets: offsets, &fbb) |
| 127 | |
| 128 | let str = fbb.create(string: "MyMonster") |
| 129 | let test1 = fbb.create(string: "test1") |
| 130 | let test2 = fbb.create(string: "test2") |
| 131 | let _inv: [Byte] = [0, 1, 2, 3, 4] |
| 132 | let inv = fbb.createVector(_inv) |
| 133 | |
| 134 | let fred = fbb.create(string: "Fred") |
| 135 | let mon1Start = Monster.startMonster(&fbb) |
| 136 | Monster.add(name: fred, &fbb) |
| 137 | let mon2 = Monster.endMonster(&fbb, start: mon1Start) |
| 138 | |
| 139 | let size = 2 |
| 140 | Monster.startVectorOfTest4(size, in: &fbb) |
| 141 | MyGame_Example_Test.createTest(builder: &fbb, a: 10, b: 20) |
| 142 | MyGame_Example_Test.createTest(builder: &fbb, a: 30, b: 40) |
| 143 | let test4 = fbb.endVectorOfStructs(count: size) |
| 144 | |
| 145 | let stringTestVector = fbb.createVector(ofOffsets: [test1, test2]) |
| 146 | let mStart = Monster.startMonster(&fbb) |
| 147 | let posStruct = MyGame_Example_Vec3.createVec3(builder: &fbb, x: 1, y: 2, z: 3, test1: 3, test2: .green, test3a: 5, test3b: 6) |
| 148 | Monster.add(pos: posStruct, &fbb) |
| 149 | Monster.add(hp: 80, &fbb) |
| 150 | Monster.add(name: str, &fbb) |
| 151 | Monster.addVectorOf(inventory: inv, &fbb) |
| 152 | Monster.add(testType: .monster, &fbb) |
| 153 | Monster.add(test: mon2, &fbb) |
| 154 | Monster.addVectorOf(test4: test4, &fbb) |
| 155 | Monster.addVectorOf(testarrayofstring: stringTestVector, &fbb) |
| 156 | Monster.add(testbool: true, &fbb) |
| 157 | Monster.addVectorOf(testarrayoftables: sortedArray, &fbb) |
| 158 | let end = Monster.endMonster(&fbb, start: mStart) |
| 159 | Monster.finish(&fbb, end: end, prefix: prefix) |
| 160 | return fbb |
| 161 | } |
| 162 | |
| 163 | func mutateMonster(fb: ByteBuffer) { |
| 164 | let monster = Monster.getRootAsMonster(bb: fb) |
| 165 | XCTAssertFalse(monster.mutate(mana: 10)) |
| 166 | XCTAssertEqual(monster.testarrayoftables(at: 0)?.name, "Barney") |
| 167 | XCTAssertEqual(monster.testarrayoftables(at: 1)?.name, "Frodo") |
| 168 | XCTAssertEqual(monster.testarrayoftables(at: 2)?.name, "Wilma") |
| 169 | |
| 170 | // Example of searching for a table by the key |
| 171 | XCTAssertNotNil(monster.testarrayoftablesBy(key: "Frodo")) |
| 172 | XCTAssertNotNil(monster.testarrayoftablesBy(key: "Barney")) |
| 173 | XCTAssertNotNil(monster.testarrayoftablesBy(key: "Wilma")) |
| 174 | |
| 175 | XCTAssertEqual(monster.testType, .monster) |
| 176 | |
| 177 | XCTAssertEqual(monster.mutate(inventory: 1, at: 0), true) |
| 178 | XCTAssertEqual(monster.mutate(inventory: 2, at: 1), true) |
| 179 | XCTAssertEqual(monster.mutate(inventory: 3, at: 2), true) |
| 180 | XCTAssertEqual(monster.mutate(inventory: 4, at: 3), true) |
| 181 | XCTAssertEqual(monster.mutate(inventory: 5, at: 4), true) |
| 182 | |
| 183 | for i in 0..<monster.inventoryCount { |
| 184 | XCTAssertEqual(monster.inventory(at: i), Byte(i + 1)) |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 185 | } |
| 186 | |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 187 | XCTAssertEqual(monster.mutate(inventory: 0, at: 0), true) |
| 188 | XCTAssertEqual(monster.mutate(inventory: 1, at: 1), true) |
| 189 | XCTAssertEqual(monster.mutate(inventory: 2, at: 2), true) |
| 190 | XCTAssertEqual(monster.mutate(inventory: 3, at: 3), true) |
| 191 | XCTAssertEqual(monster.mutate(inventory: 4, at: 4), true) |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 192 | |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 193 | let vec = monster.pos |
| 194 | XCTAssertEqual(vec?.x, 1) |
| 195 | XCTAssertTrue(vec?.mutate(x: 55.0) ?? false) |
| 196 | XCTAssertTrue(vec?.mutate(test1: 55) ?? false) |
| 197 | XCTAssertEqual(vec?.x, 55.0) |
| 198 | XCTAssertEqual(vec?.test1, 55.0) |
| 199 | XCTAssertTrue(vec?.mutate(x: 1) ?? false) |
| 200 | XCTAssertEqual(vec?.x, 1) |
| 201 | XCTAssertTrue(vec?.mutate(test1: 3) ?? false) |
| 202 | } |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 203 | |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 204 | func readFlatbufferMonster(monster: inout MyGame_Example_Monster) { |
| 205 | XCTAssertEqual(monster.hp, 80) |
| 206 | XCTAssertEqual(monster.mana, 150) |
| 207 | XCTAssertEqual(monster.name, "MyMonster") |
| 208 | let pos = monster.pos |
| 209 | XCTAssertEqual(pos?.x, 1) |
| 210 | XCTAssertEqual(pos?.y, 2) |
| 211 | XCTAssertEqual(pos?.z, 3) |
| 212 | XCTAssertEqual(pos?.test1, 3) |
| 213 | XCTAssertEqual(pos?.test2, .green) |
| 214 | let test = pos?.test3 |
| 215 | XCTAssertEqual(test?.a, 5) |
| 216 | XCTAssertEqual(test?.b, 6) |
| 217 | XCTAssertEqual(monster.testType, .monster) |
| 218 | let monster2 = monster.test(type: Monster.self) |
| 219 | XCTAssertEqual(monster2?.name, "Fred") |
| 220 | |
| 221 | XCTAssertEqual(monster.mutate(mana: 10), false) |
| 222 | |
| 223 | XCTAssertEqual(monster.mana, 150) |
| 224 | XCTAssertEqual(monster.inventoryCount, 5) |
| 225 | var sum: Byte = 0 |
| 226 | for i in 0...monster.inventoryCount { |
| 227 | sum += monster.inventory(at: i) |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 228 | } |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 229 | XCTAssertEqual(sum, 10) |
| 230 | XCTAssertEqual(monster.test4Count, 2) |
| 231 | let test0 = monster.test4(at: 0) |
| 232 | let test1 = monster.test4(at: 1) |
| 233 | var sum0 = 0 |
| 234 | var sum1 = 0 |
| 235 | if let a = test0?.a, let b = test0?.b { |
| 236 | sum0 = Int(a) + Int(b) |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 237 | } |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 238 | if let a = test1?.a, let b = test1?.b { |
| 239 | sum1 = Int(a) + Int(b) |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 240 | } |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 241 | XCTAssertEqual(sum0 + sum1, 100) |
| 242 | XCTAssertEqual(monster.testarrayofstringCount, 2) |
| 243 | XCTAssertEqual(monster.testarrayofstring(at: 0), "test1") |
| 244 | XCTAssertEqual(monster.testarrayofstring(at: 1), "test2") |
| 245 | XCTAssertEqual(monster.testbool, true) |
| 246 | |
| 247 | let array = monster.nameSegmentArray |
| 248 | XCTAssertEqual(String(bytes: array ?? [], encoding: .utf8), "MyMonster") |
| 249 | |
| 250 | if 0 == monster.testarrayofboolsCount { |
| 251 | XCTAssertEqual(monster.testarrayofbools.isEmpty, true) |
| 252 | } else { |
| 253 | XCTAssertEqual(monster.testarrayofbools.isEmpty, false) |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 254 | } |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 255 | } |
| 256 | |
| 257 | func readObjectApi(monster: MyGame_Example_MonsterT) { |
| 258 | XCTAssertEqual(monster.hp, 80) |
| 259 | XCTAssertEqual(monster.mana, 150) |
| 260 | XCTAssertEqual(monster.name, "MyMonster") |
| 261 | let pos = monster.pos |
| 262 | XCTAssertEqual(pos?.x, 1) |
| 263 | XCTAssertEqual(pos?.y, 2) |
| 264 | XCTAssertEqual(pos?.z, 3) |
| 265 | XCTAssertEqual(pos?.test1, 3) |
| 266 | XCTAssertEqual(pos?.test2, .green) |
| 267 | let test = pos?.test3 |
| 268 | XCTAssertEqual(test?.a, 5) |
| 269 | XCTAssertEqual(test?.b, 6) |
| 270 | let monster2 = monster.test?.value as? MyGame_Example_MonsterT |
| 271 | XCTAssertEqual(monster2?.name, "Fred") |
| 272 | XCTAssertEqual(monster.mana, 150) |
| 273 | monster.mana = 10 |
| 274 | XCTAssertEqual(monster.mana, 10) |
| 275 | monster.mana = 150 |
| 276 | XCTAssertEqual(monster.mana, 150) |
| 277 | |
| 278 | XCTAssertEqual(monster.inventory.count, 5) |
| 279 | var sum: Byte = 0 |
| 280 | for i in monster.inventory { |
| 281 | sum += i |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 282 | } |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 283 | XCTAssertEqual(sum, 10) |
| 284 | XCTAssertEqual(monster.test4.count, 2) |
| 285 | let test0 = monster.test4[0] |
| 286 | let test1 = monster.test4[1] |
| 287 | var sum0 = 0 |
| 288 | var sum1 = 0 |
| 289 | if let a = test0?.a, let b = test0?.b { |
| 290 | sum0 = Int(a) + Int(b) |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 291 | } |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame^] | 292 | if let a = test1?.a, let b = test1?.b { |
| 293 | sum1 = Int(a) + Int(b) |
| 294 | } |
| 295 | XCTAssertEqual(sum0 + sum1, 100) |
| 296 | XCTAssertEqual(monster.testbool, true) |
| 297 | } |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 298 | } |