use crate::color::RGB; pub mod collide; pub mod fade; pub mod moving_pixel; pub mod moving_rainbow; pub mod solid; pub use collide::Collide; pub use fade::Fade; pub use moving_pixel::MovingPixel; pub use moving_rainbow::MovingRainbow; pub use solid::Solid; pub trait Pattern: std::fmt::Debug { fn init(&mut self, lights_buf: &mut Vec, num_lights: u16) -> Result<(), ()>; fn step(&mut self, lights_buf: &mut Vec) -> Result; } // #[cfg(test)] // mod tests { // use super::*; // const NUM_LIGHTS: u16 = 10; // fn test_strip() -> Vec { // vec![color::BLACK; NUM_LIGHTS.into()] // } // #[test] // fn moving_pixel() { // let color = RGB(123, 152, 89); // let mut pat = MovingPixel::new(color.clone()); // let mut strip = test_strip(); // assert!(pat.init(&mut strip, NUM_LIGHTS).is_ok()); // // One is my color // assert_eq!(strip.iter().filter(|c| **c == color).count(), 1); // // The rest are off // assert_eq!( // strip.iter().filter(|c| **c == color::BLACK).count(), // (NUM_LIGHTS - 1).into() // ); // pat.step(&mut strip); // // One is my color // assert_eq!(strip.iter().filter(|c| **c == color).count(), 1); // // The rest are off // assert_eq!( // strip.iter().filter(|c| **c == color::BLACK).count(), // (NUM_LIGHTS - 1).into() // ); // } // #[test] // fn solid() {} // #[test] // fn moving_rainbow() {} // #[test] // fn fade() {} // #[test] // fn collide() {} // }