pub fn str_rev(s: &str) -> String {
s.chars().rev().collect::<String>()
}
pub fn is_palindrome(s: &str) -> bool {
s == str_rev(s)
}
pub fn chomp(text: &mut String) {
if text.ends_with('\n') {
text.pop();
if text.ends_with('\r') {
text.pop();
}
}
}
pub fn center(s: &str, width: usize) -> String {
format!("{s:^w$}", w = width)
}
pub fn capitalize(s: &str) -> String {
if s.is_empty() {
String::new()
} else {
let chars: Vec<char> = s.chars().collect();
let first = chars[0].to_uppercase();
let rest = chars.into_iter().skip(1).collect::<String>().to_lowercase();
format!("{}{}", first, rest)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn str_rev_test1() {
assert_eq!(str_rev(""), "");
assert_eq!(str_rev("a"), "a");
assert_eq!(str_rev("ab"), "ba");
assert_eq!(str_rev("anna"), "anna");
assert_eq!(str_rev("abc"), "cba");
assert_eq!(str_rev("AbCdE"), "EdCbA");
}
#[test]
fn is_palindrome_test1() {
assert!(is_palindrome(""));
assert!(is_palindrome("a"));
assert!(is_palindrome("aa"));
assert!(is_palindrome("anna"));
assert!(is_palindrome("görög"));
}
#[test]
fn is_palindrome_test2() {
assert_eq!(is_palindrome("ab"), false);
assert_eq!(is_palindrome("Anna"), false);
}
#[test]
fn chomp_test1() {
let mut text = "".to_string();
chomp(&mut text);
assert_eq!(text, "");
let mut text = "abc".to_string();
chomp(&mut text);
assert_eq!(text, "abc");
let mut text = "\n".to_string();
chomp(&mut text);
assert_eq!(text, "");
let mut text = "\r\n".to_string();
chomp(&mut text);
assert_eq!(text, "");
let mut text = "\nend".to_string();
chomp(&mut text);
assert_eq!(text, "\nend");
let mut text = "\r\nend".to_string();
chomp(&mut text);
assert_eq!(text, "\r\nend");
let mut text = "longer\nstring\n".to_string();
chomp(&mut text);
assert_eq!(text, "longer\nstring");
}
#[test]
fn center_test1() {
assert_eq!(center("-", 0), "-");
assert_eq!(center("-", 1), "-");
assert_eq!(center("-", 2), "- ");
assert_eq!(center("-", 3), " - ");
}
#[test]
fn capitalize_test1() {
assert_eq!(capitalize(""), "");
assert_eq!(capitalize("a"), "A");
assert_eq!(capitalize("aa"), "Aa");
assert_eq!(capitalize("aNnA"), "Anna");
}
}