blob: 4cb245f2f161aed42bc365bf250fda1bf5b829f3 [file] [log] [blame]
Austin Schuh58b9b472020-11-25 19:12:44 -08001/*
James Kuszmaul8e62b022022-03-22 09:33:25 -07002 * Copyright 2021 Google Inc. All rights reserved.
Austin Schuh58b9b472020-11-25 19:12:44 -08003 *
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 XCTest
18@testable import FlatBuffers
19
20final class FlatBuffersVectors: XCTestCase {
Austin Schuh58b9b472020-11-25 19:12:44 -080021
22 func testCreatingTwoCountries() {
23 let norway = "Norway"
24 let denmark = "Denmark"
25 var b = FlatBufferBuilder(initialSize: 20)
26 let noStr = b.create(string: norway)
27 let deStr = b.create(string: denmark)
James Kuszmaul8e62b022022-03-22 09:33:25 -070028 let n = Country.createCountry(
29 builder: &b,
30 offset: noStr,
31 log: 888,
32 lan: 700)
33 let d = Country.createCountry(
34 builder: &b,
35 offset: deStr,
36 log: 200,
37 lan: 100)
Austin Schuh58b9b472020-11-25 19:12:44 -080038 let vector = [n, d]
39 let vectorOffset = b.createVector(ofOffsets: vector)
40 b.finish(offset: vectorOffset)
James Kuszmaul8e62b022022-03-22 09:33:25 -070041 // swiftformat:disable all
Austin Schuh58b9b472020-11-25 19:12:44 -080042 XCTAssertEqual(b.sizedByteArray, [4, 0, 0, 0, 2, 0, 0, 0, 48, 0, 0, 0, 16, 0, 0, 0, 0, 0, 10, 0, 18, 0, 4, 0, 8, 0, 12, 0, 10, 0, 0, 0, 40, 0, 0, 0, 100, 0, 0, 0, 200, 0, 0, 0, 0, 0, 10, 0, 16, 0, 4, 0, 8, 0, 12, 0, 10, 0, 0, 0, 24, 0, 0, 0, 188, 2, 0, 0, 120, 3, 0, 0, 7, 0, 0, 0, 68, 101, 110, 109, 97, 114, 107, 0, 6, 0, 0, 0, 78, 111, 114, 119, 97, 121, 0, 0])
James Kuszmaul8e62b022022-03-22 09:33:25 -070043 // swiftformat:enable all
Austin Schuh58b9b472020-11-25 19:12:44 -080044 }
45
46 func testCreateIntArray() {
47 let numbers: [Int32] = [1, 2, 3, 4, 5]
48 var b = FlatBufferBuilder(initialSize: 20)
49 let o = b.createVector(numbers, size: numbers.count)
50 b.finish(offset: o)
James Kuszmaul8e62b022022-03-22 09:33:25 -070051 // swiftformat:disable all
Austin Schuh58b9b472020-11-25 19:12:44 -080052 XCTAssertEqual(b.sizedByteArray, [4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0])
James Kuszmaul8e62b022022-03-22 09:33:25 -070053 // swiftformat:enable all
Austin Schuh58b9b472020-11-25 19:12:44 -080054 }
55
56 func testCreateEmptyIntArray() {
57 let numbers: [Int32] = []
58 var b = FlatBufferBuilder(initialSize: 20)
59 let o = b.createVector(numbers, size: numbers.count)
60 b.finish(offset: o)
61 XCTAssertEqual(b.sizedByteArray, [4, 0, 0, 0, 0, 0, 0, 0])
62 }
63
64 func testCreateVectorOfStrings() {
65 let strs = ["Denmark", "Norway"]
66 var b = FlatBufferBuilder(initialSize: 20)
67 let o = b.createVector(ofStrings: strs)
68 b.finish(offset: o)
James Kuszmaul8e62b022022-03-22 09:33:25 -070069 // swiftformat:disable all
Austin Schuh58b9b472020-11-25 19:12:44 -080070 XCTAssertEqual(b.sizedByteArray, [4, 0, 0, 0, 2, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 6, 0, 0, 0, 78, 111, 114, 119, 97, 121, 0, 0, 7, 0, 0, 0, 68, 101, 110, 109, 97, 114, 107, 0])
James Kuszmaul8e62b022022-03-22 09:33:25 -070071 // swiftformat:enable all
Austin Schuh58b9b472020-11-25 19:12:44 -080072 }
73 func testCreateSharedStringVector() {
74 let norway = "Norway"
75 let denmark = "Denmark"
76 var b = FlatBufferBuilder(initialSize: 20)
77 let noStr = b.createShared(string: norway)
78 let deStr = b.createShared(string: denmark)
79 let _noStr = b.createShared(string: norway)
80 let _deStr = b.createShared(string: denmark)
81 let v = [noStr, deStr, _noStr, _deStr]
82 let end = b.createVector(ofOffsets: v)
83 b.finish(offset: end)
James Kuszmaul8e62b022022-03-22 09:33:25 -070084 // swiftformat:disable all
Austin Schuh58b9b472020-11-25 19:12:44 -080085 XCTAssertEqual(b.sizedByteArray, [4, 0, 0, 0, 4, 0, 0, 0, 28, 0, 0, 0, 12, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 7, 0, 0, 0, 68, 101, 110, 109, 97, 114, 107, 0, 6, 0, 0, 0, 78, 111, 114, 119, 97, 121, 0, 0])
James Kuszmaul8e62b022022-03-22 09:33:25 -070086 // swiftformat:enable all
Austin Schuh58b9b472020-11-25 19:12:44 -080087 }
88
89 func testReadInt32Array() {
90 let data: [Int32] = [1, 2, 3, 4, 5]
91 var b = FlatBufferBuilder(initialSize: 20)
92 let v = Numbers.createNumbersVector(b: &b, array: data)
93 let end = Numbers.createNumbers(b: &b, o: v)
94 b.finish(offset: end)
95 let number = Numbers.getRootAsNumbers(ByteBuffer(bytes: b.sizedByteArray))
96 XCTAssertEqual(number.vArrayInt32, [1, 2, 3, 4, 5])
97 }
98
99 func testReadDoubleArray() {
100 let data: [Double] = [1, 2, 3, 4, 5]
101 var b = FlatBufferBuilder(initialSize: 20)
102 let v = Numbers.createNumbersVector(b: &b, array: data)
103 let end = Numbers.createNumbers(b: &b, o: v)
104 b.finish(offset: end)
105 let number = Numbers.getRootAsNumbers(ByteBuffer(bytes: b.sizedByteArray))
106 XCTAssertEqual(number.vArrayDouble, [1, 2, 3, 4, 5])
107 }
Austin Schuh272c6132020-11-14 16:37:52 -0800108}
109
110struct Numbers {
Austin Schuh58b9b472020-11-25 19:12:44 -0800111
112 private var __t: Table
113
114 private init(_ t: Table) {
115 __t = t
116 }
117
118 @inlinable
119 static func getRootAsNumbers(_ bb: ByteBuffer) -> Numbers {
James Kuszmaul8e62b022022-03-22 09:33:25 -0700120 Numbers(Table(
121 bb: bb,
122 position: Int32(bb.read(def: UOffset.self, position: 0))))
Austin Schuh58b9b472020-11-25 19:12:44 -0800123 }
124
125 var vArrayInt: [Int]? { __t.getVector(at: 4) }
126 var vArrayInt32: [Int32]? { __t.getVector(at: 4) }
127 var vArrayDouble: [Double]? { __t.getVector(at: 4) }
128 var vArrayFloat: [Float32]? { __t.getVector(at: 4) }
129
James Kuszmaul8e62b022022-03-22 09:33:25 -0700130 static func createNumbersVector(
131 b: inout FlatBufferBuilder,
132 array: [Int]) -> Offset
133 {
Austin Schuh58b9b472020-11-25 19:12:44 -0800134 b.createVector(array, size: array.count)
135 }
136
James Kuszmaul8e62b022022-03-22 09:33:25 -0700137 static func createNumbersVector(
138 b: inout FlatBufferBuilder,
139 array: [Int32]) -> Offset
140 {
Austin Schuh58b9b472020-11-25 19:12:44 -0800141 b.createVector(array, size: array.count)
142 }
143
James Kuszmaul8e62b022022-03-22 09:33:25 -0700144 static func createNumbersVector(
145 b: inout FlatBufferBuilder,
146 array: [Double]) -> Offset
147 {
Austin Schuh58b9b472020-11-25 19:12:44 -0800148 b.createVector(array, size: array.count)
149 }
150
James Kuszmaul8e62b022022-03-22 09:33:25 -0700151 static func createNumbersVector(
152 b: inout FlatBufferBuilder,
153 array: [Float32]) -> Offset
154 {
Austin Schuh58b9b472020-11-25 19:12:44 -0800155 b.createVector(array, size: array.count)
156 }
157
James Kuszmaul8e62b022022-03-22 09:33:25 -0700158 static func createNumbers(b: inout FlatBufferBuilder, o: Offset) -> Offset {
Austin Schuh58b9b472020-11-25 19:12:44 -0800159 let start = b.startTable(with: 1)
160 b.add(offset: o, at: 4)
161 return Offset(offset: b.endTable(at: start))
162 }
Austin Schuh272c6132020-11-14 16:37:52 -0800163}