Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame^] | 1 | import XCTest |
| 2 | @testable import FlatBuffers |
| 3 | |
| 4 | final class FlatBuffersVectors: XCTestCase { |
| 5 | |
| 6 | func testCreatingTwoCountries() { |
| 7 | let norway = "Norway" |
| 8 | let denmark = "Denmark" |
| 9 | var b = FlatBufferBuilder(initialSize: 20) |
| 10 | let noStr = b.create(string: norway) |
| 11 | let deStr = b.create(string: denmark) |
| 12 | let n = Country.createCountry(builder: &b, offset: noStr, log: 888, lan: 700) |
| 13 | let d = Country.createCountry(builder: &b, offset: deStr, log: 200, lan: 100) |
| 14 | let vector = [n, d] |
| 15 | let vectorOffset = b.createVector(ofOffsets: vector) |
| 16 | b.finish(offset: vectorOffset) |
| 17 | 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]) |
| 18 | } |
| 19 | |
| 20 | func testCreateIntArray() { |
| 21 | let numbers: [Int32] = [1, 2, 3, 4, 5] |
| 22 | var b = FlatBufferBuilder(initialSize: 20) |
| 23 | let o = b.createVector(numbers, size: numbers.count) |
| 24 | b.finish(offset: o) |
| 25 | 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]) |
| 26 | } |
| 27 | |
| 28 | func testCreateEmptyIntArray() { |
| 29 | let numbers: [Int32] = [] |
| 30 | var b = FlatBufferBuilder(initialSize: 20) |
| 31 | let o = b.createVector(numbers, size: numbers.count) |
| 32 | b.finish(offset: o) |
| 33 | XCTAssertEqual(b.sizedByteArray, [4, 0, 0, 0, 0, 0, 0, 0]) |
| 34 | } |
| 35 | |
| 36 | func testCreateVectorOfStrings() { |
| 37 | let strs = ["Denmark", "Norway"] |
| 38 | var b = FlatBufferBuilder(initialSize: 20) |
| 39 | let o = b.createVector(ofStrings: strs) |
| 40 | b.finish(offset: o) |
| 41 | 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]) |
| 42 | } |
| 43 | func testCreateSharedStringVector() { |
| 44 | let norway = "Norway" |
| 45 | let denmark = "Denmark" |
| 46 | var b = FlatBufferBuilder(initialSize: 20) |
| 47 | let noStr = b.createShared(string: norway) |
| 48 | let deStr = b.createShared(string: denmark) |
| 49 | let _noStr = b.createShared(string: norway) |
| 50 | let _deStr = b.createShared(string: denmark) |
| 51 | let v = [noStr, deStr, _noStr, _deStr] |
| 52 | let end = b.createVector(ofOffsets: v) |
| 53 | b.finish(offset: end) |
| 54 | 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]) |
| 55 | } |
| 56 | |
| 57 | func testReadInt32Array() { |
| 58 | let data: [Int32] = [1, 2, 3, 4, 5] |
| 59 | var b = FlatBufferBuilder(initialSize: 20) |
| 60 | let v = Numbers.createNumbersVector(b: &b, array: data) |
| 61 | let end = Numbers.createNumbers(b: &b, o: v) |
| 62 | b.finish(offset: end) |
| 63 | let number = Numbers.getRootAsNumbers(ByteBuffer(bytes: b.sizedByteArray)) |
| 64 | XCTAssertEqual(number.vArrayInt32, [1, 2, 3, 4, 5]) |
| 65 | } |
| 66 | |
| 67 | func testReadDoubleArray() { |
| 68 | let data: [Double] = [1, 2, 3, 4, 5] |
| 69 | var b = FlatBufferBuilder(initialSize: 20) |
| 70 | let v = Numbers.createNumbersVector(b: &b, array: data) |
| 71 | let end = Numbers.createNumbers(b: &b, o: v) |
| 72 | b.finish(offset: end) |
| 73 | let number = Numbers.getRootAsNumbers(ByteBuffer(bytes: b.sizedByteArray)) |
| 74 | XCTAssertEqual(number.vArrayDouble, [1, 2, 3, 4, 5]) |
| 75 | } |
| 76 | } |
| 77 | |
| 78 | struct Numbers { |
| 79 | |
| 80 | private var __t: Table |
| 81 | |
| 82 | private init(_ t: Table) { |
| 83 | __t = t |
| 84 | } |
| 85 | |
| 86 | @inlinable static func getRootAsNumbers(_ bb: ByteBuffer) -> Numbers { |
| 87 | return Numbers(Table(bb: bb, position: Int32(bb.read(def: UOffset.self, position: 0)))) |
| 88 | } |
| 89 | |
| 90 | var vArrayInt: [Int]? { return __t.getVector(at: 4) } |
| 91 | var vArrayInt32: [Int32]? { return __t.getVector(at: 4) } |
| 92 | var vArrayDouble: [Double]? { return __t.getVector(at: 4) } |
| 93 | var vArrayFloat: [Float32]? { return __t.getVector(at: 4) } |
| 94 | |
| 95 | static func createNumbersVector(b: inout FlatBufferBuilder, array: [Int]) -> Offset<UOffset> { |
| 96 | return b.createVector(array, size: array.count) |
| 97 | } |
| 98 | |
| 99 | static func createNumbersVector(b: inout FlatBufferBuilder, array: [Int32]) -> Offset<UOffset> { |
| 100 | return b.createVector(array, size: array.count) |
| 101 | } |
| 102 | |
| 103 | static func createNumbersVector(b: inout FlatBufferBuilder, array: [Double]) -> Offset<UOffset> { |
| 104 | return b.createVector(array, size: array.count) |
| 105 | } |
| 106 | |
| 107 | static func createNumbersVector(b: inout FlatBufferBuilder, array: [Float32]) -> Offset<UOffset> { |
| 108 | return b.createVector(array, size: array.count) |
| 109 | } |
| 110 | |
| 111 | static func createNumbers(b: inout FlatBufferBuilder, o: Offset<UOffset>) -> Offset<UOffset> { |
| 112 | let start = b.startTable(with: 1) |
| 113 | b.add(offset: o, at: 4) |
| 114 | return Offset(offset: b.endTable(at: start)) |
| 115 | } |
| 116 | } |