@@ 1,6 1,6 @@
[package]
name = "bright"
-version = "2.0.1"
+version = "2.0.2"
description = "Screen backlight control"
homepage = "https://bitbucket.org/flub/bright"
authors = ["Floris Bruynooghe <flub@devork.be>"]
@@ 94,8 94,11 @@ impl BacklightDevice {
// Returns the new raw brightness.
pub fn set(&self, n: u32) -> Result<u32, failure::Error> {
let max = self.max_brightness()?;
- let raw = max as f64 / 100.0 * n as f64;
- self.set_brightness(raw.round() as u32)
+ let raw = match (max as f64 / 100.0 * n as f64).round() as u32 {
+ r if r <= max => r,
+ _ => max
+ };
+ self.set_brightness(raw)
}
// Increase brightness with percentage
@@ 103,7 106,11 @@ impl BacklightDevice {
let max = self.max_brightness()?;
let cur = self.get_brightness()?;
let inc = (max as f64 / 100.0 * n as f64) as u32;
- self.set_brightness(cur + inc)
+ let raw = match cur + inc {
+ r if r <= max => r,
+ _ => max
+ };
+ self.set_brightness(raw)
}
// Decrease brightness with percentage
@@ 111,7 118,11 @@ impl BacklightDevice {
let max = self.max_brightness()?;
let cur = self.get_brightness()?;
let dec = (max as f64 / 100.0 * n as f64) as u32;
- self.set_brightness(cur - dec)
+ let raw = match cur.checked_sub(dec) {
+ Some(r) => r,
+ None => 0,
+ };
+ self.set_brightness(raw)
}
}
@@ 204,21 215,44 @@ mod tests {
}
#[test]
+ fn set_105_pct() {
+ let dir = create_device(1222, 1234); // 99%
+ let dev = BacklightDevice::new(dir.path());
+ dev.set(105).unwrap();
+ assert_eq!(dev.get().unwrap(), 100);
+ }
+
+ #[test]
fn incr() {
- let dir = create_device(1234, 1234);
+ let dir = create_device(617, 1234); // 50%
let dev = BacklightDevice::new(dir.path());
- dev.set(50).unwrap();
+ assert_eq!(dev.get().unwrap(), 50);
dev.incr(1).unwrap();
assert_eq!(dev.get().unwrap(), 51);
}
#[test]
+ fn incr_gt_max() {
+ let dir = create_device(1222, 1234); // 99%
+ let dev = BacklightDevice::new(dir.path());
+ dev.incr(5).unwrap();
+ assert_eq!(dev.get().unwrap(), 100);
+ }
+
+ #[test]
fn decr() {
- let dir = create_device(1234, 1234);
+ let dir = create_device(617, 1234); // 50%
let dev = BacklightDevice::new(dir.path());
- dev.set(50).unwrap();
dev.decr(1).unwrap();
assert_eq!(dev.get().unwrap(), 49);
}
+ #[test]
+ fn decr_lt_zero() {
+ let dir = create_device(12, 1234); // 1%
+ let dev = BacklightDevice::new(dir.path());
+ dev.decr(5).unwrap();
+ assert_eq!(dev.get().unwrap(), 0);
+ }
+
}