// ABOUTME: Unit-Tests für Bragi Property-Enums und Battery-Level-Konvertierung. // ABOUTME: Testet BatteryStatus-Konvertierung und Promille-zu-Prozent-Umrechnung. use corsairctl::bragi::properties::{battery_promille_to_percent, BatteryStatus, Property}; #[test] fn battery_status_from_byte_discharging() { assert_eq!(BatteryStatus::from_byte(0x01), BatteryStatus::Discharging); } #[test] fn battery_status_from_byte_charging_both_values() { // Sowohl 0x03 als auch 0x04 bedeuten "Charging" assert_eq!(BatteryStatus::from_byte(0x03), BatteryStatus::Charging); assert_eq!(BatteryStatus::from_byte(0x04), BatteryStatus::Charging); } #[test] fn battery_status_from_byte_all_known_values() { assert_eq!(BatteryStatus::from_byte(0x00), BatteryStatus::Offline); assert_eq!(BatteryStatus::from_byte(0x01), BatteryStatus::Discharging); assert_eq!(BatteryStatus::from_byte(0x02), BatteryStatus::Low); assert_eq!(BatteryStatus::from_byte(0x03), BatteryStatus::Charging); assert_eq!(BatteryStatus::from_byte(0x04), BatteryStatus::Charging); assert_eq!(BatteryStatus::from_byte(0x05), BatteryStatus::FullyCharged); } #[test] fn battery_status_unknown_value() { let status = BatteryStatus::from_byte(0xFF); assert!(matches!(status, BatteryStatus::Unknown(0xFF))); } #[test] fn battery_status_labels() { assert_eq!(BatteryStatus::Offline.label(), "Offline"); assert_eq!(BatteryStatus::Discharging.label(), "Discharging"); assert_eq!(BatteryStatus::Low.label(), "Low"); assert_eq!(BatteryStatus::Charging.label(), "Charging"); assert_eq!(BatteryStatus::FullyCharged.label(), "Full"); assert_eq!(BatteryStatus::Unknown(0xFF).label(), "Unknown"); } #[test] fn battery_status_is_charging() { assert!(BatteryStatus::Charging.is_charging()); assert!(!BatteryStatus::Discharging.is_charging()); assert!(!BatteryStatus::FullyCharged.is_charging()); assert!(!BatteryStatus::Offline.is_charging()); } #[test] fn battery_promille_to_percent_full() { assert!((battery_promille_to_percent(1000) - 100.0).abs() < f32::EPSILON); } #[test] fn battery_promille_to_percent_half() { assert!((battery_promille_to_percent(500) - 50.0).abs() < f32::EPSILON); } #[test] fn battery_promille_to_percent_empty() { assert!((battery_promille_to_percent(0) - 0.0).abs() < f32::EPSILON); } #[test] fn battery_promille_to_percent_fractional() { // 735 Promille = 73.5% assert!((battery_promille_to_percent(735) - 73.5).abs() < f32::EPSILON); } #[test] fn property_ids_match_protocol() { assert_eq!(Property::BatteryLevel.id(), 0x0F); assert_eq!(Property::BatteryStatus.id(), 0x10); assert_eq!(Property::Brightness.id(), 0x02); assert_eq!(Property::Mode.id(), 0x03); assert_eq!(Property::VendorId.id(), 0x11); assert_eq!(Property::ProductId.id(), 0x12); assert_eq!(Property::AppFirmware.id(), 0x13); assert_eq!(Property::BuildFirmware.id(), 0x14); assert_eq!(Property::Sidetone.id(), 0x09); }