diff --git a/swift/Sources/FlatBuffers/ByteBuffer.swift b/swift/Sources/FlatBuffers/ByteBuffer.swift index 6eb1d3d374b..bf1f47eb131 100644 --- a/swift/Sources/FlatBuffers/ByteBuffer.swift +++ b/swift/Sources/FlatBuffers/ByteBuffer.swift @@ -40,11 +40,11 @@ public struct ByteBuffer { /// This storage doesn't own the memory, therefore, we won't deallocate on deinit. private let isOwned: Bool + /// Capacity of UInt8 the buffer can hold + private let capacity: Int /// Retained blob of data that requires the storage to retain a pointer to. @usableFromInline var retainedBlob: Blob - /// Capacity of UInt8 the buffer can hold - var capacity: Int @usableFromInline init(count: Int) { @@ -179,11 +179,11 @@ public struct ByteBuffer { /// The size of the elements written to the buffer + their paddings private var _readerIndex: Int = 0 /// Reader is the position of the current Writer Index (capacity - size) - public var reader: Int { _storage.capacity &- _readerIndex } + public var reader: Int { capacity &- _readerIndex } /// Current size of the buffer public var size: UOffset { UOffset(_readerIndex) } /// Current capacity for the buffer - public var capacity: Int { _storage.capacity } + public let capacity: Int /// Constructor that creates a Flatbuffer object from an InternalByteBuffer /// - Parameter @@ -194,6 +194,7 @@ public struct ByteBuffer { blob: .byteBuffer(byteBuffer), capacity: byteBuffer.capacity) _readerIndex = Int(byteBuffer.size) + self.capacity = byteBuffer.capacity } /// Constructor that creates a Flatbuffer from unsafe memory region by copying @@ -209,7 +210,8 @@ public struct ByteBuffer { { _storage = Storage(count: capacity) _storage.copy(from: memory, count: capacity) - _readerIndex = _storage.capacity + _readerIndex = capacity + self.capacity = capacity } /// Constructor that creates a Flatbuffer object from a UInt8 @@ -218,7 +220,8 @@ public struct ByteBuffer { @inline(__always) public init(bytes: [UInt8]) { _storage = Storage(blob: .array(bytes), capacity: bytes.count) - _readerIndex = _storage.capacity + _readerIndex = bytes.count + capacity = bytes.count } #if !os(WASI) @@ -228,7 +231,8 @@ public struct ByteBuffer { @inline(__always) public init(data: Data) { _storage = Storage(blob: .data(data), capacity: data.count) - _readerIndex = _storage.capacity + _readerIndex = data.count + capacity = data.count } /// Constructor that creates a Flatbuffer object from a ContiguousBytes @@ -241,7 +245,8 @@ public struct ByteBuffer { count: Int) { _storage = Storage(blob: .bytes(contiguousBytes), capacity: count) - _readerIndex = _storage.capacity + _readerIndex = count + self.capacity = count } #endif @@ -259,7 +264,8 @@ public struct ByteBuffer { _storage = Storage( blob: .pointer(memory), capacity: capacity) - _readerIndex = _storage.capacity + _readerIndex = capacity + self.capacity = capacity } /// Creates a copy of the existing flatbuffer, by copying it to a different memory. @@ -275,6 +281,7 @@ public struct ByteBuffer { { _storage = Storage(blob: blob, capacity: count) _readerIndex = removeBytes + capacity = count } /// Write stores an object into the buffer directly or indirectly. @@ -289,11 +296,11 @@ public struct ByteBuffer { func write(value: T, index: Int, direct: Bool = false) { var index = index if !direct { - index = _storage.capacity &- index + index = capacity &- index } - assert(index < _storage.capacity, "Write index is out of writing bound") + assert(index < capacity, "Write index is out of writing bound") assert(index >= 0, "Writer index should be above zero") - withUnsafePointer(to: value) { ptr in + _ = withUnsafePointer(to: value) { ptr in _storage.withUnsafeRawPointer { memcpy( $0.advanced(by: index), @@ -325,7 +332,7 @@ public struct ByteBuffer { count: Int) -> [T] { assert( - index + count <= _storage.capacity, + index + count <= capacity, "Reading out of bounds is illegal") return _storage.readWithUnsafeRawPointer(position: index) { @@ -348,7 +355,7 @@ public struct ByteBuffer { body: (UnsafeRawBufferPointer) throws -> T) rethrows -> T { assert( - index + count <= _storage.capacity, + index + count <= capacity, "Reading out of bounds is illegal") return try _storage.readWithUnsafeRawPointer(position: index) { try body(UnsafeRawBufferPointer(start: $0, count: count)) @@ -368,7 +375,7 @@ public struct ByteBuffer { type: String.Encoding = .utf8) -> String? { assert( - index + count <= _storage.capacity, + index + count <= capacity, "Reading out of bounds is illegal") return _storage.readWithUnsafeRawPointer(position: index) { let buf = UnsafeBufferPointer( @@ -390,7 +397,7 @@ public struct ByteBuffer { count: Int) -> String? { assert( - index + count <= _storage.capacity, + index + count <= capacity, "Reading out of bounds is illegal") return _storage.readWithUnsafeRawPointer(position: index) { String(cString: $0.bindMemory(to: UInt8.self, capacity: count)) @@ -404,11 +411,11 @@ public struct ByteBuffer { public func duplicate(removing removeBytes: Int = 0) -> ByteBuffer { assert(removeBytes > 0, "Can NOT remove negative bytes") assert( - removeBytes < _storage.capacity, + removeBytes < capacity, "Can NOT remove more bytes than the ones allocated") return ByteBuffer( blob: _storage.retainedBlob, - count: _storage.capacity, + count: capacity, removing: _readerIndex &- removeBytes) } @@ -456,7 +463,7 @@ extension ByteBuffer: CustomDebugStringConvertible { public var debugDescription: String { """ buffer located at: \(_storage.retainedBlob), - with capacity of \(_storage.capacity), + with capacity of \(capacity), { writtenSize: \(_readerIndex), readerSize: \(reader), size: \(size) } """ diff --git a/swift/Sources/FlatBuffers/Mutable.swift b/swift/Sources/FlatBuffers/Mutable.swift index 8d3f0b7b663..c8e607758ca 100644 --- a/swift/Sources/FlatBuffers/Mutable.swift +++ b/swift/Sources/FlatBuffers/Mutable.swift @@ -49,7 +49,7 @@ extension Mutable where Self == Table { /// - index: index of the Element public func mutate(_ value: T, index: Int32) -> Bool { guard index != 0 else { return false } - return mutate(value: value, o: index + position) + return mutate(value: value, o: index &+ position) } /// Directly mutates the element by calling mutate @@ -70,7 +70,7 @@ extension Mutable where Self == Struct { /// - value: New value to be inserted to the buffer /// - index: index of the Element public func mutate(_ value: T, index: Int32) -> Bool { - mutate(value: value, o: index + position) + mutate(value: value, o: index &+ position) } /// Directly mutates the element by calling mutate diff --git a/swift/Sources/FlatBuffers/Struct.swift b/swift/Sources/FlatBuffers/Struct.swift index 562060481ea..df109a08aaa 100644 --- a/swift/Sources/FlatBuffers/Struct.swift +++ b/swift/Sources/FlatBuffers/Struct.swift @@ -45,7 +45,7 @@ public struct Struct { /// - o: Current offset of the data /// - Returns: Data of Type T that conforms to type Scalar public func readBuffer(of type: T.Type, at o: Int32) -> T { - let r = bb.read(def: T.self, position: Int(o + position)) + let r = bb.read(def: T.self, position: Int(o &+ position)) return r } } diff --git a/swift/Sources/FlatBuffers/Table.swift b/swift/Sources/FlatBuffers/Table.swift index 8444e651d26..63b5bf912fc 100644 --- a/swift/Sources/FlatBuffers/Table.swift +++ b/swift/Sources/FlatBuffers/Table.swift @@ -167,7 +167,7 @@ public struct Table { public func vector(at o: Int32) -> Int32 { var o = o o &+= position - return o &+ bb.read(def: Int32.self, position: Int(o)) + 4 + return o &+ bb.read(def: Int32.self, position: Int(o)) &+ 4 } /// Reading an indirect offset of a table. @@ -176,7 +176,7 @@ public struct Table { /// - fbb: ByteBuffer /// - Returns: table offset static public func indirect(_ o: Int32, _ fbb: ByteBuffer) -> Int32 { - o + fbb.read(def: Int32.self, position: Int(o)) + o &+ fbb.read(def: Int32.self, position: Int(o)) } /// Gets a vtable value according to an table Offset and a field offset diff --git a/swift/Sources/FlatBuffers/_InternalByteBuffer.swift b/swift/Sources/FlatBuffers/_InternalByteBuffer.swift index def4330573b..13f2b6e0bb8 100644 --- a/swift/Sources/FlatBuffers/_InternalByteBuffer.swift +++ b/swift/Sources/FlatBuffers/_InternalByteBuffer.swift @@ -31,15 +31,12 @@ struct _InternalByteBuffer { final class Storage { /// pointer to the start of the buffer object in memory private(set) var memory: UnsafeMutableRawPointer - /// Capacity of UInt8 the buffer can hold - private(set) var capacity: Int @usableFromInline init(count: Int, alignment: Int) { memory = UnsafeMutableRawPointer.allocate( byteCount: count, alignment: alignment) - capacity = count } deinit { @@ -54,15 +51,12 @@ struct _InternalByteBuffer { /// Reallocates the buffer incase the object to be written doesnt fit in the current buffer /// - Parameter size: Size of the current object @usableFromInline - func reallocate(_ size: Int, writerSize: Int, alignment: Int) { - let currentWritingIndex = capacity &- writerSize - while capacity <= writerSize &+ size { - capacity = capacity << 1 - } - - /// solution take from Apple-NIO - capacity = capacity.convertToPowerofTwo - + func reallocate( + capacity: Int, + writerSize: Int, + currentWritingIndex: Int, + alignment: Int + ) { let newData = UnsafeMutableRawPointer.allocate( byteCount: capacity, alignment: alignment) @@ -84,7 +78,7 @@ struct _InternalByteBuffer { /// Alignment of the current memory being written to the buffer var alignment = 1 /// Current Index which is being used to write to the buffer, it is written from the end to the start of the buffer - var writerIndex: Int { _storage.capacity &- _writerSize } + var writerIndex: Int { capacity &- _writerSize } /// Reader is the position of the current Writer Index (capacity - size) public var reader: Int { writerIndex } @@ -94,7 +88,7 @@ struct _InternalByteBuffer { @usableFromInline var memory: UnsafeMutableRawPointer { _storage.memory } /// Current capacity for the buffer - public var capacity: Int { _storage.capacity } + public private(set) var capacity: Int /// Constructor that creates a Flatbuffer instance with a size /// - Parameter: @@ -102,6 +96,7 @@ struct _InternalByteBuffer { /// - allowReadingUnalignedBuffers: allow reading from unaligned buffer init(initialSize size: Int) { initialSize = size.convertToPowerofTwo + capacity = initialSize _storage = Storage(count: initialSize, alignment: alignment) _storage.initialize(for: initialSize) } @@ -246,11 +241,11 @@ struct _InternalByteBuffer { func write(value: T, index: Int, direct: Bool = false) { var index = index if !direct { - index = _storage.capacity &- index + index = capacity &- index } - assert(index < _storage.capacity, "Write index is out of writing bound") + assert(index < capacity, "Write index is out of writing bound") assert(index >= 0, "Writer index should be above zero") - withUnsafePointer(to: value) { + _ = withUnsafePointer(to: value) { memcpy( _storage.memory.advanced(by: index), $0, @@ -262,10 +257,24 @@ struct _InternalByteBuffer { /// - Parameter size: size of object @discardableResult @usableFromInline - @inline(__always) mutating func ensureSpace(size: Int) -> Int { - if size &+ _writerSize > _storage.capacity { - _storage.reallocate(size, writerSize: _writerSize, alignment: alignment) + let expectedWriterIndex = size &+ _writerSize + if expectedWriterIndex > capacity { + + let currentWritingIndex = capacity &- _writerSize + while capacity <= expectedWriterIndex { + capacity = capacity << 1 + } + + /// solution take from Apple-NIO + capacity = capacity.convertToPowerofTwo + + + _storage.reallocate( + capacity: capacity, + writerSize: _writerSize, + currentWritingIndex: currentWritingIndex, + alignment: alignment) } assert(size < FlatBufferMaxSize, "Buffer can't grow beyond 2 Gigabytes") return size @@ -295,8 +304,9 @@ struct _InternalByteBuffer { _writerSize = 0 alignment = 1 if keepingCapacity { - _storage.initialize(for: _storage.capacity) + _storage.initialize(for: capacity) } else { + capacity = initialSize _storage = Storage(count: initialSize, alignment: alignment) } } @@ -358,7 +368,7 @@ extension _InternalByteBuffer: CustomDebugStringConvertible { public var debugDescription: String { """ - buffer located at: \(_storage.memory), with capacity of \(_storage.capacity) + buffer located at: \(_storage.memory), with capacity of \(capacity) { writerSize: \(_writerSize), readerSize: \(reader), writerIndex: \( writerIndex) } """ diff --git a/swift/Sources/FlexBuffers/ByteBuffer.swift b/swift/Sources/FlexBuffers/ByteBuffer.swift index 5a91121f436..f490f0d1264 100644 --- a/swift/Sources/FlexBuffers/ByteBuffer.swift +++ b/swift/Sources/FlexBuffers/ByteBuffer.swift @@ -40,11 +40,11 @@ public struct ByteBuffer { /// This storage doesn't own the memory, therefore, we won't deallocate on deinit. private let isOwned: Bool + /// Capacity of UInt8 the buffer can hold + private let capacity: Int /// Retained blob of data that requires the storage to retain a pointer to. @usableFromInline var retainedBlob: Blob - /// Capacity of UInt8 the buffer can hold - var capacity: Int @usableFromInline init(count: Int) { @@ -178,12 +178,10 @@ public struct ByteBuffer { /// The size of the elements written to the buffer + their paddings private var _readerIndex: Int = 0 -// /// Reader is the position of the current Writer Index (capacity - size) -// var reader: Int { _storage.capacity &- _readerIndex } /// Current size of the buffer public var count: Int { _readerIndex } /// Current capacity for the buffer including unused space - public var capacity: Int { _storage.capacity } + public let capacity: Int /// Constructor that creates a Flatbuffer object from an InternalByteBuffer /// - Parameter @@ -194,6 +192,7 @@ public struct ByteBuffer { blob: .byteBuffer(byteBuffer), capacity: byteBuffer.capacity) _readerIndex = byteBuffer.writerIndex + capacity = byteBuffer.capacity } /// Constructor that creates a Flatbuffer from unsafe memory region by copying @@ -209,7 +208,8 @@ public struct ByteBuffer { { _storage = Storage(count: capacity) _storage.copy(from: memory, count: capacity) - _readerIndex = _storage.capacity + _readerIndex = capacity + self.capacity = capacity } /// Constructor that creates a Flatbuffer object from a UInt8 @@ -218,7 +218,8 @@ public struct ByteBuffer { @inline(__always) public init(bytes: [UInt8]) { _storage = Storage(blob: .array(bytes), capacity: bytes.count) - _readerIndex = _storage.capacity + _readerIndex = bytes.count + capacity = bytes.count } #if !os(WASI) @@ -228,7 +229,8 @@ public struct ByteBuffer { @inline(__always) public init(data: Data) { _storage = Storage(blob: .data(data), capacity: data.count) - _readerIndex = _storage.capacity + _readerIndex = data.count + capacity = data.count } /// Constructor that creates a Flatbuffer object from a ContiguousBytes @@ -241,7 +243,8 @@ public struct ByteBuffer { count: Int) { _storage = Storage(blob: .bytes(contiguousBytes), capacity: count) - _readerIndex = _storage.capacity + _readerIndex = count + capacity = count } #endif @@ -259,7 +262,8 @@ public struct ByteBuffer { _storage = Storage( blob: .pointer(memory), capacity: capacity) - _readerIndex = _storage.capacity + _readerIndex = capacity + self.capacity = capacity } /// Creates a copy of the existing flatbuffer, by copying it to a different memory. @@ -275,6 +279,7 @@ public struct ByteBuffer { { _storage = Storage(blob: blob, capacity: count) _readerIndex = removeBytes + capacity = count } /// Write stores an object into the buffer directly or indirectly. @@ -289,11 +294,11 @@ public struct ByteBuffer { func write(value: T, index: Int, direct: Bool = false) { var index = index if !direct { - index = _storage.capacity &- index + index = capacity &- index } - assert(index < _storage.capacity, "Write index is out of writing bound") + assert(index < capacity, "Write index is out of writing bound") assert(index >= 0, "Writer index should be above zero") - withUnsafePointer(to: value) { ptr in + _ = withUnsafePointer(to: value) { ptr in _storage.withUnsafeRawPointer { memcpy( $0.advanced(by: index), @@ -387,7 +392,7 @@ public struct ByteBuffer { count: Int) -> [T] { assert( - index + count <= _storage.capacity, + index + count <= capacity, "Reading out of bounds is illegal") return _storage.readWithUnsafeRawPointer(position: index) { @@ -405,7 +410,7 @@ public struct ByteBuffer { type: String.Encoding) -> String? { assert( - index + count <= _storage.capacity, + index + count <= capacity, "Reading out of bounds is illegal") return _storage.readWithUnsafeRawPointer(position: index) { let buf = UnsafeBufferPointer( @@ -427,7 +432,7 @@ public struct ByteBuffer { count: Int) -> String? { assert( - index + count <= _storage.capacity, + index + count <= capacity, "Reading out of bounds is illegal") return _storage.readWithUnsafeRawPointer(position: index) { String(cString: $0.bindMemory(to: UInt8.self, capacity: count)) @@ -446,7 +451,7 @@ public struct ByteBuffer { body: (UnsafeRawBufferPointer) throws -> T) rethrows -> T { assert( - index + count <= _storage.capacity, + index + count <= capacity, "Reading out of bounds is illegal") return try _storage.readWithUnsafeRawPointer(position: index) { try body(UnsafeRawBufferPointer(start: $0, count: count)) diff --git a/swift/Sources/FlexBuffers/Reader/FlexBufferVector.swift b/swift/Sources/FlexBuffers/Reader/FlexBufferVector.swift index a134a4f62fb..f9d4234064c 100644 --- a/swift/Sources/FlexBuffers/Reader/FlexBufferVector.swift +++ b/swift/Sources/FlexBuffers/Reader/FlexBufferVector.swift @@ -25,7 +25,7 @@ extension FlexBufferVector { json += "[" for i in 0.. .shareKeys { @@ -705,7 +705,7 @@ public struct FlexBuffersWriter { /// If this vector is part of a map, we will pre-fix an offset to the keys /// to this vector. bitWidth = max(bitWidth, keys!.elementWidth(size: writerIndex, index: 0)) - prefixElements += 2 + prefixElements = prefixElements &+ 2 } var vectorType: FlexBufferType = .key diff --git a/swift/Sources/FlexBuffers/_InternalByteBuffer.swift b/swift/Sources/FlexBuffers/_InternalByteBuffer.swift index 44e1260a5b0..f2ce46745d4 100644 --- a/swift/Sources/FlexBuffers/_InternalByteBuffer.swift +++ b/swift/Sources/FlexBuffers/_InternalByteBuffer.swift @@ -32,32 +32,18 @@ struct _InternalByteBuffer { final class Storage { /// pointer to the start of the buffer object in memory var memory: UnsafeMutableRawPointer - /// Capacity of UInt8 the buffer can hold - var capacity: Int @usableFromInline init(count: Int, alignment: Int) { memory = UnsafeMutableRawPointer.allocate( byteCount: count, alignment: alignment) - capacity = count - } - - @usableFromInline - init(memory: UnsafeMutableRawPointer, capacity: Int, unowned: Bool) { - self.memory = memory - self.capacity = capacity } deinit { memory.deallocate() } - @usableFromInline - func copy(from ptr: UnsafeRawPointer, count: Int) { - memory.copyMemory(from: ptr, byteCount: count) - } - @usableFromInline func initialize(for size: Int) { memset(memory, 0, size) @@ -66,14 +52,11 @@ struct _InternalByteBuffer { /// Reallocates the buffer incase the object to be written doesnt fit in the current buffer /// - Parameter size: Size of the current object @usableFromInline - func reallocate(_ size: Int, writerSize: Int, alignment: Int) { - while capacity <= writerSize &+ size { - capacity = capacity << 1 - } - - /// solution take from Apple-NIO - capacity = capacity.convertToPowerofTwo - + func reallocate( + capacity: Int, + writerSize: Int, + alignment: Int + ) { let newData = UnsafeMutableRawPointer.allocate( byteCount: capacity, alignment: alignment) @@ -97,7 +80,7 @@ struct _InternalByteBuffer { /// Public Pointer to the buffer object in memory. This should NOT be modified for any reason public var memory: UnsafeMutableRawPointer { _storage.memory } /// Current capacity for the buffer - public var capacity: Int { _storage.capacity } + public private(set) var capacity: Int /// Returns the written bytes into the ``ByteBuffer`` public var underlyingBytes: [UInt8] { @@ -113,6 +96,7 @@ struct _InternalByteBuffer { /// - allowReadingUnalignedBuffers: allow reading from unaligned buffer init(initialSize size: Int) { initialSize = size.convertToPowerofTwo + capacity = initialSize _storage = Storage(count: initialSize, alignment: alignment) _storage.initialize(for: initialSize) } @@ -123,8 +107,9 @@ struct _InternalByteBuffer { writerIndex = 0 alignment = 1 if keepingCapacity { - _storage.initialize(for: _storage.capacity) + _storage.initialize(for: capacity) } else { + capacity = initialSize _storage = Storage(count: initialSize, alignment: alignment) } } @@ -136,10 +121,22 @@ struct _InternalByteBuffer { /// Makes sure that buffer has enouch space for each of the objects that will be written into it /// - Parameter size: size of object - @inline(__always) + @usableFromInline mutating func ensureSpace(size: Int) { - guard size &+ writerIndex > _storage.capacity else { return } - _storage.reallocate(size, writerSize: writerIndex, alignment: alignment) + guard size &+ writerIndex > capacity else { return } + + while capacity <= writerIndex &+ size { + capacity = capacity << 1 + } + + /// solution take from Apple-NIO + capacity = capacity.convertToPowerofTwo + + _storage.reallocate( + capacity: capacity, + writerSize: writerIndex, + alignment: alignment + ) } @inline(__always) @@ -215,7 +212,7 @@ extension _InternalByteBuffer: CustomDebugStringConvertible { public var debugDescription: String { """ - buffer located at: \(_storage.memory), with capacity of \(_storage.capacity) + buffer located at: \(_storage.memory), with capacity of \(capacity) { writerIndex: \(writerIndex) } """ } diff --git a/tests/swift/Tests/Flatbuffers/ByteBufferTests.swift b/tests/swift/Tests/Flatbuffers/ByteBufferTests.swift index 3ddbeb85bcd..9d5fad96e2b 100644 --- a/tests/swift/Tests/Flatbuffers/ByteBufferTests.swift +++ b/tests/swift/Tests/Flatbuffers/ByteBufferTests.swift @@ -42,7 +42,7 @@ final class ByteBufferTests: XCTestCase { let byteBuffer = ByteBuffer(data: ptr) byteBuffer.withUnsafeBytes { memory in ptr.withUnsafeBytes { ptr in - XCTAssertEqual(memory.baseAddress!, ptr) + XCTAssertEqual(memory.baseAddress!, ptr.baseAddress!) } } } diff --git a/tests/swift/Tests/Flatbuffers/FlatbuffersVerifierTests.swift b/tests/swift/Tests/Flatbuffers/FlatbuffersVerifierTests.swift index d996e4ddccd..0fc790b5f9b 100644 --- a/tests/swift/Tests/Flatbuffers/FlatbuffersVerifierTests.swift +++ b/tests/swift/Tests/Flatbuffers/FlatbuffersVerifierTests.swift @@ -19,13 +19,7 @@ import XCTest final class FlatbuffersVerifierTests: XCTestCase { - lazy var validStorage: ByteBuffer.Storage = ByteBuffer.Storage( - count: Int(FlatBufferMaxSize) - 1) - lazy var errorStorage: ByteBuffer.Storage = ByteBuffer.Storage( - count: Int(FlatBufferMaxSize) + 1) - var buffer: ByteBuffer! - var validFlatbuffersObject: ByteBuffer! var invalidFlatbuffersObject: ByteBuffer! var invalidFlatbuffersObject2: ByteBuffer! @@ -52,15 +46,13 @@ final class FlatbuffersVerifierTests: XCTestCase { func testVeriferInitPassing() { let memory = UnsafeMutableRawPointer.allocate(byteCount: 8, alignment: 1) - var buffer = ByteBuffer(assumingMemoryBound: memory, capacity: 8) - buffer._storage = validStorage + var buffer = ByteBuffer(assumingMemoryBound: memory, capacity: Int(FlatBufferMaxSize) - 1) XCTAssertNoThrow(try Verifier(buffer: &buffer)) } func testVeriferInitFailing() { let memory = UnsafeMutableRawPointer.allocate(byteCount: 8, alignment: 1) - var buffer = ByteBuffer(assumingMemoryBound: memory, capacity: 8) - buffer._storage = errorStorage + var buffer = ByteBuffer(assumingMemoryBound: memory, capacity: Int(FlatBufferMaxSize) + 1) XCTAssertThrowsError(try Verifier(buffer: &buffer)) }