use crate::crypto::secret::*;
#[test]
fn test_empty() {
crate::init().unwrap();
let mut sa = Secret::new();
assert_eq!(0, sa.len());
assert!(unsafe { sa.as_slice().is_empty() });
assert!(unsafe { sa.as_mut_slice().is_empty() });
let mut sb = Secret::with_len(0).unwrap();
assert_eq!(0, sb.len());
assert!(unsafe { sb.as_slice().is_empty() });
assert!(unsafe { sb.as_mut_slice().is_empty() });
}
#[test]
fn test_roundtrip() {
crate::init().unwrap();
let data = "foo bar baz this is a test";
let bytes = data.as_bytes();
let mut s = Secret::with_len(bytes.len()).unwrap();
assert_eq!(bytes.len(), s.len());
unsafe {
s.as_mut_slice().copy_from_slice(bytes);
}
let result = unsafe { std::str::from_utf8(s.as_slice()).unwrap() };
assert_eq!(result, data);
}
#[test]
fn test_resize() {
crate::init().unwrap();
let mut data = "foobar foobar foobar".as_bytes().to_vec();
let orig_len = data.len();
let mut s = Secret::with_len(data.len()).unwrap();
unsafe {
s.as_mut_slice().copy_from_slice(data.as_slice());
}
data.resize(orig_len * 2, 0);
s.resize(orig_len * 2).unwrap();
assert_eq!(orig_len * 2, data.len());
assert_eq!(data.len(), s.len());
assert_eq!(data.as_slice(), unsafe { s.as_slice() });
data.truncate(orig_len / 2);
s.resize(orig_len / 2).unwrap();
assert_eq!(orig_len / 2, data.len());
assert_eq!(data.len(), s.len());
assert_eq!(data.as_slice(), unsafe { s.as_slice() });
s.resize(0).unwrap();
assert_eq!(0, s.len());
assert!(unsafe { s.as_slice().is_empty() });
assert!(unsafe { s.as_mut_slice().is_empty() });
s.resize(orig_len / 2).unwrap();
unsafe {
s.as_mut_slice().copy_from_slice(data.as_slice());
}
assert_eq!(orig_len / 2, data.len());
assert_eq!(data.len(), s.len());
assert_eq!(data.as_slice(), unsafe { s.as_slice() });
}