blob: f37f2b81516d661d1986e72aad2e169607117b99 [file] [log] [blame]
Austin Schuh58b9b472020-11-25 19:12:44 -08001/*
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 Schuh272c6132020-11-14 16:37:52 -080017import Foundation
Austin Schuh58b9b472020-11-25 19:12:44 -080018import XCTest
Austin Schuh272c6132020-11-14 16:37:52 -080019@testable import FlatBuffers
20
21typealias Test = MyGame_Example_Test
22typealias Monster = MyGame_Example_Monster
23typealias Vec3 = MyGame_Example_Vec3
24typealias Stat = MyGame_Example_Stat
25
26class FlatBuffersMonsterWriterTests: XCTestCase {
Austin Schuh58b9b472020-11-25 19:12:44 -080027
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 Schuh272c6132020-11-14 16:37:52 -080098 }
Austin Schuh58b9b472020-11-25 19:12:44 -080099 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 Schuh272c6132020-11-14 16:37:52 -0800185 }
186
Austin Schuh58b9b472020-11-25 19:12:44 -0800187 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 Schuh272c6132020-11-14 16:37:52 -0800192
Austin Schuh58b9b472020-11-25 19:12:44 -0800193 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 Schuh272c6132020-11-14 16:37:52 -0800203
Austin Schuh58b9b472020-11-25 19:12:44 -0800204 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 Schuh272c6132020-11-14 16:37:52 -0800228 }
Austin Schuh58b9b472020-11-25 19:12:44 -0800229 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 Schuh272c6132020-11-14 16:37:52 -0800237 }
Austin Schuh58b9b472020-11-25 19:12:44 -0800238 if let a = test1?.a, let b = test1?.b {
239 sum1 = Int(a) + Int(b)
Austin Schuh272c6132020-11-14 16:37:52 -0800240 }
Austin Schuh58b9b472020-11-25 19:12:44 -0800241 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 Schuh272c6132020-11-14 16:37:52 -0800254 }
Austin Schuh58b9b472020-11-25 19:12:44 -0800255 }
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 Schuh272c6132020-11-14 16:37:52 -0800282 }
Austin Schuh58b9b472020-11-25 19:12:44 -0800283 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 Schuh272c6132020-11-14 16:37:52 -0800291 }
Austin Schuh58b9b472020-11-25 19:12:44 -0800292 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 Schuh272c6132020-11-14 16:37:52 -0800298}