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