use crate::{AssertZeroizeOnDrop, FastZeroizable, ZeroizationProbe, ZeroizingGuard};
#[test]
fn test_zeroizing_guard_from_default() {
let guard: ZeroizingGuard<u64> = ZeroizingGuard::from_default();
assert!(guard.is_zeroized());
assert_eq!(*guard, 0);
guard.assert_zeroize_on_drop();
}
#[test]
fn test_zeroizing_guard_source_zeroized() {
let mut value = 0xDEADBEEFu64;
let guard = ZeroizingGuard::from_mut(&mut value);
assert_eq!(value, 0);
assert!(value.is_zeroized());
assert_eq!(*guard, 0xDEADBEEF);
}
#[test]
fn test_zeroizing_guard_with_array() {
let mut arr = [0x42u8; 32];
let guard = ZeroizingGuard::from_mut(&mut arr);
assert!(arr.is_zeroized());
assert!(guard.iter().all(|&b| b == 0x42));
guard.assert_zeroize_on_drop();
}
#[test]
fn test_zeroizing_guard_auto_zeroizes_on_drop() {
let mut value = 42u64;
let guard = ZeroizingGuard::from_mut(&mut value);
assert!(value.is_zeroized());
guard.assert_zeroize_on_drop();
}
#[test]
fn test_zeroizing_guard_manual_zeroize() {
let mut value = 12345u64;
let mut guard = ZeroizingGuard::from_mut(&mut value);
assert!(!guard.is_zeroized());
guard.fast_zeroize();
assert!(guard.is_zeroized());
assert_eq!(*guard, 0);
}
#[test]
fn test_zeroizing_guard_deref() {
let mut value = 99u32;
let guard = ZeroizingGuard::from_mut(&mut value);
assert_eq!(*guard, 99);
}
#[test]
fn test_zeroizing_guard_deref_mut() {
let mut value = 50u32;
let mut guard = ZeroizingGuard::from_mut(&mut value);
*guard = 100;
assert_eq!(*guard, 100);
}
#[test]
fn test_zeroizing_guard_with_vec() {
let mut vec = vec![1u8, 2, 3, 4, 5];
let guard = ZeroizingGuard::from_mut(&mut vec);
assert!(vec.is_empty());
guard.assert_zeroize_on_drop();
}
#[test]
fn test_zeroizing_guard_debug_redacts() {
let mut value = 12345u64;
let guard = ZeroizingGuard::from_mut(&mut value);
let debug_str = format!("{:?}", guard);
assert!(debug_str.contains("REDACTED"));
assert!(!debug_str.contains("12345"));
}