#[cfg(feature = "enc-dec")]
#[cfg(test)]
mod test_packer_bincode {
use packdir::*;
#[test]
fn test_packer_serialization() {
let raw = Packer::Raw;
let gzip = Packer::Gzip(Gzip::Level9);
let xz = Packer::Xz(Xz::Level1);
let config = bincode::config::standard();
let raw_encoded = bincode::encode_to_vec(&raw, config).unwrap();
let gzip_encoded = bincode::encode_to_vec(&gzip, config).unwrap();
let xz_encoded = bincode::encode_to_vec(&xz, config).unwrap();
let (raw_decoded, _): (Packer, usize) =
bincode::decode_from_slice(&raw_encoded, config).unwrap();
let (gzip_decoded, _): (Packer, usize) =
bincode::decode_from_slice(&gzip_encoded, config).unwrap();
let (xz_decoded, _): (Packer, usize) =
bincode::decode_from_slice(&xz_encoded, config).unwrap();
assert_eq!(raw, raw_decoded);
assert_eq!(gzip, gzip_decoded);
assert_eq!(xz, xz_decoded);
}
#[test]
fn test_gzip_serialization() {
let levels = vec![Gzip::Level1, Gzip::Level6, Gzip::Level9];
let config = bincode::config::standard();
for level in levels {
let encoded = bincode::encode_to_vec(&level, config).unwrap();
let (decoded, _): (Gzip, usize) = bincode::decode_from_slice(&encoded, config).unwrap();
assert_eq!(level, decoded);
}
}
#[test]
fn test_xz_serialization() {
let levels = vec![Xz::Level1, Xz::Level6, Xz::Level9];
let config = bincode::config::standard();
for level in levels {
let encoded = bincode::encode_to_vec(&level, config).unwrap();
let (decoded, _): (Xz, usize) = bincode::decode_from_slice(&encoded, config).unwrap();
assert_eq!(level, decoded);
}
}
#[test]
fn test_serialization_consistency() {
let config = bincode::config::standard();
let packer = Packer::Gzip(Gzip::Level5);
let encoded1 = bincode::encode_to_vec(&packer, config).unwrap();
let encoded2 = bincode::encode_to_vec(&packer, config).unwrap();
assert_eq!(encoded1, encoded2);
let (decoded1, _): (Packer, usize) = bincode::decode_from_slice(&encoded1, config).unwrap();
let (decoded2, _): (Packer, usize) = bincode::decode_from_slice(&encoded2, config).unwrap();
assert_eq!(packer, decoded1);
assert_eq!(packer, decoded2);
assert_eq!(decoded1, decoded2);
}
}
use packdir::*;
#[test]
fn test_packer_u8_conversion() {
assert_eq!(u8::from(Packer::Raw), 0);
assert_eq!(u8::from(Packer::Gzip(Gzip::Level6)), 1);
assert_eq!(u8::from(Packer::Xz(Xz::Level6)), 2);
assert_eq!(Packer::try_from(0u8).unwrap(), Packer::Raw);
assert_eq!(
Packer::try_from(1u8).unwrap(),
Packer::Gzip(Gzip::default())
);
assert_eq!(Packer::try_from(2u8).unwrap(), Packer::Xz(Xz::default()));
assert!(Packer::try_from(255u8).is_err());
}
#[test]
fn test_packer_try_read_u8() {
let data = vec![0, 1, 2, 255];
let mut offset = 0;
assert_eq!(
Packer::try_read_u8(&data, &mut offset).unwrap(),
Packer::Raw
);
assert_eq!(offset, 1);
assert_eq!(
Packer::try_read_u8(&data, &mut offset).unwrap(),
Packer::Gzip(Gzip::default())
);
assert_eq!(offset, 2);
assert_eq!(
Packer::try_read_u8(&data, &mut offset).unwrap(),
Packer::Xz(Xz::default())
);
assert_eq!(offset, 3);
assert!(Packer::try_read_u8(&data, &mut offset).is_err());
}
#[test]
fn test_gzip_levels() {
assert_eq!(Gzip::fast(), Gzip::Level1);
assert_eq!(Gzip::best(), Gzip::Level9);
assert_eq!(Gzip::default(), Gzip::Level6);
let level = Gzip::Level3;
assert_eq!(level.packer(), Packer::Gzip(level));
let flate_level: flate2::Compression = (&level).into();
assert_eq!(flate_level.level(), 3);
}
#[test]
fn test_xz_levels() {
assert_eq!(Xz::fast(), Xz::Level1);
assert_eq!(Xz::best(), Xz::Level9);
assert_eq!(Xz::default(), Xz::Level6);
let level = Xz::Level7;
assert_eq!(level.packer(), Packer::Xz(level));
}
#[test]
fn test_compression_types() {
let test_data = b"Hello, World! This is test data for compression.";
let no_comp = Packer::Raw;
let gzip_comp = Packer::Gzip(Gzip::default());
let xz_comp = Packer::Xz(Xz::default());
let compressed = no_comp.pack(test_data).unwrap();
assert_eq!(compressed, test_data);
let decompressed = no_comp.unpack(&compressed).unwrap();
assert_eq!(decompressed, test_data);
let compressed = gzip_comp.pack(test_data).unwrap();
assert_ne!(compressed, test_data);
let decompressed = gzip_comp.unpack(&compressed).unwrap();
assert_eq!(decompressed, test_data);
let compressed = xz_comp.pack(test_data).unwrap();
assert_ne!(compressed, test_data);
let decompressed = xz_comp.unpack(&compressed).unwrap();
assert_eq!(decompressed, test_data);
}
#[test]
fn test_compression_round_trip_large_data() {
let test_data = "Hello, World! ".repeat(1000);
let test_bytes = test_data.as_bytes();
let packers = vec![
Packer::Raw,
Packer::Gzip(Gzip::Level1),
Packer::Gzip(Gzip::Level9),
Packer::Xz(Xz::Level1),
Packer::Xz(Xz::Level6),
];
for packer in packers {
let compressed = packer.pack(test_bytes).unwrap();
let decompressed = packer.unpack(&compressed).unwrap();
assert_eq!(decompressed, test_bytes);
match packer {
Packer::Raw => assert_eq!(compressed.len(), test_bytes.len()),
Packer::Gzip(_) | Packer::Xz(_) => {
assert!(compressed.len() < test_bytes.len());
}
}
}
}
#[test]
fn test_empty_data_compression() {
let empty_data = b"";
let packers = vec![
Packer::Raw,
Packer::Gzip(Gzip::default()),
Packer::Xz(Xz::default()),
];
for packer in packers {
let compressed = packer.pack(empty_data).unwrap();
let decompressed = packer.unpack(&compressed).unwrap();
assert_eq!(decompressed, empty_data);
}
}
#[test]
fn test_single_byte_compression() {
let single_byte = b"A";
let packers = vec![
Packer::Raw,
Packer::Gzip(Gzip::default()),
Packer::Xz(Xz::default()),
];
for packer in packers {
let compressed = packer.pack(single_byte).unwrap();
let decompressed = packer.unpack(&compressed).unwrap();
assert_eq!(decompressed, single_byte);
}
}
#[test]
fn test_packer_equality() {
assert_eq!(Packer::Raw, Packer::Raw);
assert_eq!(Packer::Gzip(Gzip::Level6), Packer::Gzip(Gzip::Level6));
assert_eq!(Packer::Xz(Xz::Level1), Packer::Xz(Xz::Level1));
assert_ne!(Packer::Raw, Packer::Gzip(Gzip::Level6));
assert_ne!(Packer::Gzip(Gzip::Level1), Packer::Gzip(Gzip::Level9));
assert_ne!(Packer::Xz(Xz::Level1), Packer::Xz(Xz::Level9));
}
#[test]
fn test_gzip_compression_conversion() {
let gzip_level = Gzip::Level5;
let flate_level: flate2::Compression = (&gzip_level).into();
assert_eq!(flate_level.level(), 5);
let gzip_best = Gzip::best();
let flate_best: flate2::Compression = (&gzip_best).into();
assert_eq!(flate_best.level(), 9);
}
#[test]
fn test_xz_compression_levels() {
assert_eq!(Xz::Level1 as u32, 1);
assert_eq!(Xz::Level6 as u32, 6);
assert_eq!(Xz::Level9 as u32, 9);
}
#[test]
fn test_invalid_compression_data() {
let invalid_gzip = b"invalid gzip data";
let invalid_xz = b"invalid xz data";
let gzip_packer = Packer::Gzip(Gzip::default());
let xz_packer = Packer::Xz(Xz::default());
assert!(gzip_packer.unpack(invalid_gzip).is_err());
assert!(xz_packer.unpack(invalid_xz).is_err());
}
#[test]
fn test_packer_debug_display() {
let packers = vec![
Packer::Raw,
Packer::Gzip(Gzip::Level1),
Packer::Xz(Xz::Level9),
];
for packer in packers {
let debug_str = format!("{packer:?}");
assert!(!debug_str.is_empty());
}
}