Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ jobs:
run: |
swift sdk list
swift build --build-tests --swift-sdk swift-6.2.1-RELEASE_wasm
wasmtime --dir . .build/wasm32-unknown-wasip1/debug/FlatBuffers.Test.Swift.WasmPackageTests.xctest
wasmtime --dir . .build/wasm32-unknown-wasip1/debug/FlatBuffers.Test.Swift.WasmPackageTests.xctest --testing-library swift-testing

build-ts:
name: Build TS
Expand Down
44 changes: 22 additions & 22 deletions tests/swift/Tests/Flatbuffers/ByteBufferTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,51 +14,58 @@
* limitations under the License.
*/

import XCTest
import Foundation
import Testing

@testable import FlatBuffers

final class ByteBufferTests: XCTestCase {
struct ByteBufferTests {

@Test
func testCopyingMemory() {
let count = 100
let ptr = UnsafeMutableRawPointer.allocate(byteCount: count, alignment: 1)
let byteBuffer = ByteBuffer(copyingMemoryBound: ptr, capacity: count)
byteBuffer.withUnsafeBytes { memory in
XCTAssertNotEqual(memory.baseAddress, ptr)
#expect(memory.baseAddress! != ptr)
}
}

@Test
func testSamePointer() {
let count = 100
let ptr = UnsafeMutableRawPointer.allocate(byteCount: count, alignment: 1)
let byteBuffer = ByteBuffer(assumingMemoryBound: ptr, capacity: count)
byteBuffer.withUnsafeBytes { memory in
XCTAssertEqual(memory.baseAddress!, ptr)
#expect(memory.baseAddress! == ptr)
}
}

@Test
func testSameDataPtr() {
let count = 100
let ptr = Data(repeating: 0, count: count)
let byteBuffer = ByteBuffer(data: ptr)
byteBuffer.withUnsafeBytes { memory in
ptr.withUnsafeBytes { ptr in
XCTAssertEqual(memory.baseAddress!, ptr.baseAddress!)
#expect(memory.baseAddress! == ptr.baseAddress!)
}
}
}

@Test
func testSameArrayPtr() {
let count = 100
let ptr: [UInt8] = Array(repeating: 0, count: count)
let byteBuffer = ByteBuffer(bytes: ptr)
ptr.withUnsafeBytes { ptr in
byteBuffer.withUnsafeBytes { memory in
XCTAssertEqual(memory.baseAddress, ptr.baseAddress)
#expect(memory.baseAddress == ptr.baseAddress)
}
}
}

@Test
func testReadingDoubleBuffer() {
let count = 8
let array: [Double] = Array(repeating: 8.8, count: count)
Expand All @@ -69,15 +76,16 @@ final class ByteBufferTests: XCTestCase {
}
let byteBuffer = ByteBuffer(bytes: bytes)
byteBuffer.withUnsafePointerToSlice(index: 0, count: count) { ptr in
XCTAssertEqual(ptr.count, count)
#expect(ptr.count == count)
bytes.withUnsafeBufferPointer {
XCTAssertEqual(
UnsafeRawPointer($0.baseAddress),
UnsafeRawPointer(ptr.baseAddress))
#expect(
UnsafeRawPointer($0.baseAddress) ==
UnsafeRawPointer(ptr.baseAddress))
}
}
}

@Test
func testReadingNativeStructs() {
let array = [
MyGame_Example_Vec3(
Expand Down Expand Up @@ -111,11 +119,11 @@ final class ByteBufferTests: XCTestCase {
let byteBuffer = ByteBuffer(bytes: bytes)
byteBuffer
.withUnsafePointerToSlice(index: 0, count: count) { bufferPointer in
XCTAssertEqual(bufferPointer.count, count)
#expect(bufferPointer.count == count)
bytes.withUnsafeBufferPointer { ptr in
XCTAssertEqual(
UnsafeRawPointer(ptr.baseAddress),
UnsafeRawPointer(bufferPointer.baseAddress))
#expect(
UnsafeRawPointer(ptr.baseAddress) ==
UnsafeRawPointer(bufferPointer.baseAddress))
}
}
}
Expand All @@ -126,11 +134,3 @@ private struct TestNativeStructs: NativeStruct {
let y: Double
let z: Int
}

extension MyGame_Example_Color: CaseIterable {
public static let allCases: [MyGame_Example_Color] = [
.red,
.blue,
.green,
]
}
148 changes: 80 additions & 68 deletions tests/swift/Tests/Flatbuffers/FlatBuffersArraysTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,22 @@

#if compiler(>=6.2)

import XCTest
import Testing

@testable import FlatBuffers

@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, *)
final class FlatBuffersArraysTests: XCTestCase {
struct FlatBuffersArraysTests {

@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, *)
@Test
func testStructSizes() {
XCTAssertEqual(MemoryLayout<MyGame_Example_NestedStruct>.size, 32)
XCTAssertEqual(MemoryLayout<MyGame_Example_ArrayStruct>.size, 160)
XCTAssertEqual(MemoryLayout<MyGame_Example_LargeArrayStruct>.size, 2496)
#expect(MemoryLayout<MyGame_Example_NestedStruct>.size == 32)
#expect(MemoryLayout<MyGame_Example_ArrayStruct>.size == 160)
#expect((MemoryLayout<MyGame_Example_LargeArrayStruct>.size == 2496))
}

@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, *)
@Test
func testGoldenData() {
// swiftformat:disable all
let data: [UInt8] = [
Expand All @@ -45,9 +48,11 @@ final class FlatBuffersArraysTests: XCTestCase {
]
// swiftformat:enable all

XCTAssertEqual(data, createArrayTable())
#expect(data == createArrayTable())
}

@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, *)
@Test
func testData() throws {
var buf = ByteBuffer(bytes: createArrayTable())
let table: MyGame_Example_ArrayTable = try getCheckedRoot(
Expand All @@ -58,6 +63,8 @@ final class FlatBuffersArraysTests: XCTestCase {
verifyNativeStruct(a: table.a)
}

@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, *)
@Test
func testObjectAPI() throws {
var buf = ByteBuffer(bytes: createArrayTable())
let table: MyGame_Example_ArrayTable = try getCheckedRoot(
Expand All @@ -66,105 +73,110 @@ final class FlatBuffersArraysTests: XCTestCase {
verifyNativeStruct(a: table.unpack().a)
}

@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, *)
@Test
func testDefaults() {
XCTAssertEqual(
MyGame_Example_NestedStruct(),
MyGame_Example_NestedStruct(
a: [0, 0],
b: .a,
c: [0, 0],
d: [0, 0]))
#expect(
MyGame_Example_NestedStruct() ==
MyGame_Example_NestedStruct(
a: [0, 0],
b: .a,
c: [0, 0],
d: [0, 0]))
}

@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, *)
func verifyNativeStruct(a: MyGame_Example_ArrayStruct?) {
let a = a!
XCTAssertEqual(a.a, 12.34)
XCTAssertEqual(a.b.count, 15)
#expect(a.a == 12.34)
#expect(a.b.count == 15)
var sum: Int32 = 0
for i in a.b.startIndex..<a.b.endIndex {
sum += a.b[i]
}
XCTAssertEqual(sum, 120)
XCTAssertEqual(a.c, -127)
XCTAssertEqual(a.d.count, 2)
#expect(sum == 120)
#expect(a.c == -127)
#expect(a.d.count == 2)
let nestedStruct1 = a.d[0]
XCTAssertEqual(nestedStruct1.a.toArray(), [-1, 2])
XCTAssertEqual(nestedStruct1.b, .a)
XCTAssertEqual(nestedStruct1.c.toArray(), [.c, .b])
XCTAssertEqual(
nestedStruct1.d.toArray(),
[0x1122334455667788, -0x1122334455667788])
#expect(nestedStruct1.a.toArray() == [-1, 2])
#expect(nestedStruct1.b == .a)
#expect(nestedStruct1.c.toArray() == [.c, .b])
#expect(
nestedStruct1.d.toArray() ==
[0x1122334455667788, -0x1122334455667788])

let nestedStruct2 = a.d[1]
XCTAssertEqual(nestedStruct2.a.toArray(), [3, -4])
XCTAssertEqual(nestedStruct2.b, .b)
XCTAssertEqual(nestedStruct2.c.toArray(), [.b, .a])
XCTAssertEqual(
nestedStruct2.d.toArray(),
[-0x1122334455667788, 0x1122334455667788])

XCTAssertEqual(a.e, 1)
XCTAssertEqual(a.f.count, 2)
#expect(nestedStruct2.a.toArray() == [3, -4])
#expect(nestedStruct2.b == .b)
#expect(nestedStruct2.c.toArray() == [.b, .a])
#expect(
nestedStruct2.d.toArray() ==
[-0x1122334455667788, 0x1122334455667788])

#expect(a.e == 1)
#expect(a.f.count == 2)
}

@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, *)
func verifyMutations(in table: MyGame_Example_ArrayTable) {
let a = table.mutableA!
XCTAssertEqual(a.a, 12.34)
XCTAssertEqual(a.b.count, 15)
#expect(a.a == 12.34)
#expect(a.b.count == 15)
var sum: Int32 = 0
for i in a.b.startIndex..<a.b.endIndex {
sum += a.b[i]
}
XCTAssertEqual(sum, 120)
XCTAssertEqual(a.c, -127)
XCTAssertEqual(a.d.count, 2)
#expect(sum == 120)
#expect(a.c == -127)
#expect(a.d.count == 2)
let nestedStruct1 = a.d[0]

XCTAssertEqual(nestedStruct1.a.reduce(0) { $0 + $1 }, 1)
XCTAssertEqual(nestedStruct1.b, .a)
XCTAssertEqual(nestedStruct1.c[0], .c)
XCTAssertEqual(nestedStruct1.c[1], .b)
#expect(nestedStruct1.a.reduce(0) { $0 + $1 } == 1)
#expect(nestedStruct1.b == .a)
#expect(nestedStruct1.c[0] == .c)
#expect(nestedStruct1.c[1] == .b)

let nestedStruct2 = a.d[1]
XCTAssertEqual(nestedStruct2.a.reduce(0) { $0 + $1 }, -1)
XCTAssertEqual(nestedStruct2.b, .b)
XCTAssertEqual(nestedStruct2.c[0], .b)
XCTAssertEqual(nestedStruct2.c[1], .a)
XCTAssertEqual(nestedStruct2.d[0], -0x1122334455667788)
XCTAssertEqual(nestedStruct2.d[1], 0x1122334455667788)
#expect(nestedStruct2.a.reduce(0) { $0 + $1 } == -1)
#expect(nestedStruct2.b == .b)
#expect(nestedStruct2.c[0] == .b)
#expect(nestedStruct2.c[1] == .a)
#expect(nestedStruct2.d[0] == -0x1122334455667788)
#expect(nestedStruct2.d[1] == 0x1122334455667788)

XCTAssertTrue(a.mutate(b: 1000, at: 0))
XCTAssertTrue(a.mutate(b: 2000, at: 1))
#expect(a.mutate(b: 1000, at: 0) == true)
#expect(a.mutate(b: 2000, at: 1) == true)

XCTAssertTrue(nestedStruct2.mutate(c: .a, at: 0))
XCTAssertTrue(nestedStruct2.mutate(c: .b, at: 1))
#expect(nestedStruct2.mutate(c: .a, at: 0) == true)
#expect(nestedStruct2.mutate(c: .b, at: 1) == true)

XCTAssertEqual(nestedStruct2.c[0], .a)
XCTAssertEqual(nestedStruct2.c[1], .b)
#expect(nestedStruct2.c[0] == .a)
#expect(nestedStruct2.c[1] == .b)

XCTAssertTrue(nestedStruct2.mutate(d: 0, at: 0))
XCTAssertTrue(nestedStruct2.mutate(d: 0, at: 1))
#expect(nestedStruct2.mutate(d: 0, at: 0) == true)
#expect(nestedStruct2.mutate(d: 0, at: 1) == true)

XCTAssertEqual(nestedStruct2.d.reduce(0) { $0 + $1 }, 0)
#expect(nestedStruct2.d.reduce(0) { $0 + $1 } == 0)

let nativeStruct = table.a?.d[1]

XCTAssertEqual(nativeStruct?.c[0], .a)
XCTAssertEqual(nativeStruct?.c[1], .b)
#expect(nativeStruct?.c[0] == .a)
#expect(nativeStruct?.c[1] == .b)

XCTAssertEqual(nativeStruct?.d[0], 0)
XCTAssertEqual(nativeStruct?.d[1], 0)
#expect(nativeStruct?.d[0] == 0)
#expect(nativeStruct?.d[1] == 0)

XCTAssertTrue(a.mutate(b: 1, at: 0))
XCTAssertTrue(a.mutate(b: 2, at: 1))
#expect(a.mutate(b: 1, at: 0) == true)
#expect(a.mutate(b: 2, at: 1) == true)

XCTAssertTrue(nestedStruct2.mutate(c: .b, at: 0))
XCTAssertTrue(nestedStruct2.mutate(c: .a, at: 1))
#expect(nestedStruct2.mutate(c: .b, at: 0) == true)
#expect(nestedStruct2.mutate(c: .a, at: 1) == true)

XCTAssertTrue(nestedStruct2.mutate(d: -0x1122334455667788, at: 0))
XCTAssertTrue(nestedStruct2.mutate(d: 0x1122334455667788, at: 1))
#expect(nestedStruct2.mutate(d: -0x1122334455667788, at: 0) == true)
#expect(nestedStruct2.mutate(d: 0x1122334455667788, at: 1) == true)
}

@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, *)
private func createArrayTable() -> [UInt8] {
var builder = FlatBufferBuilder(initialSize: 1024)

Expand Down
Loading
Loading