use asar_rust::pickle::Pickle;
#[test]
fn test_create_empty_pickle() {
let pickle = Pickle::new();
let buf = pickle.into_buffer();
assert_eq!(buf.len(), 4);
assert_eq!(u32::from_le_bytes(buf[0..4].try_into().unwrap()), 0);
}
#[test]
fn test_write_read_u32() {
let mut pickle = Pickle::new();
pickle.write_u32(42);
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert_eq!(iter.read_u32(), 42);
}
#[test]
fn test_write_read_string() {
let mut pickle = Pickle::new();
pickle.write_string("hello");
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert_eq!(iter.read_string(), "hello");
}
#[test]
fn test_write_read_multiple_values() {
let mut pickle = Pickle::new();
pickle.write_u32(1);
pickle.write_string("test");
pickle.write_u64(999);
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert_eq!(iter.read_u32(), 1);
assert_eq!(iter.read_string(), "test");
assert_eq!(iter.read_u64(), 999);
}
#[test]
fn test_write_read_i32() {
let mut pickle = Pickle::new();
pickle.write_i32(-42);
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert_eq!(iter.read_i32(), -42);
}
#[test]
fn test_write_read_i64() {
let mut pickle = Pickle::new();
pickle.write_i64(-123456789);
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert_eq!(iter.read_i64(), -123456789);
}
#[test]
fn test_write_read_bool() {
let mut pickle = Pickle::new();
pickle.write_bool(true);
pickle.write_bool(false);
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert_eq!(iter.read_bool(), true);
assert_eq!(iter.read_bool(), false);
}
#[test]
fn test_write_read_float() {
let mut pickle = Pickle::new();
pickle.write_float(3.14);
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert!((iter.read_float() - 3.14).abs() < 0.001);
}
#[test]
fn test_write_read_double() {
let mut pickle = Pickle::new();
pickle.write_double(3.14159265358979);
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert!((iter.read_double() - 3.14159265358979).abs() < 0.000001);
}
#[test]
fn test_write_read_bytes() {
let mut pickle = Pickle::new();
pickle.write_bytes(&[1, 2, 3, 4, 5]);
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert_eq!(iter.read_bytes(5), vec![1, 2, 3, 4, 5]);
}
#[test]
fn test_empty_string() {
let mut pickle = Pickle::new();
pickle.write_string("");
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert_eq!(iter.read_string(), "");
}
#[test]
fn test_write_read_boundary_values() {
let mut pickle = Pickle::new();
pickle.write_u32(u32::MAX);
pickle.write_i32(i32::MIN);
pickle.write_u64(u64::MAX);
pickle.write_i64(i64::MIN);
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert_eq!(iter.read_u32(), u32::MAX);
assert_eq!(iter.read_i32(), i32::MIN);
assert_eq!(iter.read_u64(), u64::MAX);
assert_eq!(iter.read_i64(), i64::MIN);
}
#[test]
fn test_write_read_zero_length_bytes() {
let mut pickle = Pickle::new();
pickle.write_bytes(&[]);
let buf = pickle.into_buffer();
let pickle = Pickle::from_buffer(&buf);
let mut iter = pickle.iter();
assert_eq!(iter.read_bytes(0), Vec::<u8>::new());
}