code improvements

This commit is contained in:
Simon Gardling
2022-04-07 08:47:00 -04:00
parent ed2bdd09e7
commit c10843140b
2 changed files with 26 additions and 25 deletions

View File

@@ -44,30 +44,15 @@ impl std::fmt::Debug for HintEnum<'static> {
}
}
// TODO: implement `core::fmt::Display` instead
impl ToString for HintEnum<'static> {
fn to_string(&self) -> String {
match self {
HintEnum::Single(single_data) => single_data.to_string(),
HintEnum::Many(multi_data) => {
let max_i: i32 = (multi_data.len() as i32) - 1;
"[".to_owned()
+ &multi_data
.iter()
.map(|x| r#"""#.to_string() + x + r#"""#)
.enumerate()
.map(|(i, x)| {
// Add comma and space if needed
if max_i > i as i32 {
return x + ", ";
} else {
return x;
}
})
.collect::<Vec<String>>()
.concat() + "]"
format!("{:?}", multi_data)
}
HintEnum::None => String::new(),
HintEnum::None => String::from("None"),
}
}
}
@@ -114,4 +99,21 @@ mod tests {
assert_eq!(generate_hint(key), value);
}
}
#[test]
fn hint_to_string_test() {
let values = HashMap::from([
("x^2", HintEnum::Single("x^2")),
(
r#"["n(", "nh(", "gnum("]"#,
HintEnum::Many(&["n(", "nh(", "gnum("]),
),
(r#"["n("]"#, HintEnum::Many(&["n("])),
("None", HintEnum::None),
]);
for (key, value) in values {
assert_eq!(value.to_string(), key);
}
}
}