import XCTest
import CoreMedia
@testable import Physarum
final class CaptureMathTests: XCTestCase {
func testSlugRules() {
XCTAssertEqual(captureSlug("Mandala Six"), "mandala-six")
XCTAssertEqual(captureSlug("Ember Veil"), "ember-veil")
XCTAssertEqual(captureSlug(" Café Déjà!! "), "cafe-deja")
XCTAssertEqual(captureSlug("***"), "preset") // empty → fallback
XCTAssertEqual(captureSlug("Aurora—Drift"), "aurora-drift") // em-dash → hyphen
}
func testFilenameFormat() {
var c = DateComponents(); c.year = 2026; c.month = 6; c.day = 4; c.hour = 9; c.minute = 7; c.second = 5
let date = Calendar(identifier: .gregorian).date(from: c)!
let name = captureFilename(presetName: "Neural Lattice", date: date, ext: "png")
XCTAssertEqual(name, "physarum-neural-lattice-20260604-090705.png")
}
func testExportDimensionsEvenAndOriented() {
XCTAssertEqual(exportDimensions(aspectWH: 1, longEdge: 2048).w, 2048)
XCTAssertEqual(exportDimensions(aspectWH: 1, longEdge: 2048).h, 2048)
let l = exportDimensions(aspectWH: 16.0/9.0, longEdge: 1920)
XCTAssertEqual(l.w, 1920); XCTAssertEqual(l.h, 1080)
let p = exportDimensions(aspectWH: 9.0/16.0, longEdge: 1920)
XCTAssertEqual(p.w, 1080); XCTAssertEqual(p.h, 1920)
let odd = exportDimensions(aspectWH: 1.5, longEdge: 999)
XCTAssertEqual(odd.w % 2, 0); XCTAssertEqual(odd.h % 2, 0)
}
func testFrameCountAndPTS() {
XCTAssertEqual(clipFrameCount(durationSeconds: 10, fps: 60), 600)
let pts = clipPresentationTime(frameIndex: 30, fps: 60)
XCTAssertEqual(pts.value, 30); XCTAssertEqual(pts.timescale, 60)
XCTAssertEqual(CMTimeGetSeconds(pts), 0.5, accuracy: 1e-9)
}
}