use super::Factorization;
use crate::integer::Z;
use std::fmt;
use string_builder::Builder;
impl fmt::Display for Factorization {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let mut builder = Builder::default();
builder.append('[');
for (num, factor) in Vec::<(Z, u64)>::from(self).iter().enumerate() {
builder.append(format!("({}, {})", factor.0, factor.1));
if num < Vec::<(Z, u64)>::from(self).len() - 1 {
builder.append(", ");
}
}
builder.append(']');
write!(
f,
"{}",
builder
.string()
.expect("Vector string contains invalid bytes.")
)
}
}
#[cfg(test)]
mod test_to_string {
use crate::utils::Factorization;
#[test]
fn working_large_positive() {
let fac = Factorization::from(u64::MAX);
assert_eq!(format!("[({}, 1)]", u64::MAX), fac.to_string());
}
#[test]
fn working_large_negative() {
let fac = Factorization::from(i64::MIN);
assert_eq!(format!("[({}, 1)]", i64::MIN), fac.to_string());
}
#[test]
fn working_positive() {
let fac = Factorization::from(42);
assert_eq!("[(42, 1)]", fac.to_string());
}
#[test]
fn working_negative() {
let fac = Factorization::from(-42);
assert_eq!("[(-42, 1)]", fac.to_string());
}
#[test]
fn working_use_result_of_to_string_as_input() {
let mut fac = Factorization::from((1200, 20));
fac.refine();
assert_eq!("[(3, 1), (20, 3)]", fac.to_string());
}
#[test]
fn working_refined_negative() {
let mut fac = Factorization::from((-1200, 20));
fac.refine();
assert_eq!("[(-1, 1), (3, 1), (20, 3)]", fac.to_string());
}
}