From 1b6a04ca5504955c571d1c97504fb45ea0befee4 Mon Sep 17 00:00:00 2001
From: Valentin Popov <valentin@popov.link>
Date: Mon, 8 Jan 2024 01:21:28 +0400
Subject: Initial vendor packages

Signed-off-by: Valentin Popov <valentin@popov.link>
---
 vendor/weezl/tests/roundtrip.rs | 66 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)
 create mode 100644 vendor/weezl/tests/roundtrip.rs

(limited to 'vendor/weezl/tests/roundtrip.rs')

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
+    );
+}
-- 
cgit v1.2.3