pub struct PenisSpec {
len: usize
}
impl PenisSpec {
pub fn new() -> PenisSpec {
PenisSpec::new_with_len(3)
}
pub fn new_with_len(x: usize) -> PenisSpec {
PenisSpec {
len: x
}
}
pub fn new_with_total_len(x: usize) -> Option<PenisSpec> {
if x >= 2 {
Some(PenisSpec {
len: x - 2
})
} else {
None
}
}
pub fn generate(&self) -> String {
format!("B{}D","=".repeat(self.len))
}
pub fn print(&self) {
print!("{}", self.generate())
}
pub fn println(&self) {
println!("{}", self.generate())
}
}
#[cfg(test)]
mod tests {
use crate::PenisSpec;
#[test]
fn basic() {
assert_eq!(PenisSpec::new().generate(), "B===D");
}
#[test]
fn len() {
assert_eq!(PenisSpec::new_with_len(4).generate(), "B====D");
assert_eq!(PenisSpec::new_with_len(6).generate(), "B======D");
}
#[test]
fn total_len() {
assert_eq!(PenisSpec::new_with_total_len(6).unwrap().generate(), "B====D");
assert_eq!(PenisSpec::new_with_total_len(8).unwrap().generate(), "B======D");
}
}