use memsafe::MemSafe;
#[cfg(test)]
mod memory_safety_tests {
use super::*;
#[test]
fn test_empty_string_handling() {
let empty_safe = MemSafe::new(String::new()).unwrap();
assert_eq!(empty_safe.as_str(), "");
assert_eq!(empty_safe.len(), 0);
assert!(empty_safe.is_empty());
}
#[test]
fn test_memory_clearing() {
let sensitive_data = String::from("sensitive_password_123");
let length = sensitive_data.len();
{
let _safe_data = MemSafe::new(sensitive_data.clone()).unwrap();
}
assert_eq!(sensitive_data.len(), length);
}
#[test]
fn test_string_operations() {
let mut safe_string = MemSafe::new(String::from("Hello")).unwrap();
safe_string.push_str(", ");
safe_string.push_str("World!");
assert_eq!(safe_string.as_str(), "Hello, World!");
safe_string.truncate(5);
assert_eq!(safe_string.as_str(), "Hello");
safe_string.clear();
assert!(safe_string.is_empty());
}
#[test]
fn test_clone_behavior() {
let original = MemSafe::new(String::from("original_data")).unwrap();
let cloned = original.clone();
assert_eq!(original.as_str(), cloned.as_str());
assert_eq!(original.len(), cloned.len());
drop(original);
assert_eq!(cloned.as_str(), "original_data");
}
#[test]
fn test_mem_safe_string() {
let mut secret = MemSafe::new(String::from("secret")).unwrap();
assert_eq!(secret.as_str(), "secret");
secret.push_str(" data");
assert_eq!(secret.as_str(), "secret data");
}
#[test]
fn test_string_append_and_print() {
let mut secret = MemSafe::new(String::from("secret")).unwrap();
secret.push_str(" data");
assert_eq!(*secret, "secret data");
let output = format!("Secure data: {}", *secret);
assert_eq!(output, "Secure data: secret data");
let length = secret.len();
assert_eq!(length, 11);
assert_eq!(*secret, "secret data");
}
}