1*890232f2SAndroid Build Coastguard Worker /* 2*890232f2SAndroid Build Coastguard Worker * Copyright 2021 Google Inc. All rights reserved. 3*890232f2SAndroid Build Coastguard Worker * 4*890232f2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*890232f2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*890232f2SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*890232f2SAndroid Build Coastguard Worker * 8*890232f2SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*890232f2SAndroid Build Coastguard Worker * 10*890232f2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*890232f2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*890232f2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*890232f2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*890232f2SAndroid Build Coastguard Worker * limitations under the License. 15*890232f2SAndroid Build Coastguard Worker */ 16*890232f2SAndroid Build Coastguard Worker 17*890232f2SAndroid Build Coastguard Worker import XCTest 18*890232f2SAndroid Build Coastguard Worker @testable import FlatBuffers 19*890232f2SAndroid Build Coastguard Worker 20*890232f2SAndroid Build Coastguard Worker final class FlatBuffersDoubleTests: XCTestCase { 21*890232f2SAndroid Build Coastguard Worker 22*890232f2SAndroid Build Coastguard Worker let country = "Norway" 23*890232f2SAndroid Build Coastguard Worker testCreateFinishnull24*890232f2SAndroid Build Coastguard Worker func testCreateFinish() { 25*890232f2SAndroid Build Coastguard Worker var b = FlatBufferBuilder(initialSize: 16) 26*890232f2SAndroid Build Coastguard Worker let countryOff = CountryDouble.createCountry( 27*890232f2SAndroid Build Coastguard Worker builder: &b, 28*890232f2SAndroid Build Coastguard Worker name: country, 29*890232f2SAndroid Build Coastguard Worker log: 200, 30*890232f2SAndroid Build Coastguard Worker lan: 100) 31*890232f2SAndroid Build Coastguard Worker b.finish(offset: countryOff) 32*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 33*890232f2SAndroid Build Coastguard Worker let v: [UInt8] = [ 34*890232f2SAndroid Build Coastguard Worker 16, 0, 0, 0, 0, 0, 10, 0, 28, 0, 4, 0, 8, 0, 16, 0, 10, 35*890232f2SAndroid Build Coastguard Worker 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 64, 0, 0, 0, 36*890232f2SAndroid Build Coastguard Worker 0, 0, 0, 105, 64, 0, 0, 0, 0, 6, 0, 0, 0, 78, 111, 114, 119, 37*890232f2SAndroid Build Coastguard Worker 97, 121, 0, 0 38*890232f2SAndroid Build Coastguard Worker ] 39*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 40*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(b.sizedByteArray, v) 41*890232f2SAndroid Build Coastguard Worker } 42*890232f2SAndroid Build Coastguard Worker testCreateFinishWithPrefixnull43*890232f2SAndroid Build Coastguard Worker func testCreateFinishWithPrefix() { 44*890232f2SAndroid Build Coastguard Worker var b = FlatBufferBuilder(initialSize: 16) 45*890232f2SAndroid Build Coastguard Worker let countryOff = CountryDouble.createCountry( 46*890232f2SAndroid Build Coastguard Worker builder: &b, 47*890232f2SAndroid Build Coastguard Worker name: country, 48*890232f2SAndroid Build Coastguard Worker log: 200, 49*890232f2SAndroid Build Coastguard Worker lan: 100) 50*890232f2SAndroid Build Coastguard Worker b.finish(offset: countryOff, addPrefix: true) 51*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 52*890232f2SAndroid Build Coastguard Worker let v: [UInt8] = [ 53*890232f2SAndroid Build Coastguard Worker 60, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 28 54*890232f2SAndroid Build Coastguard Worker , 0, 4, 0, 8, 0, 16, 0, 10, 0, 0, 0, 24, 0, 0, 0, 0, 0, 55*890232f2SAndroid Build Coastguard Worker 0, 0, 0, 0, 89, 64, 0, 0, 0, 0, 0, 0, 105, 64, 0, 0, 0, 56*890232f2SAndroid Build Coastguard Worker 0, 6, 0, 0, 0, 78, 111, 114, 119, 97, 121, 0, 0 57*890232f2SAndroid Build Coastguard Worker ] 58*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 59*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(b.sizedByteArray, v) 60*890232f2SAndroid Build Coastguard Worker } 61*890232f2SAndroid Build Coastguard Worker } 62*890232f2SAndroid Build Coastguard Worker 63*890232f2SAndroid Build Coastguard Worker class CountryDouble { 64*890232f2SAndroid Build Coastguard Worker 65*890232f2SAndroid Build Coastguard Worker static let offsets: (name: VOffset, lan: VOffset, lng: VOffset) = (4, 6, 8) 66*890232f2SAndroid Build Coastguard Worker 67*890232f2SAndroid Build Coastguard Worker private var table: Table 68*890232f2SAndroid Build Coastguard Worker 69*890232f2SAndroid Build Coastguard Worker private init(table t: Table) { table = t } 70*890232f2SAndroid Build Coastguard Worker getRootAsCountrynull71*890232f2SAndroid Build Coastguard Worker static func getRootAsCountry(_ bb: ByteBuffer) -> CountryDouble { 72*890232f2SAndroid Build Coastguard Worker let pos = bb.read(def: Int32.self, position: Int(bb.size)) 73*890232f2SAndroid Build Coastguard Worker return CountryDouble(table: Table(bb: bb, position: Int32(pos))) 74*890232f2SAndroid Build Coastguard Worker } 75*890232f2SAndroid Build Coastguard Worker 76*890232f2SAndroid Build Coastguard Worker static func createCountry( 77*890232f2SAndroid Build Coastguard Worker builder: inout FlatBufferBuilder, 78*890232f2SAndroid Build Coastguard Worker name: String, 79*890232f2SAndroid Build Coastguard Worker log: Double, 80*890232f2SAndroid Build Coastguard Worker lan: Double) -> Offset 81*890232f2SAndroid Build Coastguard Worker { 82*890232f2SAndroid Build Coastguard Worker createCountry( 83*890232f2SAndroid Build Coastguard Worker builder: &builder, 84*890232f2SAndroid Build Coastguard Worker offset: builder.create(string: name), 85*890232f2SAndroid Build Coastguard Worker log: log, 86*890232f2SAndroid Build Coastguard Worker lan: lan) 87*890232f2SAndroid Build Coastguard Worker } 88*890232f2SAndroid Build Coastguard Worker 89*890232f2SAndroid Build Coastguard Worker static func createCountry( 90*890232f2SAndroid Build Coastguard Worker builder: inout FlatBufferBuilder, 91*890232f2SAndroid Build Coastguard Worker offset: Offset, 92*890232f2SAndroid Build Coastguard Worker log: Double, 93*890232f2SAndroid Build Coastguard Worker lan: Double) -> Offset 94*890232f2SAndroid Build Coastguard Worker { 95*890232f2SAndroid Build Coastguard Worker let _start = builder.startTable(with: 3) 96*890232f2SAndroid Build Coastguard Worker CountryDouble.add(builder: &builder, lng: log) 97*890232f2SAndroid Build Coastguard Worker CountryDouble.add(builder: &builder, lan: lan) 98*890232f2SAndroid Build Coastguard Worker CountryDouble.add(builder: &builder, name: offset) 99*890232f2SAndroid Build Coastguard Worker return CountryDouble.end(builder: &builder, startOffset: _start) 100*890232f2SAndroid Build Coastguard Worker } 101*890232f2SAndroid Build Coastguard Worker 102*890232f2SAndroid Build Coastguard Worker static func end( 103*890232f2SAndroid Build Coastguard Worker builder: inout FlatBufferBuilder, 104*890232f2SAndroid Build Coastguard Worker startOffset: UOffset) -> Offset 105*890232f2SAndroid Build Coastguard Worker { 106*890232f2SAndroid Build Coastguard Worker Offset(offset: builder.endTable(at: startOffset)) 107*890232f2SAndroid Build Coastguard Worker } 108*890232f2SAndroid Build Coastguard Worker addnull109*890232f2SAndroid Build Coastguard Worker static func add(builder: inout FlatBufferBuilder, name: String) { 110*890232f2SAndroid Build Coastguard Worker add(builder: &builder, name: builder.create(string: name)) 111*890232f2SAndroid Build Coastguard Worker } 112*890232f2SAndroid Build Coastguard Worker addnull113*890232f2SAndroid Build Coastguard Worker static func add(builder: inout FlatBufferBuilder, name: Offset) { 114*890232f2SAndroid Build Coastguard Worker builder.add(offset: name, at: Country.offsets.name) 115*890232f2SAndroid Build Coastguard Worker } 116*890232f2SAndroid Build Coastguard Worker addnull117*890232f2SAndroid Build Coastguard Worker static func add(builder: inout FlatBufferBuilder, lan: Double) { 118*890232f2SAndroid Build Coastguard Worker builder.add(element: lan, def: 0, at: Country.offsets.lan) 119*890232f2SAndroid Build Coastguard Worker } 120*890232f2SAndroid Build Coastguard Worker addnull121*890232f2SAndroid Build Coastguard Worker static func add(builder: inout FlatBufferBuilder, lng: Double) { 122*890232f2SAndroid Build Coastguard Worker builder.add(element: lng, def: 0, at: Country.offsets.lng) 123*890232f2SAndroid Build Coastguard Worker } 124*890232f2SAndroid Build Coastguard Worker } 125