use rumdl_lib::utils::StrExt;
use rumdl_lib::utils::fast_hash;
#[test]
fn test_trailing_spaces() {
assert_eq!("Hello".trailing_spaces(), 0);
assert_eq!("Hello\n".trailing_spaces(), 0); assert_eq!("".trailing_spaces(), 0);
assert_eq!("Hello ".trailing_spaces(), 1);
assert_eq!("Hello ".trailing_spaces(), 2);
assert_eq!("Hello ".trailing_spaces(), 3);
assert_eq!(" ".trailing_spaces(), 1);
assert_eq!(" ".trailing_spaces(), 2);
assert_eq!(" ".trailing_spaces(), 3);
assert_eq!("Hello world ".trailing_spaces(), 1);
assert_eq!(" Hello world ".trailing_spaces(), 2);
assert_eq!("Hello world ".trailing_spaces(), 3);
assert_eq!("Hello\t ".trailing_spaces(), 1); assert_eq!("Hello \t".trailing_spaces(), 0);
assert_eq!("Hello \n".trailing_spaces(), 2); assert_eq!("Hello\n".trailing_spaces(), 0); assert_eq!("Hello \n".trailing_spaces(), 1); }
#[test]
fn test_replace_trailing_spaces() {
assert_eq!("Hello".replace_trailing_spaces(""), "Hello");
assert_eq!("Hello\n".replace_trailing_spaces(""), "Hello\n"); assert_eq!("".replace_trailing_spaces(""), "");
assert_eq!("Hello ".replace_trailing_spaces(""), "Hello");
assert_eq!("Hello ".replace_trailing_spaces(""), "Hello");
assert_eq!("Hello ".replace_trailing_spaces(""), "Hello");
assert_eq!("Hello ".replace_trailing_spaces("-"), "Hello-");
assert_eq!("Hello ".replace_trailing_spaces("--"), "Hello--");
assert_eq!("Hello ".replace_trailing_spaces("···"), "Hello···");
assert_eq!(" ".replace_trailing_spaces(""), "");
assert_eq!(" ".replace_trailing_spaces(""), "");
assert_eq!(" ".replace_trailing_spaces(""), "");
assert_eq!("Hello world ".replace_trailing_spaces(""), "Hello world");
assert_eq!(" Hello world ".replace_trailing_spaces(""), " Hello world");
assert_eq!("Hello world ".replace_trailing_spaces(""), "Hello world");
assert_eq!("Hello\t ".replace_trailing_spaces(""), "Hello\t"); assert_eq!("Hello \t".replace_trailing_spaces(""), "Hello \t");
assert_eq!("Hello \n".replace_trailing_spaces(""), "Hello\n"); assert_eq!("Hello \n".replace_trailing_spaces("-"), "Hello-\n"); assert_eq!("Hello\n".replace_trailing_spaces(""), "Hello\n"); }
#[test]
fn test_fast_hash() {
let empty_hash = fast_hash("");
assert_ne!(empty_hash, 0);
let hash1 = fast_hash("test string");
let hash2 = fast_hash("test string");
assert_eq!(hash1, hash2);
let hash_a = fast_hash("string a");
let hash_b = fast_hash("string b");
assert_ne!(hash_a, hash_b);
let hash_lower = fast_hash("test");
let hash_upper = fast_hash("TEST");
assert_ne!(hash_lower, hash_upper);
let hash_short = fast_hash("test");
let hash_long = fast_hash("test "); assert_ne!(hash_short, hash_long);
let long_string = "a".repeat(1000);
let hash_long = fast_hash(&long_string);
assert_ne!(hash_long, 0);
}
#[test]
fn test_complex_str_ext_usage() {
let text = "Line with trailing spaces \nAnother line \nNo trailing spaces\n Indented line ";
let lines: Vec<&str> = text.lines().collect();
assert_eq!(lines[0].trailing_spaces(), 3);
assert_eq!(lines[1].trailing_spaces(), 2);
assert_eq!(lines[2].trailing_spaces(), 0);
assert_eq!(lines[3].trailing_spaces(), 3);
let fixed_lines: Vec<String> = text.lines().map(|line| line.replace_trailing_spaces("")).collect();
assert_eq!(fixed_lines[0], "Line with trailing spaces");
assert_eq!(fixed_lines[1], "Another line");
assert_eq!(fixed_lines[2], "No trailing spaces");
assert_eq!(fixed_lines[3], " Indented line");
}
#[test]
fn test_unicode_handling() {
let text = "Unicode: 你好, Привет, こんにちは ";
assert_eq!(text.trailing_spaces(), 2);
assert_eq!(text.replace_trailing_spaces(""), "Unicode: 你好, Привет, こんにちは");
let hash1 = fast_hash("Unicode: 你好");
let hash2 = fast_hash("Unicode: 您好"); assert_ne!(hash1, hash2);
let emoji_text = "Emoji: 😊 😎 👍 ";
assert_eq!(emoji_text.trailing_spaces(), 2);
assert_eq!(emoji_text.replace_trailing_spaces(""), "Emoji: 😊 😎 👍");
}
#[test]
fn test_has_trailing_spaces() {
assert!(!("Hello".has_trailing_spaces()));
assert!(!("Hello\n".has_trailing_spaces()));
assert!(!("".has_trailing_spaces()));
assert!(!("Hello\t".has_trailing_spaces())); assert!(!("Hello world".has_trailing_spaces()));
assert!("Hello ".has_trailing_spaces());
assert!("Hello ".has_trailing_spaces());
assert!("Hello ".has_trailing_spaces());
assert!(" ".has_trailing_spaces());
assert!(" ".has_trailing_spaces());
assert!("Hello world ".has_trailing_spaces());
assert!("Hello\t ".has_trailing_spaces()); assert!("Hello \n".has_trailing_spaces());
assert!(!("\n".has_trailing_spaces())); assert!(!("\t".has_trailing_spaces())); assert!(!("\r\n".has_trailing_spaces())); assert!(!(" \r\n".has_trailing_spaces())); }
#[test]
fn test_has_trailing_spaces_with_mixed_whitespace() {
assert!(!("Hello\t\n".has_trailing_spaces())); assert!("Hello \t ".has_trailing_spaces()); assert!(!("Hello \t".has_trailing_spaces())); assert!("Hello\t ".has_trailing_spaces());
let multiline = "Line 1 \nLine 2\nLine 3 ";
assert!(multiline.has_trailing_spaces());
let multiline_no_trailing = "Line 1 \nLine 2\nLine 3";
assert!(!multiline_no_trailing.has_trailing_spaces());
let multiline_with_newline = "Line 1 \nLine 2\nLine 3 \n";
assert!(multiline_with_newline.has_trailing_spaces()); }