#![cfg(feature = "std")]
use crate::{BytesM, Limits, ReadXdr, ScVal, VecM};
#[test]
fn valid_len() {
let data = [
0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x03, 0x63, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2a, ];
let result = ScVal::from_xdr(data, Limits::none());
assert!(result.is_ok());
}
#[test]
fn invalid_len() {
let data = [
0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x03, 0x63, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2a, ];
let result = ScVal::from_xdr(data, Limits::none());
assert!(result.is_err());
}
#[test]
fn valid_bytes_len() {
let data = [
0x00, 0x00, 0x00, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
];
let result: Result<BytesM, _> = BytesM::from_xdr(data, Limits::none());
assert_eq!(
result,
Ok(BytesM::try_from([1, 2, 3, 4, 5, 6, 7, 8]).unwrap())
);
}
#[test]
fn valid_bytes_len_greater_than_preallocated_bytes_limit() {
let mut data = [0x01u8; 3000];
data[0] = 0x00; data[1] = 0x00; data[2] = 0x0B; data[3] = 0xB4; let result: Result<BytesM, _> = BytesM::from_xdr(data, Limits::none());
assert_eq!(result, Ok(BytesM::try_from([0x01u8; 2996]).unwrap()));
}
#[test]
fn invalid_bytes_len() {
let data = [
0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
];
let result: Result<BytesM, _> = BytesM::from_xdr(data, Limits::none());
assert!(result.is_err());
}
#[test]
fn into_iter_owned() {
let v: VecM<u32, 5> = VecM::try_from(vec![1u32, 2, 3]).unwrap();
let collected: Vec<u32> = v.into_iter().collect();
assert_eq!(collected, vec![1, 2, 3]);
}
#[test]
fn into_iter_ref() {
let v: VecM<u32, 5> = VecM::try_from(vec![1u32, 2, 3]).unwrap();
let collected: Vec<&u32> = (&v).into_iter().collect();
assert_eq!(collected, vec![&1, &2, &3]);
}
#[test]
fn into_iter_for_loop() {
let v: VecM<u32, 5> = VecM::try_from(vec![10u32, 20, 30]).unwrap();
let mut sum = 0;
for item in v {
sum += item;
}
assert_eq!(sum, 60);
}
#[test]
fn decode_capacity_does_not_exceed_len() {
for len in [0u32, 1, 2, 3, 4, 5, 8, 9, 16, 17, 33, 65] {
let mut data = len.to_be_bytes().to_vec();
for i in 0..len {
data.extend_from_slice(&i.to_be_bytes());
}
let v = VecM::<u32>::from_xdr(&data, Limits::none()).unwrap();
assert_eq!(v.len(), len as usize);
assert_eq!(
v.capacity(),
len as usize,
"len {len}: reserved capacity should not exceed the encoded length"
);
}
}