forked from BigfootDev/flatbuffers
* Migrating from Xctests to swift testing This migrates to the new Swift testing framework, which would allow us to always use the latest tech from swift moving forward. * Updates flag to make sure that Wasm testing works
260 lines
6.3 KiB
Swift
260 lines
6.3 KiB
Swift
/*
|
|
* Copyright 2024 Google Inc. All rights reserved.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import Common
|
|
import FlexBuffers
|
|
import Testing
|
|
|
|
struct FlexBuffersWriterTests {
|
|
@Test
|
|
func testDeallocation() {
|
|
let buf: ByteBuffer = {
|
|
var fbx = FlexBuffersWriter()
|
|
fbx.add(string: "Hello")
|
|
fbx.finish()
|
|
return fbx.sizedByteBuffer
|
|
}()
|
|
|
|
buf.withUnsafeBytes {
|
|
#expect(
|
|
Array($0) ==
|
|
[5, 72, 101, 108, 108, 111, 0, 6, 20, 1])
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func testAddingVectorOfScalars() {
|
|
var fbx = FlexBuffersWriter()
|
|
fbx.vector {
|
|
let arr: [Int32] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 20]
|
|
$0.create(vector: arr)
|
|
}
|
|
fbx.finish()
|
|
let buf: ByteBuffer = fbx.sizedByteBuffer
|
|
|
|
buf.withUnsafeBytes {
|
|
// swiftformat:disable all
|
|
#expect(
|
|
Array($0) ==
|
|
[
|
|
10, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 7, 0,
|
|
0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 20, 0, 0, 0, 1, 41, 46, 2, 40, 1,
|
|
])
|
|
// swiftformat:enable all
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func testAddingVectorOfUnsignedScalars() {
|
|
var fbx = FlexBuffersWriter()
|
|
fbx.vector {
|
|
let arr: [UInt] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 20]
|
|
$0.create(vector: arr)
|
|
}
|
|
fbx.finish()
|
|
let buf: ByteBuffer = fbx.sizedByteBuffer
|
|
|
|
buf.withUnsafeBytes {
|
|
// swiftformat:disable all
|
|
#expect(
|
|
Array($0) ==
|
|
[
|
|
10, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
|
|
0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
|
|
0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
81, 51, 2, 40, 1,
|
|
])
|
|
// swiftformat:enable all
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func testAddingVectorOfBools() {
|
|
var fbx = FlexBuffersWriter()
|
|
fbx.vector {
|
|
let arr: [Bool] = [true, false, true, false]
|
|
$0.create(vector: arr)
|
|
}
|
|
fbx.finish()
|
|
let buf: ByteBuffer = fbx.sizedByteBuffer
|
|
|
|
buf.withUnsafeBytes {
|
|
// swiftformat:disable all
|
|
#expect(
|
|
Array($0) ==
|
|
[4, 1, 0, 1, 0, 1, 5, 144, 2, 40, 1])
|
|
// swiftformat:enable all
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func testSortingWithinMap() {
|
|
var fbx = FlexBuffersWriter()
|
|
fbx.map {
|
|
$0.add(bool: false, key: "bool2")
|
|
$0.add(bool: true, key: "bool1")
|
|
}
|
|
fbx.finish()
|
|
let buf: ByteBuffer = fbx.sizedByteBuffer
|
|
buf.withUnsafeBytes {
|
|
// swiftformat:disable all
|
|
#expect(
|
|
Array($0) ==
|
|
[
|
|
98, 111, 111, 108, 50, 0, 98, 111, 111, 108, 49, 0, 2, 7, 14, 2, 1, 2, 1, 0, 104, 104, 4,
|
|
36, 1,
|
|
]
|
|
)
|
|
// swiftformat:enable all
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func testSharingKeyWithinMap() {
|
|
var fbx = FlexBuffersWriter(initialSize: 1000, flags: .shareKeysAndStrings)
|
|
fbx.map {
|
|
$0.add(string: "welcome", key: "welcome")
|
|
$0.add(string: "welcome", key: "welcome")
|
|
$0.add(string: "welcome", key: "welcome")
|
|
}
|
|
fbx.finish()
|
|
let buf: ByteBuffer = fbx.sizedByteBuffer
|
|
buf.withUnsafeBytes {
|
|
// swiftformat:disable all
|
|
#expect(
|
|
Array($0) ==
|
|
[
|
|
119, 101, 108, 99, 111, 109, 101, 0, 7, 119, 101, 108, 99, 111, 109, 101, 0, 3, 18, 19,
|
|
20, 3, 1, 3, 15, 16, 17, 20, 20, 20, 6, 36, 1,
|
|
]
|
|
)
|
|
// swiftformat:enable all
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func testNestingVectorInMap() {
|
|
let buf: ByteBuffer = createSizedBuffer()
|
|
|
|
buf.withUnsafeBytes {
|
|
// swiftformat:disable all
|
|
#expect(
|
|
Array($0) ==
|
|
flexbufferGolden
|
|
)
|
|
// swiftformat:enable all
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func testAddingNil() {
|
|
var fbx = FlexBuffersWriter(
|
|
initialSize: 8,
|
|
flags: .shareKeysAndStrings)
|
|
|
|
fbx.map { map in
|
|
map.addNil(key: "v")
|
|
}
|
|
|
|
fbx.finish()
|
|
let buf: ByteBuffer = fbx.sizedByteBuffer
|
|
buf.withUnsafeBytes {
|
|
// swiftformat:disable all
|
|
#expect(
|
|
Array($0) ==
|
|
[118, 0, 1, 3, 1, 1, 1, 0, 0, 2, 36, 1]
|
|
)
|
|
// swiftformat:enable all
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func testAddingManually() {
|
|
var fbx = FlexBuffersWriter(
|
|
initialSize: 8,
|
|
flags: .shareKeysAndStrings)
|
|
|
|
let outerMap = fbx.startMap()
|
|
|
|
let vector = fbx.startVector(key: "vec")
|
|
fbx.add(int64: -100)
|
|
fbx.add(string: "Fred")
|
|
fbx.indirect(float32: 4.0)
|
|
let lv = fbx.lastValue()
|
|
let blob: [UInt8] = [77]
|
|
fbx.add(blob: blob, length: blob.count)
|
|
fbx.add(bool: false)
|
|
fbx.reuse(value: lv!)
|
|
fbx.endVector(start: vector)
|
|
|
|
let ints: [Int32] = [1, 2, 3]
|
|
fbx.create(vector: ints, key: "bar")
|
|
fbx.createFixed(vector: ints, key: "bar3")
|
|
let bools = [true, false, true, false]
|
|
fbx.create(vector: bools, key: "bools")
|
|
fbx.add(bool: true, key: "bool")
|
|
fbx.add(double: 100, key: "foo")
|
|
|
|
let innerMap = fbx.startMap(key: "mymap")
|
|
fbx.add(string: "Fred", key: "foo")
|
|
fbx.endMap(start: innerMap)
|
|
|
|
fbx.endMap(start: outerMap)
|
|
|
|
fbx.finish()
|
|
let buf: ByteBuffer = fbx.sizedByteBuffer
|
|
buf.withUnsafeBytes {
|
|
// swiftformat:disable all
|
|
#expect(
|
|
Array($0) ==
|
|
flexbufferGolden
|
|
)
|
|
// swiftformat:enable all
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func testEncodingAllTypes() {
|
|
var fbx = FlexBuffersWriter()
|
|
fbx.vector {
|
|
$0.indirect(int64: 9)
|
|
$0.indirect(uint64: 9)
|
|
$0.indirect(float32: 3)
|
|
$0.indirect(double: 3)
|
|
|
|
$0.addNil()
|
|
$0.add(bool: true)
|
|
$0.add(int64: 9)
|
|
$0.add(int64: -9)
|
|
$0.add(uint64: 9)
|
|
$0.add(double: 2.4)
|
|
$0.add(float32: 2.4)
|
|
$0.add(double: -2.4)
|
|
$0.add(float32: -2.4)
|
|
}
|
|
fbx.finish()
|
|
let buf: ByteBuffer = fbx.sizedByteBuffer
|
|
|
|
buf.withUnsafeBytes {
|
|
// swiftformat:disable all
|
|
#expect(
|
|
Array($0) ==
|
|
allTypesGolden)
|
|
// swiftformat:enable all
|
|
}
|
|
}
|
|
}
|