Added InlineArray pattern overloads to the library to optimize for macOS 26.

This commit is contained in:
2026-09-18 12:30:54 +02:00
parent 52d5d2ec42
commit c9f887bacb
4 changed files with 75 additions and 0 deletions
+6
View File
@@ -36,6 +36,8 @@ enum Mock {
nonisolated(unsafe) static var buttonState: (current: UInt32, pushed: UInt32, released: UInt32) = (0, 0, 0)
/// The 16 bytes behind the last pattern `LCDColor` seen by a stub.
nonisolated(unsafe) static var patternBytes: [UInt8] = []
/// The 8 rows last handed to `setStencilPattern`.
nonisolated(unsafe) static var stencilRows: [UInt8] = []
/// Caps the bytes a file read returns (0 = end of file, negative =
/// error); `nil` fills the whole request.
nonisolated(unsafe) static var fileReadLimit: Int32?
@@ -90,6 +92,7 @@ enum Mock {
events = []
buttonState = (0, 0, 0)
patternBytes = []
stencilRows = []
fileReadLimit = nil
tilesPointer = nil
tilesCount = 0
@@ -246,6 +249,9 @@ enum Mock {
Mock.record("newSprite")
return Mock.fakePointer()
}
spriteAPI.pointee.setStencilPattern = { _, pattern in
Mock.stencilRows = Array(UnsafeBufferPointer(start: pattern, count: 8))
}
spriteAPI.pointee.freeSprite = { _ in
Mock.record("freeSprite")
}
+29
View File
@@ -64,6 +64,24 @@ struct WrapperTests {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff])
}
@Test func inlineArrayPatternMatchesTheTupleOne() throws {
guard #available(macOS 26, *) else { return }
// An array literal picks the InlineArray overload; a tuple literal
// still picks the tuple one.
let inline = Graphics.Pattern(rows: [1, 2, 3, 4, 5, 6, 7, 8])
let tuple = Graphics.Pattern(rows: (1, 2, 3, 4, 5, 6, 7, 8))
#expect(withUnsafeBytes(of: inline.bytes, Array.init)
== withUnsafeBytes(of: tuple.bytes, Array.init))
Graphics.fillRect(x: 0, y: 0, width: 8, height: 8, color: .pattern(inline))
#expect(Mock.patternBytes == [1, 2, 3, 4, 5, 6, 7, 8,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff])
var pattern = inline
pattern.inlineBytes[8] = 0x0f
#expect(pattern.bytes.8 == 0x0f)
}
@Test func drawTextSendsUTF8BytesAndLength() {
let width = Graphics.drawText("Hëllo", x: 4, y: 6)
#expect(Mock.events == ["drawText(Hëllo,enc:\(kUTF8Encoding.rawValue),4,6)"])
@@ -121,6 +139,17 @@ struct WrapperTests {
#expect(updated == [ObjectIdentifier(sprite)])
}
@Test func spriteStencilPatternOverloadsSendTheSameRows() {
let sprite = Sprite()
sprite.setStencilPattern((1, 2, 3, 4, 5, 6, 7, 8))
#expect(Mock.stencilRows == [1, 2, 3, 4, 5, 6, 7, 8])
guard #available(macOS 26, *) else { return }
Mock.stencilRows = []
sprite.setStencilPattern([1, 2, 3, 4, 5, 6, 7, 8])
#expect(Mock.stencilRows == [1, 2, 3, 4, 5, 6, 7, 8])
}
@Test func spriteIsFreedOnDeinitAndNotWhileReferenced() {
var sprite: Sprite? = Sprite()
_ = sprite