#![allow(dead_code)]
use core::fmt;
use flexstr_support::StringToFromBytes;
use inline_flexstr::InlineFlexStr;
use zeroize::Zeroize;
pub fn test_zeroize_empty_after<S>(s: &S)
where
S: ?Sized + StringToFromBytes + fmt::Debug + PartialEq,
{
let mut inline = InlineFlexStr::try_from_type(s).expect("test input should be small enough");
assert!(
!inline.as_raw_bytes().is_empty(),
"test input must be non-empty"
);
inline.zeroize();
assert!(inline.as_raw_bytes().is_empty());
}
pub fn test_zeroize_bytes_cleared<S>(s: &S)
where
S: ?Sized + StringToFromBytes + fmt::Debug + PartialEq,
{
let mut inline = InlineFlexStr::try_from_type(s).expect("test input should be small enough");
assert!(
!S::self_as_raw_bytes(s).is_empty(),
"test input must be non-empty"
);
let ptr = &inline as *const InlineFlexStr<S> as *const u8;
let size = core::mem::size_of::<InlineFlexStr<S>>();
inline.zeroize();
let bytes = unsafe { core::slice::from_raw_parts(ptr, size) };
assert!(
bytes.iter().all(|&b| b == 0),
"all bytes of InlineFlexStr should be zero after zeroize, got: {bytes:?}"
);
}