From 1b6a04ca5504955c571d1c97504fb45ea0befee4 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Mon, 8 Jan 2024 01:21:28 +0400 Subject: Initial vendor packages Signed-off-by: Valentin Popov --- vendor/weezl/tests/async.rs | 48 ++++++++++++++++++++++++++ vendor/weezl/tests/implicit_reset.rs | 21 ++++++++++++ vendor/weezl/tests/roundtrip.rs | 66 ++++++++++++++++++++++++++++++++++++ vendor/weezl/tests/roundtrip_vec.rs | 65 +++++++++++++++++++++++++++++++++++ 4 files changed, 200 insertions(+) create mode 100644 vendor/weezl/tests/async.rs create mode 100644 vendor/weezl/tests/implicit_reset.rs create mode 100644 vendor/weezl/tests/roundtrip.rs create mode 100644 vendor/weezl/tests/roundtrip_vec.rs (limited to 'vendor/weezl/tests') diff --git a/vendor/weezl/tests/async.rs b/vendor/weezl/tests/async.rs new file mode 100644 index 0000000..5df95b0 --- /dev/null +++ b/vendor/weezl/tests/async.rs @@ -0,0 +1,48 @@ +use std::{env, fs}; +use tokio::io::BufReader; +use tokio::net::{TcpListener, TcpStream}; +use tokio_util::compat::TokioAsyncReadCompatExt as _; +use weezl::{decode, encode, BitOrder}; + +async fn pair() -> (TcpStream, TcpStream) { + let listener = TcpListener::bind("localhost:0") + .await + .expect("No loop tcp for testing"); + let addr = listener.local_addr().expect("No address for listener"); + + let connect = TcpStream::connect(addr); + let accept = listener.accept(); + + let (a, (b, _)) = tokio::try_join!(connect, accept).expect("Can connect"); + (a, b) +} + +async fn assert_send_through(data: &[u8], send: &mut TcpStream, recv: &mut TcpStream) { + let mut send = send.compat(); + let mut recv = BufReader::new(recv).compat(); + + let mut encoder = encode::Encoder::new(BitOrder::Lsb, 8); + let encode = encoder.into_async(&mut send).encode_all(data); + + let mut recv_buffer = vec![]; + let mut decoder = decode::Decoder::new(BitOrder::Lsb, 8); + let decode = decoder.into_async(&mut recv_buffer).decode_all(&mut recv); + + let (encode, decode) = tokio::join!(encode, decode); + encode.status.expect("Could send/encoded data"); + decode.status.expect("Could recv/decode data"); + + assert_eq!(recv_buffer, data); +} + +#[test] +fn with_streams() { + let file = env::args().next().unwrap(); + let data = fs::read(file).unwrap(); + + let rt = tokio::runtime::Runtime::new().expect("runtime"); + let _enter = rt.enter(); + + let (mut send, mut recv) = rt.block_on(pair()); + rt.block_on(assert_send_through(&data, &mut send, &mut recv)); +} diff --git a/vendor/weezl/tests/implicit_reset.rs b/vendor/weezl/tests/implicit_reset.rs new file mode 100644 index 0000000..69dd8a8 --- /dev/null +++ b/vendor/weezl/tests/implicit_reset.rs @@ -0,0 +1,21 @@ +use std::{env, fs}; +use weezl::{decode, encode, BitOrder}; + +#[test] +fn read_from_mangled() { + let file = env::args().next().unwrap(); + let data = fs::read(file).unwrap(); + + // For simplicity, encode 7-bit data. + let data: Vec<_> = data.iter().copied().map(|b| b & 0x7f).collect(); + + let mut encoder = encode::Encoder::new(BitOrder::Lsb, 7); + let mut buffer = Vec::with_capacity(2 * data.len() + 40); + let _ = encoder.into_stream(&mut buffer).encode_all(&*data); + + let mut decoder = decode::Decoder::new(BitOrder::Lsb, 7); + let mut compare = vec![]; + let result = decoder.into_stream(&mut compare).decode_all(&buffer[1..]); + assert!(result.status.is_ok(), "{:?}", result.status); + assert!(data == &*compare, "{:?}\n{:?}", data, compare); +} diff --git a/vendor/weezl/tests/roundtrip.rs b/vendor/weezl/tests/roundtrip.rs new file mode 100644 index 0000000..f124fae --- /dev/null +++ b/vendor/weezl/tests/roundtrip.rs @@ -0,0 +1,66 @@ +use std::{env, fs}; +use weezl::{decode, encode, BitOrder}; + +#[derive(Clone, Copy, Debug)] +enum Flavor { + Gif, + Tiff, +} + +#[test] +fn roundtrip_all() { + let file = env::args().next().unwrap(); + let data = fs::read(file).unwrap(); + + for &flavor in &[Flavor::Gif, Flavor::Tiff] { + for &bit_order in &[BitOrder::Lsb, BitOrder::Msb] { + for bit_width in 2..8 { + let data: Vec<_> = data + .iter() + .copied() + .map(|b| b & ((1 << bit_width) - 1)) + .collect(); + + println!("Roundtrip test {:?} {:?} {}", flavor, bit_order, bit_width); + assert_roundtrips(&*data, flavor, bit_width, bit_order); + } + } + } +} + +fn assert_roundtrips(data: &[u8], flavor: Flavor, bit_width: u8, bit_order: BitOrder) { + let (c, d): ( + fn(BitOrder, u8) -> encode::Encoder, + fn(BitOrder, u8) -> decode::Decoder, + ) = match flavor { + Flavor::Gif => (encode::Encoder::new, decode::Decoder::new), + Flavor::Tiff => ( + encode::Encoder::with_tiff_size_switch, + decode::Decoder::with_tiff_size_switch, + ), + }; + let mut encoder = c(bit_order, bit_width); + let mut buffer = Vec::with_capacity(2 * data.len() + 40); + let _ = encoder.into_stream(&mut buffer).encode_all(data); + + let mut decoder = d(bit_order, bit_width); + let mut compare = vec![]; + let result = decoder + .into_stream(&mut compare) + .decode_all(buffer.as_slice()); + assert!( + result.status.is_ok(), + "{:?}, {}, {:?}", + bit_order, + bit_width, + result.status + ); + assert!( + data == &*compare, + "{:?}, {}\n{:?}\n{:?}", + bit_order, + bit_width, + data, + compare + ); +} diff --git a/vendor/weezl/tests/roundtrip_vec.rs b/vendor/weezl/tests/roundtrip_vec.rs new file mode 100644 index 0000000..d8bfd84 --- /dev/null +++ b/vendor/weezl/tests/roundtrip_vec.rs @@ -0,0 +1,65 @@ +use std::{env, fs}; +use weezl::{decode, encode, BitOrder}; + +#[derive(Clone, Copy, Debug)] +enum Flavor { + Gif, + Tiff, +} + +#[test] +fn roundtrip_all() { + let file = env::args().next().unwrap(); + let data = fs::read(file).unwrap(); + + for &flavor in &[Flavor::Gif, Flavor::Tiff] { + for &bit_order in &[BitOrder::Lsb, BitOrder::Msb] { + for bit_width in 2..8 { + let data: Vec<_> = data + .iter() + .copied() + .map(|b| b & ((1 << bit_width) - 1)) + .collect(); + + println!("Roundtrip test {:?} {:?} {}", flavor, bit_order, bit_width); + assert_roundtrips(&*data, flavor, bit_width, bit_order); + } + } + } +} + +fn assert_roundtrips(data: &[u8], flavor: Flavor, bit_width: u8, bit_order: BitOrder) { + let (c, d): ( + fn(BitOrder, u8) -> encode::Encoder, + fn(BitOrder, u8) -> decode::Decoder, + ) = match flavor { + Flavor::Gif => (encode::Encoder::new, decode::Decoder::new), + Flavor::Tiff => ( + encode::Encoder::with_tiff_size_switch, + decode::Decoder::with_tiff_size_switch, + ), + }; + let mut encoder = c(bit_order, bit_width); + let mut buffer = Vec::with_capacity(2 * data.len() + 40); + + let _ = encoder.into_vec(&mut buffer).encode_all(data); + + let mut decoder = d(bit_order, bit_width); + let mut compare = vec![]; + let result = decoder.into_vec(&mut compare).decode_all(buffer.as_slice()); + assert!( + result.status.is_ok(), + "{:?}, {}, {:?}", + bit_order, + bit_width, + result.status + ); + assert!( + data == &*compare, + "{:?}, {}\n{:?}\n{:?}", + bit_order, + bit_width, + data, + compare + ); +} -- cgit v1.2.3