pub const BREEZE_FRAMES: [&str; 6] = ["▹▹▹", "▸▹▹", "▸▸▹", "▸▸▸", "▹▸▸", "▹▹▸"];
pub const BREEZE_ASCII: [&str; 6] = ["...", ">..", ">>.", ">>>", ".>>", "..>"];
#[must_use]
pub fn breeze_frame(tick: u64, ascii: bool) -> &'static str {
let idx = (tick % 6) as usize;
if ascii {
BREEZE_ASCII[idx]
} else {
BREEZE_FRAMES[idx]
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn unicode_frame_zero() {
assert_eq!(breeze_frame(0, false), "▹▹▹");
}
#[test]
fn unicode_all_six_frames() {
let expected = ["▹▹▹", "▸▹▹", "▸▸▹", "▸▸▸", "▹▸▸", "▹▹▸"];
for (tick, &frame) in expected.iter().enumerate() {
assert_eq!(breeze_frame(tick as u64, false), frame, "tick={tick}");
}
}
#[test]
fn ascii_all_six_frames() {
let expected = ["...", ">..", ">>.", ">>>", ".>>", "..>"];
for (tick, &frame) in expected.iter().enumerate() {
assert_eq!(breeze_frame(tick as u64, true), frame, "tick={tick}");
}
}
#[test]
fn wraps_at_six() {
assert_eq!(breeze_frame(6, false), breeze_frame(0, false));
assert_eq!(breeze_frame(7, false), breeze_frame(1, false));
assert_eq!(breeze_frame(12, false), breeze_frame(0, false));
}
#[test]
fn ascii_wraps_at_six() {
assert_eq!(breeze_frame(6, true), breeze_frame(0, true));
}
}