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