Files
playdate-kit/Tests/PlaydateKit/PlaydateKitTests.swift
T
javier 2e7ee12ec1
CI / Build & test (macOS) (push) Has been cancelled
CI / Embedded Swift cross-compile (push) Has been cancelled
Documentation / deploy (push) Has been cancelled
Adjusted the naming of the library in the Package file.
2026-07-25 12:02:55 +02:00

88 lines
3.0 KiB
Swift

import Testing
@testable import PlaydateKit
// Most of the binding requires a running Playdate (the API struct is handed
// to the game at launch), so these tests cover the pure value types and the
// inline C helpers that work without it.
@Test func buttonsOptionSetMatchesCMasks() {
#expect(System.Buttons.left.rawValue == 1 << 0)
#expect(System.Buttons.right.rawValue == 1 << 1)
#expect(System.Buttons.up.rawValue == 1 << 2)
#expect(System.Buttons.down.rawValue == 1 << 3)
#expect(System.Buttons.b.rawValue == 1 << 4)
#expect(System.Buttons.a.rawValue == 1 << 5)
let combined: System.Buttons = [.a, .up]
#expect(combined.contains(.a))
#expect(!combined.contains(.b))
}
@Test func graphicsRectConvertsBetweenOriginSizeAndEdges() {
let rect = Graphics.Rect(x: 10, y: 20, width: 30, height: 40)
#expect(rect.left == 10)
#expect(rect.right == 40)
#expect(rect.top == 20)
#expect(rect.bottom == 60)
let translated = rect.translated(dx: 5, dy: -5)
#expect(translated.left == 15)
#expect(translated.top == 15)
let roundTripped = Graphics.Rect(rect.cValue)
#expect(roundTripped.left == rect.left && roundTripped.bottom == rect.bottom)
}
@Test func spriteRectRoundTripsThroughC() {
let rect = Rect(x: 1.5, y: 2.5, width: 3, height: 4)
let roundTripped = Rect(rect.cValue)
#expect(roundTripped.x == 1.5)
#expect(roundTripped.y == 2.5)
#expect(roundTripped.width == 3)
#expect(roundTripped.height == 4)
}
@Test func soundFormatPropertiesMatchCMacros() {
#expect(!Sound.Format.mono8bit.isStereo)
#expect(Sound.Format.stereo16bit.isStereo)
#expect(Sound.Format.mono16bit.is16bit)
#expect(!Sound.Format.monoADPCM.is16bit)
#expect(Sound.Format.mono8bit.bytesPerFrame == 1)
#expect(Sound.Format.stereo8bit.bytesPerFrame == 2)
#expect(Sound.Format.mono16bit.bytesPerFrame == 2)
#expect(Sound.Format.stereo16bit.bytesPerFrame == 4)
}
@Test func midiNoteFrequencyConversionRoundTrips() {
// A4 (MIDI 69) is 440 Hz.
let a4 = Sound.frequency(forNote: 69)
#expect(abs(a4 - 440) < 0.01)
let note = Sound.note(forFrequency: 440)
#expect(abs(note - 69) < 0.001)
}
@Test func cStringHelpersRoundTripUTF8() {
let original = "héllo, wörld"
let copy = original.copiedPlaydateCString()
defer { copy.deallocate() }
#expect(String(playdateCString: copy) == original)
let viaClosure = original.withPlaydateCString { String(playdateCString: $0) }
#expect(viaClosure == original)
}
@Test func dateTimeMirrorsCStruct() {
let dateTime = System.DateTime(year: 2026, month: 7, day: 24, weekday: 5,
hour: 12, minute: 34, second: 56)
let roundTripped = System.DateTime(dateTime.cValue)
#expect(roundTripped.year == 2026)
#expect(roundTripped.month == 7)
#expect(roundTripped.day == 24)
#expect(roundTripped.weekday == 5)
#expect(roundTripped.hour == 12)
#expect(roundTripped.minute == 34)
#expect(roundTripped.second == 56)
}