Files
MacMonitor/Tests/MMFanTests.swift
T
gronod f9093b1d99
MacMonitor CI/CD Pipeline / Build & Test (Intel x86_64) (push) Canceled after 0s
feat(fan): implement MMFanTelemetryProvider for multi-fan RPM and utilization (Issue #4)
2026-09-08 12:22:17 +01:00

49 lines
1.6 KiB
Swift

import XCTest
@testable import MacMonitor
final class MMFanTests: XCTestCase {
func testFanUtilizationCalculation() {
let fanList: [[String: NSNumber]] = [
[
"currentRPM": NSNumber(value: 2000.0),
"minRPM": NSNumber(value: 1200.0),
"maxRPM": NSNumber(value: 5000.0),
"targetRPM": NSNumber(value: 2000.0)
],
[
"currentRPM": NSNumber(value: 2500.0),
"minRPM": NSNumber(value: 1200.0),
"maxRPM": NSNumber(value: 5000.0),
"targetRPM": NSNumber(value: 2500.0)
]
]
let metrics = MMFanTelemetryProvider.calculateFanMetrics(fromFanList: fanList)
let count = metrics["fanCount"] as? Int ?? 0
let avgRPM = metrics["averageRPM"] as? Double ?? 0
let peakRPM = metrics["peakRPM"] as? Double ?? 0
let fans = metrics["fans"] as? [[String: Any]] ?? []
XCTAssertEqual(count, 2)
XCTAssertEqual(avgRPM, 2250.0, accuracy: 0.1)
XCTAssertEqual(peakRPM, 2500.0, accuracy: 0.1)
XCTAssertEqual(fans.count, 2)
let fan0 = fans[0]
let util0 = fan0["utilizationPercent"] as? Double ?? 0
// (2000 - 1200) / 3800 * 100 = 21.05%
XCTAssertEqual(util0, 21.05, accuracy: 0.1)
}
func testLiveFanProvider() throws {
let provider = MMFanTelemetryProvider()
XCTAssertEqual(provider.domain, .fan)
let sample = try provider.sampleTelemetry()
XCTAssertNotNil(sample)
XCTAssertNotNil(sample["fanCount"])
}
}