Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 1 | /* |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 2 | * Copyright 2021 Google Inc. All rights reserved. |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 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 XCTest |
| 18 | @testable import FlatBuffers |
| 19 | |
| 20 | final class FlatBuffersVectors: XCTestCase { |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 21 | |
| 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 Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 28 | 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 Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 38 | let vector = [n, d] |
| 39 | let vectorOffset = b.createVector(ofOffsets: vector) |
| 40 | b.finish(offset: vectorOffset) |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 41 | // swiftformat:disable all |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 42 | 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 Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 43 | // swiftformat:enable all |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 44 | } |
| 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 Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 51 | // swiftformat:disable all |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 52 | 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 Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 53 | // swiftformat:enable all |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 54 | } |
| 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 Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 69 | // swiftformat:disable all |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 70 | 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 Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 71 | // swiftformat:enable all |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 72 | } |
| 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 Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 84 | // swiftformat:disable all |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 85 | 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 Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 86 | // swiftformat:enable all |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 87 | } |
| 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 Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 108 | } |
| 109 | |
| 110 | struct Numbers { |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 111 | |
| 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 Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 120 | Numbers(Table( |
| 121 | bb: bb, |
| 122 | position: Int32(bb.read(def: UOffset.self, position: 0)))) |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 123 | } |
| 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 Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 130 | static func createNumbersVector( |
| 131 | b: inout FlatBufferBuilder, |
| 132 | array: [Int]) -> Offset |
| 133 | { |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 134 | b.createVector(array, size: array.count) |
| 135 | } |
| 136 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 137 | static func createNumbersVector( |
| 138 | b: inout FlatBufferBuilder, |
| 139 | array: [Int32]) -> Offset |
| 140 | { |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 141 | b.createVector(array, size: array.count) |
| 142 | } |
| 143 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 144 | static func createNumbersVector( |
| 145 | b: inout FlatBufferBuilder, |
| 146 | array: [Double]) -> Offset |
| 147 | { |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 148 | b.createVector(array, size: array.count) |
| 149 | } |
| 150 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 151 | static func createNumbersVector( |
| 152 | b: inout FlatBufferBuilder, |
| 153 | array: [Float32]) -> Offset |
| 154 | { |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 155 | b.createVector(array, size: array.count) |
| 156 | } |
| 157 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame^] | 158 | static func createNumbers(b: inout FlatBufferBuilder, o: Offset) -> Offset { |
Austin Schuh | 58b9b47 | 2020-11-25 19:12:44 -0800 | [diff] [blame] | 159 | let start = b.startTable(with: 1) |
| 160 | b.add(offset: o, at: 4) |
| 161 | return Offset(offset: b.endTable(at: start)) |
| 162 | } |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 163 | } |