From 2d6d92e81d167d3fbdcb8ddd6ac284567a75b025 Mon Sep 17 00:00:00 2001 From: Lilith River Date: Tue, 10 Mar 2026 14:43:07 -0600 Subject: [PATCH] refactor: simplify hash computation and remove unused benchmark Address PR review feedback: - Remove benches/decode.rs which referenced non-existent gen_bench_tiff.c - Simplify compute_tiff_hash: replace 66-line match block with as_buffer().as_bytes() + ByteOrder::convert for LE normalization - Use TIFF Type repr(u16) as hash discriminant instead of ad-hoc u8 - Rename all 74 seq test images to match updated hashes --- Cargo.toml | 3 - benches/decode.rs | 40 -------- tests/decode_images.rs | 91 +++++------------- ...ebb39b8d.tiff => seq-1c-10b-6d739fa2.tiff} | Bin ...tiff => seq-1c-10b-hpredict-6d739fa2.tiff} | Bin ...ff => seq-1c-10b-miniswhite-6d739fa2.tiff} | Bin ...349c9c76.tiff => seq-1c-12b-47c39b31.tiff} | Bin ...tiff => seq-1c-12b-hpredict-47c39b31.tiff} | Bin ...ff => seq-1c-12b-miniswhite-47c39b31.tiff} | Bin ...7e799edf.tiff => seq-1c-14b-e883657f.tiff} | Bin ...tiff => seq-1c-14b-hpredict-e883657f.tiff} | Bin ...ff => seq-1c-14b-miniswhite-e883657f.tiff} | Bin ...iff => seq-1c-16b-bigendian-68f373a0.tiff} | Bin ....tiff => seq-1c-16b-deflate-68f373a0.tiff} | Bin ...8a4a.tiff => seq-1c-16b-lzw-68f373a0.tiff} | Bin ...ff => seq-1c-16b-multistrip-68f373a0.tiff} | Bin ...4a.tiff => seq-1c-16b-tiled-68f373a0.tiff} | Bin ...-f2966d13.tiff => seq-1c-1b-71f6a21a.tiff} | Bin ...iff => seq-1c-1b-miniswhite-71f6a21a.tiff} | Bin ...8e6d7cb5.tiff => seq-1c-24b-072a9dc9.tiff} | Bin ...tiff => seq-1c-24b-hpredict-072a9dc9.tiff} | Bin ...ff => seq-1c-24b-miniswhite-072a9dc9.tiff} | Bin ...-eb3e4e3a.tiff => seq-1c-2b-58b25f76.tiff} | Bin ...a6d061ac.tiff => seq-1c-32f-390fe673.tiff} | Bin ...seq-1c-32f-deflate-fpredict-390fe673.tiff} | Bin ...-b64646a5.tiff => seq-1c-3b-ef237c07.tiff} | Bin ...iff => seq-1c-3b-miniswhite-ef237c07.tiff} | Bin ...-b3c1805b.tiff => seq-1c-4b-fb92dcae.tiff} | Bin ...iff => seq-1c-4b-miniswhite-fb92dcae.tiff} | Bin ...6.tiff => seq-1c-4b-palette-85108c5a.tiff} | Bin ...-59011bc5.tiff => seq-1c-5b-73098d17.tiff} | Bin ...iff => seq-1c-5b-miniswhite-73098d17.tiff} | Bin ...8a733620.tiff => seq-1c-64f-afa8560e.tiff} | Bin ...seq-1c-64f-deflate-fpredict-afa8560e.tiff} | Bin ...iff => seq-1c-6b-miniswhite-79cafbb6.tiff} | Bin ...-bd122024.tiff => seq-1c-7b-9c61ba70.tiff} | Bin ...iff => seq-1c-7b-miniswhite-9c61ba70.tiff} | Bin ...tiff => seq-1c-8b-bigendian-20f3db0c.tiff} | Bin ...1.tiff => seq-1c-8b-bigtiff-20f3db0c.tiff} | Bin ...1.tiff => seq-1c-8b-deflate-20f3db0c.tiff} | Bin ...98311.tiff => seq-1c-8b-lzw-20f3db0c.tiff} | Bin ...f => seq-1c-8b-lzw-hpredict-20f3db0c.tiff} | Bin ...tiff => seq-1c-8b-multipage-adeefdcc.tiff} | Bin ...iff => seq-1c-8b-multistrip-20f3db0c.tiff} | Bin ....tiff => seq-1c-8b-packbits-20f3db0c.tiff} | Bin ...d.tiff => seq-1c-8b-palette-89b39bc3.tiff} | Bin ...311.tiff => seq-1c-8b-tiled-20f3db0c.tiff} | Bin ... => seq-1c-8b-tiled-bigtiff-20f3db0c.tiff} | Bin ... => seq-1c-8b-tiled-deflate-20f3db0c.tiff} | Bin ...tiff => seq-1c-8b-tiled-lzw-20f3db0c.tiff} | Bin ...e55284f8.tiff => seq-1c-i16-63af2488.tiff} | Bin ...5fc9795b.tiff => seq-1c-i32-99fddec2.tiff} | Bin ...-dbcc75e5.tiff => seq-1c-i8-f8446bbe.tiff} | Bin ...0.tiff => seq-3c-10b-contig-d08d5dc0.tiff} | Bin ...a.tiff => seq-3c-10b-planar-c82e8ab6.tiff} | Bin ...a.tiff => seq-3c-12b-contig-e6f40b4a.tiff} | Bin ...1.tiff => seq-3c-12b-planar-e29e8e25.tiff} | Bin ...3.tiff => seq-3c-14b-contig-f4dcc6cc.tiff} | Bin ...8.tiff => seq-3c-14b-planar-4dde706b.tiff} | Bin ....tiff => seq-3c-16b-bigtiff-1b40ca6e.tiff} | Bin ...9.tiff => seq-3c-24b-contig-27b9f8ce.tiff} | Bin ...d.tiff => seq-3c-24b-planar-6296c0c9.tiff} | Bin ...c90c9901.tiff => seq-3c-32f-9a471c2b.tiff} | Bin ...7d.tiff => seq-3c-5b-contig-09f197f4.tiff} | Bin ...16f2fa89.tiff => seq-3c-64f-9fff098a.tiff} | Bin ...e4.tiff => seq-3c-7b-contig-2e4f43c5.tiff} | Bin ...tiff => seq-3c-8b-bigendian-8743c999.tiff} | Bin ...7068d.tiff => seq-3c-8b-lzw-8743c999.tiff} | Bin ...iff => seq-3c-8b-multistrip-8743c999.tiff} | Bin ...68d.tiff => seq-3c-8b-tiled-8743c999.tiff} | Bin ...8b69ff38.tiff => seq-3c-i16-f7fcf423.tiff} | Bin ...-a5e96bf3.tiff => seq-3c-i8-d7550ce4.tiff} | Bin ...d1b.tiff => seq-4c-16b-cmyk-c6e52592.tiff} | Bin ...810.tiff => seq-4c-16b-rgba-5181991f.tiff} | Bin ...06d2.tiff => seq-4c-8b-cmyk-352ac1da.tiff} | Bin ...c08a.tiff => seq-4c-8b-rgba-50969cda.tiff} | Bin ...f => seq-4c-8b-rgba-unassoc-50969cda.tiff} | Bin 77 files changed, 23 insertions(+), 111 deletions(-) delete mode 100644 benches/decode.rs rename tests/images/seq/{seq-1c-10b-ebb39b8d.tiff => seq-1c-10b-6d739fa2.tiff} (100%) rename tests/images/seq/{seq-1c-10b-hpredict-ebb39b8d.tiff => seq-1c-10b-hpredict-6d739fa2.tiff} (100%) rename tests/images/seq/{seq-1c-10b-miniswhite-ebb39b8d.tiff => seq-1c-10b-miniswhite-6d739fa2.tiff} (100%) rename tests/images/seq/{seq-1c-12b-349c9c76.tiff => seq-1c-12b-47c39b31.tiff} (100%) rename tests/images/seq/{seq-1c-12b-hpredict-349c9c76.tiff => seq-1c-12b-hpredict-47c39b31.tiff} (100%) rename tests/images/seq/{seq-1c-12b-miniswhite-349c9c76.tiff => seq-1c-12b-miniswhite-47c39b31.tiff} (100%) rename tests/images/seq/{seq-1c-14b-7e799edf.tiff => seq-1c-14b-e883657f.tiff} (100%) rename tests/images/seq/{seq-1c-14b-hpredict-7e799edf.tiff => seq-1c-14b-hpredict-e883657f.tiff} (100%) rename tests/images/seq/{seq-1c-14b-miniswhite-7e799edf.tiff => seq-1c-14b-miniswhite-e883657f.tiff} (100%) rename tests/images/seq/{seq-1c-16b-bigendian-6b088a4a.tiff => seq-1c-16b-bigendian-68f373a0.tiff} (100%) rename tests/images/seq/{seq-1c-16b-deflate-6b088a4a.tiff => seq-1c-16b-deflate-68f373a0.tiff} (100%) rename tests/images/seq/{seq-1c-16b-lzw-6b088a4a.tiff => seq-1c-16b-lzw-68f373a0.tiff} (100%) rename tests/images/seq/{seq-1c-16b-multistrip-6b088a4a.tiff => seq-1c-16b-multistrip-68f373a0.tiff} (100%) rename tests/images/seq/{seq-1c-16b-tiled-6b088a4a.tiff => seq-1c-16b-tiled-68f373a0.tiff} (100%) rename tests/images/seq/{seq-1c-1b-f2966d13.tiff => seq-1c-1b-71f6a21a.tiff} (100%) rename tests/images/seq/{seq-1c-1b-miniswhite-f2966d13.tiff => seq-1c-1b-miniswhite-71f6a21a.tiff} (100%) rename tests/images/seq/{seq-1c-24b-8e6d7cb5.tiff => seq-1c-24b-072a9dc9.tiff} (100%) rename tests/images/seq/{seq-1c-24b-hpredict-8e6d7cb5.tiff => seq-1c-24b-hpredict-072a9dc9.tiff} (100%) rename tests/images/seq/{seq-1c-24b-miniswhite-8e6d7cb5.tiff => seq-1c-24b-miniswhite-072a9dc9.tiff} (100%) rename tests/images/seq/{seq-1c-2b-eb3e4e3a.tiff => seq-1c-2b-58b25f76.tiff} (100%) rename tests/images/seq/{seq-1c-32f-a6d061ac.tiff => seq-1c-32f-390fe673.tiff} (100%) rename tests/images/seq/{seq-1c-32f-deflate-fpredict-a6d061ac.tiff => seq-1c-32f-deflate-fpredict-390fe673.tiff} (100%) rename tests/images/seq/{seq-1c-3b-b64646a5.tiff => seq-1c-3b-ef237c07.tiff} (100%) rename tests/images/seq/{seq-1c-3b-miniswhite-b64646a5.tiff => seq-1c-3b-miniswhite-ef237c07.tiff} (100%) rename tests/images/seq/{seq-1c-4b-b3c1805b.tiff => seq-1c-4b-fb92dcae.tiff} (100%) rename tests/images/seq/{seq-1c-4b-miniswhite-b3c1805b.tiff => seq-1c-4b-miniswhite-fb92dcae.tiff} (100%) rename tests/images/seq/{seq-1c-4b-palette-80edc956.tiff => seq-1c-4b-palette-85108c5a.tiff} (100%) rename tests/images/seq/{seq-1c-5b-59011bc5.tiff => seq-1c-5b-73098d17.tiff} (100%) rename tests/images/seq/{seq-1c-5b-miniswhite-59011bc5.tiff => seq-1c-5b-miniswhite-73098d17.tiff} (100%) rename tests/images/seq/{seq-1c-64f-8a733620.tiff => seq-1c-64f-afa8560e.tiff} (100%) rename tests/images/seq/{seq-1c-64f-deflate-fpredict-8a733620.tiff => seq-1c-64f-deflate-fpredict-afa8560e.tiff} (100%) rename tests/images/seq/{seq-1c-6b-miniswhite-7142de37.tiff => seq-1c-6b-miniswhite-79cafbb6.tiff} (100%) rename tests/images/seq/{seq-1c-7b-bd122024.tiff => seq-1c-7b-9c61ba70.tiff} (100%) rename tests/images/seq/{seq-1c-7b-miniswhite-bd122024.tiff => seq-1c-7b-miniswhite-9c61ba70.tiff} (100%) rename tests/images/seq/{seq-1c-8b-bigendian-86098311.tiff => seq-1c-8b-bigendian-20f3db0c.tiff} (100%) rename tests/images/seq/{seq-1c-8b-bigtiff-86098311.tiff => seq-1c-8b-bigtiff-20f3db0c.tiff} (100%) rename tests/images/seq/{seq-1c-8b-deflate-86098311.tiff => seq-1c-8b-deflate-20f3db0c.tiff} (100%) rename tests/images/seq/{seq-1c-8b-lzw-86098311.tiff => seq-1c-8b-lzw-20f3db0c.tiff} (100%) rename tests/images/seq/{seq-1c-8b-lzw-hpredict-86098311.tiff => seq-1c-8b-lzw-hpredict-20f3db0c.tiff} (100%) rename tests/images/seq/{seq-1c-8b-multipage-0c8d8775.tiff => seq-1c-8b-multipage-adeefdcc.tiff} (100%) rename tests/images/seq/{seq-1c-8b-multistrip-86098311.tiff => seq-1c-8b-multistrip-20f3db0c.tiff} (100%) rename tests/images/seq/{seq-1c-8b-packbits-86098311.tiff => seq-1c-8b-packbits-20f3db0c.tiff} (100%) rename tests/images/seq/{seq-1c-8b-palette-7ae71ffd.tiff => seq-1c-8b-palette-89b39bc3.tiff} (100%) rename tests/images/seq/{seq-1c-8b-tiled-86098311.tiff => seq-1c-8b-tiled-20f3db0c.tiff} (100%) rename tests/images/seq/{seq-1c-8b-tiled-bigtiff-86098311.tiff => seq-1c-8b-tiled-bigtiff-20f3db0c.tiff} (100%) rename tests/images/seq/{seq-1c-8b-tiled-deflate-86098311.tiff => seq-1c-8b-tiled-deflate-20f3db0c.tiff} (100%) rename tests/images/seq/{seq-1c-8b-tiled-lzw-86098311.tiff => seq-1c-8b-tiled-lzw-20f3db0c.tiff} (100%) rename tests/images/seq/{seq-1c-i16-e55284f8.tiff => seq-1c-i16-63af2488.tiff} (100%) rename tests/images/seq/{seq-1c-i32-5fc9795b.tiff => seq-1c-i32-99fddec2.tiff} (100%) rename tests/images/seq/{seq-1c-i8-dbcc75e5.tiff => seq-1c-i8-f8446bbe.tiff} (100%) rename tests/images/seq/{seq-3c-10b-contig-20e8c150.tiff => seq-3c-10b-contig-d08d5dc0.tiff} (100%) rename tests/images/seq/{seq-3c-10b-planar-bc13e4aa.tiff => seq-3c-10b-planar-c82e8ab6.tiff} (100%) rename tests/images/seq/{seq-3c-12b-contig-5af4bdfa.tiff => seq-3c-12b-contig-e6f40b4a.tiff} (100%) rename tests/images/seq/{seq-3c-12b-planar-633ce351.tiff => seq-3c-12b-planar-e29e8e25.tiff} (100%) rename tests/images/seq/{seq-3c-14b-contig-c5d06ba3.tiff => seq-3c-14b-contig-f4dcc6cc.tiff} (100%) rename tests/images/seq/{seq-3c-14b-planar-29d9e1f8.tiff => seq-3c-14b-planar-4dde706b.tiff} (100%) rename tests/images/seq/{seq-3c-16b-bigtiff-8ccce3e0.tiff => seq-3c-16b-bigtiff-1b40ca6e.tiff} (100%) rename tests/images/seq/{seq-3c-24b-contig-e610e399.tiff => seq-3c-24b-contig-27b9f8ce.tiff} (100%) rename tests/images/seq/{seq-3c-24b-planar-82e9baed.tiff => seq-3c-24b-planar-6296c0c9.tiff} (100%) rename tests/images/seq/{seq-3c-32f-c90c9901.tiff => seq-3c-32f-9a471c2b.tiff} (100%) rename tests/images/seq/{seq-3c-5b-contig-4c1b3a7d.tiff => seq-3c-5b-contig-09f197f4.tiff} (100%) rename tests/images/seq/{seq-3c-64f-16f2fa89.tiff => seq-3c-64f-9fff098a.tiff} (100%) rename tests/images/seq/{seq-3c-7b-contig-1fa56ce4.tiff => seq-3c-7b-contig-2e4f43c5.tiff} (100%) rename tests/images/seq/{seq-3c-8b-bigendian-a837068d.tiff => seq-3c-8b-bigendian-8743c999.tiff} (100%) rename tests/images/seq/{seq-3c-8b-lzw-a837068d.tiff => seq-3c-8b-lzw-8743c999.tiff} (100%) rename tests/images/seq/{seq-3c-8b-multistrip-a837068d.tiff => seq-3c-8b-multistrip-8743c999.tiff} (100%) rename tests/images/seq/{seq-3c-8b-tiled-a837068d.tiff => seq-3c-8b-tiled-8743c999.tiff} (100%) rename tests/images/seq/{seq-3c-i16-8b69ff38.tiff => seq-3c-i16-f7fcf423.tiff} (100%) rename tests/images/seq/{seq-3c-i8-a5e96bf3.tiff => seq-3c-i8-d7550ce4.tiff} (100%) rename tests/images/seq/{seq-4c-16b-cmyk-e6c1ed1b.tiff => seq-4c-16b-cmyk-c6e52592.tiff} (100%) rename tests/images/seq/{seq-4c-16b-rgba-50a4e810.tiff => seq-4c-16b-rgba-5181991f.tiff} (100%) rename tests/images/seq/{seq-4c-8b-cmyk-0a0e06d2.tiff => seq-4c-8b-cmyk-352ac1da.tiff} (100%) rename tests/images/seq/{seq-4c-8b-rgba-068ac08a.tiff => seq-4c-8b-rgba-50969cda.tiff} (100%) rename tests/images/seq/{seq-4c-8b-rgba-unassoc-068ac08a.tiff => seq-4c-8b-rgba-unassoc-50969cda.tiff} (100%) diff --git a/Cargo.toml b/Cargo.toml index 36ec8f4..752c199 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -54,9 +54,6 @@ harness = false name = "encode" harness = false -[[bench]] -name = "decode" -harness = false [[test]] name = "decode_libtiffpic" diff --git a/benches/decode.rs b/benches/decode.rs deleted file mode 100644 index 51f13f3..0000000 --- a/benches/decode.rs +++ /dev/null @@ -1,40 +0,0 @@ -extern crate criterion; -extern crate tiff; - -use criterion::{black_box, Criterion, Throughput}; -use tiff::decoder::Decoder; - -fn decode_image(data: &[u8]) { - let image = std::io::Cursor::new(data); - let mut reader = Decoder::open(black_box(image)).unwrap(); - reader.next_image().unwrap(); - reader.read_image().unwrap(); -} - -fn main() { - let mut c = Criterion::default().configure_from_args(); - - // Check if large bench images exist - let bench_dir = std::path::Path::new("/tmp/bench-tiff"); - if !bench_dir.is_dir() { - eprintln!("Skipping large image benchmarks: /tmp/bench-tiff/ not found"); - eprintln!("Generate with: cc -O2 -o /tmp/gen_bench_tiff /tmp/gen_bench_tiff.c -ltiff -lm && /tmp/gen_bench_tiff"); - return; - } - - let mut group = c.benchmark_group("decode-1024x1024"); - group.sample_size(30); - - for depth in [3, 5, 7, 8, 10, 12, 14, 16, 24] { - let path = bench_dir.join(format!("bench-1c-{depth}b.tiff")); - if !path.exists() { - continue; - } - let data = std::fs::read(&path).unwrap(); - group - .throughput(Throughput::Bytes(data.len() as u64)) - .bench_function(format!("{depth}b"), |b| b.iter(|| decode_image(&data))); - } - - group.finish(); -} diff --git a/tests/decode_images.rs b/tests/decode_images.rs index c825728..eaf414e 100644 --- a/tests/decode_images.rs +++ b/tests/decode_images.rs @@ -1,6 +1,7 @@ extern crate tiff; use tiff::decoder::{ifd, Decoder, DecodingResult}; +use tiff::tags::{ByteOrder, Type}; use tiff::ColorType; use std::fs::File; @@ -83,7 +84,7 @@ fn compute_tiff_hash(reader: R) -> u32 { decoder.next_image().expect("Cannot read image IFD"); let (width, height) = decoder.dimensions().unwrap(); let color_type = decoder.colortype().unwrap(); - let result = decoder.read_image().unwrap(); + let mut result = decoder.read_image().unwrap(); // Hash page index + dimensions hasher.update(&page.to_le_bytes()); @@ -111,73 +112,27 @@ fn compute_tiff_hash(reader: R) -> u32 { other => panic!("compute_tiff_hash: unhandled ColorType {other:?}"), } - // Hash decoded data with type discriminant + LE sample bytes - match result { - DecodingResult::U8(ref data) => { - hasher.update(&[0]); - hasher.update(data); - } - DecodingResult::U16(ref data) => { - hasher.update(&[1]); - for v in data { - hasher.update(&v.to_le_bytes()); - } - } - DecodingResult::U32(ref data) => { - hasher.update(&[2]); - for v in data { - hasher.update(&v.to_le_bytes()); - } - } - DecodingResult::U64(ref data) => { - hasher.update(&[3]); - for v in data { - hasher.update(&v.to_le_bytes()); - } - } - DecodingResult::F16(ref data) => { - hasher.update(&[4]); - for v in data { - hasher.update(&v.to_le_bytes()); - } - } - DecodingResult::F32(ref data) => { - hasher.update(&[5]); - for v in data { - hasher.update(&v.to_le_bytes()); - } - } - DecodingResult::F64(ref data) => { - hasher.update(&[6]); - for v in data { - hasher.update(&v.to_le_bytes()); - } - } - DecodingResult::I8(ref data) => { - hasher.update(&[7]); - for v in data { - hasher.update(&v.to_le_bytes()); - } - } - DecodingResult::I16(ref data) => { - hasher.update(&[8]); - for v in data { - hasher.update(&v.to_le_bytes()); - } - } - DecodingResult::I32(ref data) => { - hasher.update(&[9]); - for v in data { - hasher.update(&v.to_le_bytes()); - } - } - DecodingResult::I64(ref data) => { - hasher.update(&[10]); - for v in data { - hasher.update(&v.to_le_bytes()); - } - } - } + // Hash decoded data: TIFF type tag (u16 repr) + LE sample bytes. + // Map each variant to the corresponding TIFF Type for byte-order normalization. + let sample_type = match &result { + DecodingResult::U8(_) => Type::BYTE, + DecodingResult::I8(_) => Type::SBYTE, + DecodingResult::U16(_) => Type::SHORT, + DecodingResult::I16(_) => Type::SSHORT, + DecodingResult::U32(_) => Type::LONG, + DecodingResult::I32(_) => Type::SLONG, + DecodingResult::F32(_) => Type::FLOAT, + DecodingResult::U64(_) => Type::LONG8, + DecodingResult::I64(_) => Type::SLONG8, + DecodingResult::F64(_) => Type::DOUBLE, + DecodingResult::F16(_) => Type::SHORT, // f16 is 2 bytes like SHORT + }; + hasher.update(&sample_type.to_u16().to_le_bytes()); + + let mut buf = result.as_buffer(0); + let bytes = buf.as_bytes_mut(); + ByteOrder::native().convert(sample_type, bytes, ByteOrder::LittleEndian); + hasher.update(bytes); page += 1; if !decoder.more_images() { diff --git a/tests/images/seq/seq-1c-10b-ebb39b8d.tiff b/tests/images/seq/seq-1c-10b-6d739fa2.tiff similarity index 100% rename from tests/images/seq/seq-1c-10b-ebb39b8d.tiff rename to tests/images/seq/seq-1c-10b-6d739fa2.tiff diff --git a/tests/images/seq/seq-1c-10b-hpredict-ebb39b8d.tiff b/tests/images/seq/seq-1c-10b-hpredict-6d739fa2.tiff similarity index 100% rename from tests/images/seq/seq-1c-10b-hpredict-ebb39b8d.tiff rename to tests/images/seq/seq-1c-10b-hpredict-6d739fa2.tiff diff --git a/tests/images/seq/seq-1c-10b-miniswhite-ebb39b8d.tiff b/tests/images/seq/seq-1c-10b-miniswhite-6d739fa2.tiff similarity index 100% rename from tests/images/seq/seq-1c-10b-miniswhite-ebb39b8d.tiff rename to tests/images/seq/seq-1c-10b-miniswhite-6d739fa2.tiff diff --git a/tests/images/seq/seq-1c-12b-349c9c76.tiff b/tests/images/seq/seq-1c-12b-47c39b31.tiff similarity index 100% rename from tests/images/seq/seq-1c-12b-349c9c76.tiff rename to tests/images/seq/seq-1c-12b-47c39b31.tiff diff --git a/tests/images/seq/seq-1c-12b-hpredict-349c9c76.tiff b/tests/images/seq/seq-1c-12b-hpredict-47c39b31.tiff similarity index 100% rename from tests/images/seq/seq-1c-12b-hpredict-349c9c76.tiff rename to tests/images/seq/seq-1c-12b-hpredict-47c39b31.tiff diff --git a/tests/images/seq/seq-1c-12b-miniswhite-349c9c76.tiff b/tests/images/seq/seq-1c-12b-miniswhite-47c39b31.tiff similarity index 100% rename from tests/images/seq/seq-1c-12b-miniswhite-349c9c76.tiff rename to tests/images/seq/seq-1c-12b-miniswhite-47c39b31.tiff diff --git a/tests/images/seq/seq-1c-14b-7e799edf.tiff b/tests/images/seq/seq-1c-14b-e883657f.tiff similarity index 100% rename from tests/images/seq/seq-1c-14b-7e799edf.tiff rename to tests/images/seq/seq-1c-14b-e883657f.tiff diff --git a/tests/images/seq/seq-1c-14b-hpredict-7e799edf.tiff b/tests/images/seq/seq-1c-14b-hpredict-e883657f.tiff similarity index 100% rename from tests/images/seq/seq-1c-14b-hpredict-7e799edf.tiff rename to tests/images/seq/seq-1c-14b-hpredict-e883657f.tiff diff --git a/tests/images/seq/seq-1c-14b-miniswhite-7e799edf.tiff b/tests/images/seq/seq-1c-14b-miniswhite-e883657f.tiff similarity index 100% rename from tests/images/seq/seq-1c-14b-miniswhite-7e799edf.tiff rename to tests/images/seq/seq-1c-14b-miniswhite-e883657f.tiff diff --git a/tests/images/seq/seq-1c-16b-bigendian-6b088a4a.tiff b/tests/images/seq/seq-1c-16b-bigendian-68f373a0.tiff similarity index 100% rename from tests/images/seq/seq-1c-16b-bigendian-6b088a4a.tiff rename to tests/images/seq/seq-1c-16b-bigendian-68f373a0.tiff diff --git a/tests/images/seq/seq-1c-16b-deflate-6b088a4a.tiff b/tests/images/seq/seq-1c-16b-deflate-68f373a0.tiff similarity index 100% rename from tests/images/seq/seq-1c-16b-deflate-6b088a4a.tiff rename to tests/images/seq/seq-1c-16b-deflate-68f373a0.tiff diff --git a/tests/images/seq/seq-1c-16b-lzw-6b088a4a.tiff b/tests/images/seq/seq-1c-16b-lzw-68f373a0.tiff similarity index 100% rename from tests/images/seq/seq-1c-16b-lzw-6b088a4a.tiff rename to tests/images/seq/seq-1c-16b-lzw-68f373a0.tiff diff --git a/tests/images/seq/seq-1c-16b-multistrip-6b088a4a.tiff b/tests/images/seq/seq-1c-16b-multistrip-68f373a0.tiff similarity index 100% rename from tests/images/seq/seq-1c-16b-multistrip-6b088a4a.tiff rename to tests/images/seq/seq-1c-16b-multistrip-68f373a0.tiff diff --git a/tests/images/seq/seq-1c-16b-tiled-6b088a4a.tiff b/tests/images/seq/seq-1c-16b-tiled-68f373a0.tiff similarity index 100% rename from tests/images/seq/seq-1c-16b-tiled-6b088a4a.tiff rename to tests/images/seq/seq-1c-16b-tiled-68f373a0.tiff diff --git a/tests/images/seq/seq-1c-1b-f2966d13.tiff b/tests/images/seq/seq-1c-1b-71f6a21a.tiff similarity index 100% rename from tests/images/seq/seq-1c-1b-f2966d13.tiff rename to tests/images/seq/seq-1c-1b-71f6a21a.tiff diff --git a/tests/images/seq/seq-1c-1b-miniswhite-f2966d13.tiff b/tests/images/seq/seq-1c-1b-miniswhite-71f6a21a.tiff similarity index 100% rename from tests/images/seq/seq-1c-1b-miniswhite-f2966d13.tiff rename to tests/images/seq/seq-1c-1b-miniswhite-71f6a21a.tiff diff --git a/tests/images/seq/seq-1c-24b-8e6d7cb5.tiff b/tests/images/seq/seq-1c-24b-072a9dc9.tiff similarity index 100% rename from tests/images/seq/seq-1c-24b-8e6d7cb5.tiff rename to tests/images/seq/seq-1c-24b-072a9dc9.tiff diff --git a/tests/images/seq/seq-1c-24b-hpredict-8e6d7cb5.tiff b/tests/images/seq/seq-1c-24b-hpredict-072a9dc9.tiff similarity index 100% rename from tests/images/seq/seq-1c-24b-hpredict-8e6d7cb5.tiff rename to tests/images/seq/seq-1c-24b-hpredict-072a9dc9.tiff diff --git a/tests/images/seq/seq-1c-24b-miniswhite-8e6d7cb5.tiff b/tests/images/seq/seq-1c-24b-miniswhite-072a9dc9.tiff similarity index 100% rename from tests/images/seq/seq-1c-24b-miniswhite-8e6d7cb5.tiff rename to tests/images/seq/seq-1c-24b-miniswhite-072a9dc9.tiff diff --git a/tests/images/seq/seq-1c-2b-eb3e4e3a.tiff b/tests/images/seq/seq-1c-2b-58b25f76.tiff similarity index 100% rename from tests/images/seq/seq-1c-2b-eb3e4e3a.tiff rename to tests/images/seq/seq-1c-2b-58b25f76.tiff diff --git a/tests/images/seq/seq-1c-32f-a6d061ac.tiff b/tests/images/seq/seq-1c-32f-390fe673.tiff similarity index 100% rename from tests/images/seq/seq-1c-32f-a6d061ac.tiff rename to tests/images/seq/seq-1c-32f-390fe673.tiff diff --git a/tests/images/seq/seq-1c-32f-deflate-fpredict-a6d061ac.tiff b/tests/images/seq/seq-1c-32f-deflate-fpredict-390fe673.tiff similarity index 100% rename from tests/images/seq/seq-1c-32f-deflate-fpredict-a6d061ac.tiff rename to tests/images/seq/seq-1c-32f-deflate-fpredict-390fe673.tiff diff --git a/tests/images/seq/seq-1c-3b-b64646a5.tiff b/tests/images/seq/seq-1c-3b-ef237c07.tiff similarity index 100% rename from tests/images/seq/seq-1c-3b-b64646a5.tiff rename to tests/images/seq/seq-1c-3b-ef237c07.tiff diff --git a/tests/images/seq/seq-1c-3b-miniswhite-b64646a5.tiff b/tests/images/seq/seq-1c-3b-miniswhite-ef237c07.tiff similarity index 100% rename from tests/images/seq/seq-1c-3b-miniswhite-b64646a5.tiff rename to tests/images/seq/seq-1c-3b-miniswhite-ef237c07.tiff diff --git a/tests/images/seq/seq-1c-4b-b3c1805b.tiff b/tests/images/seq/seq-1c-4b-fb92dcae.tiff similarity index 100% rename from tests/images/seq/seq-1c-4b-b3c1805b.tiff rename to tests/images/seq/seq-1c-4b-fb92dcae.tiff diff --git a/tests/images/seq/seq-1c-4b-miniswhite-b3c1805b.tiff b/tests/images/seq/seq-1c-4b-miniswhite-fb92dcae.tiff similarity index 100% rename from tests/images/seq/seq-1c-4b-miniswhite-b3c1805b.tiff rename to tests/images/seq/seq-1c-4b-miniswhite-fb92dcae.tiff diff --git a/tests/images/seq/seq-1c-4b-palette-80edc956.tiff b/tests/images/seq/seq-1c-4b-palette-85108c5a.tiff similarity index 100% rename from tests/images/seq/seq-1c-4b-palette-80edc956.tiff rename to tests/images/seq/seq-1c-4b-palette-85108c5a.tiff diff --git a/tests/images/seq/seq-1c-5b-59011bc5.tiff b/tests/images/seq/seq-1c-5b-73098d17.tiff similarity index 100% rename from tests/images/seq/seq-1c-5b-59011bc5.tiff rename to tests/images/seq/seq-1c-5b-73098d17.tiff diff --git a/tests/images/seq/seq-1c-5b-miniswhite-59011bc5.tiff b/tests/images/seq/seq-1c-5b-miniswhite-73098d17.tiff similarity index 100% rename from tests/images/seq/seq-1c-5b-miniswhite-59011bc5.tiff rename to tests/images/seq/seq-1c-5b-miniswhite-73098d17.tiff diff --git a/tests/images/seq/seq-1c-64f-8a733620.tiff b/tests/images/seq/seq-1c-64f-afa8560e.tiff similarity index 100% rename from tests/images/seq/seq-1c-64f-8a733620.tiff rename to tests/images/seq/seq-1c-64f-afa8560e.tiff diff --git a/tests/images/seq/seq-1c-64f-deflate-fpredict-8a733620.tiff b/tests/images/seq/seq-1c-64f-deflate-fpredict-afa8560e.tiff similarity index 100% rename from tests/images/seq/seq-1c-64f-deflate-fpredict-8a733620.tiff rename to tests/images/seq/seq-1c-64f-deflate-fpredict-afa8560e.tiff diff --git a/tests/images/seq/seq-1c-6b-miniswhite-7142de37.tiff b/tests/images/seq/seq-1c-6b-miniswhite-79cafbb6.tiff similarity index 100% rename from tests/images/seq/seq-1c-6b-miniswhite-7142de37.tiff rename to tests/images/seq/seq-1c-6b-miniswhite-79cafbb6.tiff diff --git a/tests/images/seq/seq-1c-7b-bd122024.tiff b/tests/images/seq/seq-1c-7b-9c61ba70.tiff similarity index 100% rename from tests/images/seq/seq-1c-7b-bd122024.tiff rename to tests/images/seq/seq-1c-7b-9c61ba70.tiff diff --git a/tests/images/seq/seq-1c-7b-miniswhite-bd122024.tiff b/tests/images/seq/seq-1c-7b-miniswhite-9c61ba70.tiff similarity index 100% rename from tests/images/seq/seq-1c-7b-miniswhite-bd122024.tiff rename to tests/images/seq/seq-1c-7b-miniswhite-9c61ba70.tiff diff --git a/tests/images/seq/seq-1c-8b-bigendian-86098311.tiff b/tests/images/seq/seq-1c-8b-bigendian-20f3db0c.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-bigendian-86098311.tiff rename to tests/images/seq/seq-1c-8b-bigendian-20f3db0c.tiff diff --git a/tests/images/seq/seq-1c-8b-bigtiff-86098311.tiff b/tests/images/seq/seq-1c-8b-bigtiff-20f3db0c.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-bigtiff-86098311.tiff rename to tests/images/seq/seq-1c-8b-bigtiff-20f3db0c.tiff diff --git a/tests/images/seq/seq-1c-8b-deflate-86098311.tiff b/tests/images/seq/seq-1c-8b-deflate-20f3db0c.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-deflate-86098311.tiff rename to tests/images/seq/seq-1c-8b-deflate-20f3db0c.tiff diff --git a/tests/images/seq/seq-1c-8b-lzw-86098311.tiff b/tests/images/seq/seq-1c-8b-lzw-20f3db0c.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-lzw-86098311.tiff rename to tests/images/seq/seq-1c-8b-lzw-20f3db0c.tiff diff --git a/tests/images/seq/seq-1c-8b-lzw-hpredict-86098311.tiff b/tests/images/seq/seq-1c-8b-lzw-hpredict-20f3db0c.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-lzw-hpredict-86098311.tiff rename to tests/images/seq/seq-1c-8b-lzw-hpredict-20f3db0c.tiff diff --git a/tests/images/seq/seq-1c-8b-multipage-0c8d8775.tiff b/tests/images/seq/seq-1c-8b-multipage-adeefdcc.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-multipage-0c8d8775.tiff rename to tests/images/seq/seq-1c-8b-multipage-adeefdcc.tiff diff --git a/tests/images/seq/seq-1c-8b-multistrip-86098311.tiff b/tests/images/seq/seq-1c-8b-multistrip-20f3db0c.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-multistrip-86098311.tiff rename to tests/images/seq/seq-1c-8b-multistrip-20f3db0c.tiff diff --git a/tests/images/seq/seq-1c-8b-packbits-86098311.tiff b/tests/images/seq/seq-1c-8b-packbits-20f3db0c.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-packbits-86098311.tiff rename to tests/images/seq/seq-1c-8b-packbits-20f3db0c.tiff diff --git a/tests/images/seq/seq-1c-8b-palette-7ae71ffd.tiff b/tests/images/seq/seq-1c-8b-palette-89b39bc3.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-palette-7ae71ffd.tiff rename to tests/images/seq/seq-1c-8b-palette-89b39bc3.tiff diff --git a/tests/images/seq/seq-1c-8b-tiled-86098311.tiff b/tests/images/seq/seq-1c-8b-tiled-20f3db0c.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-tiled-86098311.tiff rename to tests/images/seq/seq-1c-8b-tiled-20f3db0c.tiff diff --git a/tests/images/seq/seq-1c-8b-tiled-bigtiff-86098311.tiff b/tests/images/seq/seq-1c-8b-tiled-bigtiff-20f3db0c.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-tiled-bigtiff-86098311.tiff rename to tests/images/seq/seq-1c-8b-tiled-bigtiff-20f3db0c.tiff diff --git a/tests/images/seq/seq-1c-8b-tiled-deflate-86098311.tiff b/tests/images/seq/seq-1c-8b-tiled-deflate-20f3db0c.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-tiled-deflate-86098311.tiff rename to tests/images/seq/seq-1c-8b-tiled-deflate-20f3db0c.tiff diff --git a/tests/images/seq/seq-1c-8b-tiled-lzw-86098311.tiff b/tests/images/seq/seq-1c-8b-tiled-lzw-20f3db0c.tiff similarity index 100% rename from tests/images/seq/seq-1c-8b-tiled-lzw-86098311.tiff rename to tests/images/seq/seq-1c-8b-tiled-lzw-20f3db0c.tiff diff --git a/tests/images/seq/seq-1c-i16-e55284f8.tiff b/tests/images/seq/seq-1c-i16-63af2488.tiff similarity index 100% rename from tests/images/seq/seq-1c-i16-e55284f8.tiff rename to tests/images/seq/seq-1c-i16-63af2488.tiff diff --git a/tests/images/seq/seq-1c-i32-5fc9795b.tiff b/tests/images/seq/seq-1c-i32-99fddec2.tiff similarity index 100% rename from tests/images/seq/seq-1c-i32-5fc9795b.tiff rename to tests/images/seq/seq-1c-i32-99fddec2.tiff diff --git a/tests/images/seq/seq-1c-i8-dbcc75e5.tiff b/tests/images/seq/seq-1c-i8-f8446bbe.tiff similarity index 100% rename from tests/images/seq/seq-1c-i8-dbcc75e5.tiff rename to tests/images/seq/seq-1c-i8-f8446bbe.tiff diff --git a/tests/images/seq/seq-3c-10b-contig-20e8c150.tiff b/tests/images/seq/seq-3c-10b-contig-d08d5dc0.tiff similarity index 100% rename from tests/images/seq/seq-3c-10b-contig-20e8c150.tiff rename to tests/images/seq/seq-3c-10b-contig-d08d5dc0.tiff diff --git a/tests/images/seq/seq-3c-10b-planar-bc13e4aa.tiff b/tests/images/seq/seq-3c-10b-planar-c82e8ab6.tiff similarity index 100% rename from tests/images/seq/seq-3c-10b-planar-bc13e4aa.tiff rename to tests/images/seq/seq-3c-10b-planar-c82e8ab6.tiff diff --git a/tests/images/seq/seq-3c-12b-contig-5af4bdfa.tiff b/tests/images/seq/seq-3c-12b-contig-e6f40b4a.tiff similarity index 100% rename from tests/images/seq/seq-3c-12b-contig-5af4bdfa.tiff rename to tests/images/seq/seq-3c-12b-contig-e6f40b4a.tiff diff --git a/tests/images/seq/seq-3c-12b-planar-633ce351.tiff b/tests/images/seq/seq-3c-12b-planar-e29e8e25.tiff similarity index 100% rename from tests/images/seq/seq-3c-12b-planar-633ce351.tiff rename to tests/images/seq/seq-3c-12b-planar-e29e8e25.tiff diff --git a/tests/images/seq/seq-3c-14b-contig-c5d06ba3.tiff b/tests/images/seq/seq-3c-14b-contig-f4dcc6cc.tiff similarity index 100% rename from tests/images/seq/seq-3c-14b-contig-c5d06ba3.tiff rename to tests/images/seq/seq-3c-14b-contig-f4dcc6cc.tiff diff --git a/tests/images/seq/seq-3c-14b-planar-29d9e1f8.tiff b/tests/images/seq/seq-3c-14b-planar-4dde706b.tiff similarity index 100% rename from tests/images/seq/seq-3c-14b-planar-29d9e1f8.tiff rename to tests/images/seq/seq-3c-14b-planar-4dde706b.tiff diff --git a/tests/images/seq/seq-3c-16b-bigtiff-8ccce3e0.tiff b/tests/images/seq/seq-3c-16b-bigtiff-1b40ca6e.tiff similarity index 100% rename from tests/images/seq/seq-3c-16b-bigtiff-8ccce3e0.tiff rename to tests/images/seq/seq-3c-16b-bigtiff-1b40ca6e.tiff diff --git a/tests/images/seq/seq-3c-24b-contig-e610e399.tiff b/tests/images/seq/seq-3c-24b-contig-27b9f8ce.tiff similarity index 100% rename from tests/images/seq/seq-3c-24b-contig-e610e399.tiff rename to tests/images/seq/seq-3c-24b-contig-27b9f8ce.tiff diff --git a/tests/images/seq/seq-3c-24b-planar-82e9baed.tiff b/tests/images/seq/seq-3c-24b-planar-6296c0c9.tiff similarity index 100% rename from tests/images/seq/seq-3c-24b-planar-82e9baed.tiff rename to tests/images/seq/seq-3c-24b-planar-6296c0c9.tiff diff --git a/tests/images/seq/seq-3c-32f-c90c9901.tiff b/tests/images/seq/seq-3c-32f-9a471c2b.tiff similarity index 100% rename from tests/images/seq/seq-3c-32f-c90c9901.tiff rename to tests/images/seq/seq-3c-32f-9a471c2b.tiff diff --git a/tests/images/seq/seq-3c-5b-contig-4c1b3a7d.tiff b/tests/images/seq/seq-3c-5b-contig-09f197f4.tiff similarity index 100% rename from tests/images/seq/seq-3c-5b-contig-4c1b3a7d.tiff rename to tests/images/seq/seq-3c-5b-contig-09f197f4.tiff diff --git a/tests/images/seq/seq-3c-64f-16f2fa89.tiff b/tests/images/seq/seq-3c-64f-9fff098a.tiff similarity index 100% rename from tests/images/seq/seq-3c-64f-16f2fa89.tiff rename to tests/images/seq/seq-3c-64f-9fff098a.tiff diff --git a/tests/images/seq/seq-3c-7b-contig-1fa56ce4.tiff b/tests/images/seq/seq-3c-7b-contig-2e4f43c5.tiff similarity index 100% rename from tests/images/seq/seq-3c-7b-contig-1fa56ce4.tiff rename to tests/images/seq/seq-3c-7b-contig-2e4f43c5.tiff diff --git a/tests/images/seq/seq-3c-8b-bigendian-a837068d.tiff b/tests/images/seq/seq-3c-8b-bigendian-8743c999.tiff similarity index 100% rename from tests/images/seq/seq-3c-8b-bigendian-a837068d.tiff rename to tests/images/seq/seq-3c-8b-bigendian-8743c999.tiff diff --git a/tests/images/seq/seq-3c-8b-lzw-a837068d.tiff b/tests/images/seq/seq-3c-8b-lzw-8743c999.tiff similarity index 100% rename from tests/images/seq/seq-3c-8b-lzw-a837068d.tiff rename to tests/images/seq/seq-3c-8b-lzw-8743c999.tiff diff --git a/tests/images/seq/seq-3c-8b-multistrip-a837068d.tiff b/tests/images/seq/seq-3c-8b-multistrip-8743c999.tiff similarity index 100% rename from tests/images/seq/seq-3c-8b-multistrip-a837068d.tiff rename to tests/images/seq/seq-3c-8b-multistrip-8743c999.tiff diff --git a/tests/images/seq/seq-3c-8b-tiled-a837068d.tiff b/tests/images/seq/seq-3c-8b-tiled-8743c999.tiff similarity index 100% rename from tests/images/seq/seq-3c-8b-tiled-a837068d.tiff rename to tests/images/seq/seq-3c-8b-tiled-8743c999.tiff diff --git a/tests/images/seq/seq-3c-i16-8b69ff38.tiff b/tests/images/seq/seq-3c-i16-f7fcf423.tiff similarity index 100% rename from tests/images/seq/seq-3c-i16-8b69ff38.tiff rename to tests/images/seq/seq-3c-i16-f7fcf423.tiff diff --git a/tests/images/seq/seq-3c-i8-a5e96bf3.tiff b/tests/images/seq/seq-3c-i8-d7550ce4.tiff similarity index 100% rename from tests/images/seq/seq-3c-i8-a5e96bf3.tiff rename to tests/images/seq/seq-3c-i8-d7550ce4.tiff diff --git a/tests/images/seq/seq-4c-16b-cmyk-e6c1ed1b.tiff b/tests/images/seq/seq-4c-16b-cmyk-c6e52592.tiff similarity index 100% rename from tests/images/seq/seq-4c-16b-cmyk-e6c1ed1b.tiff rename to tests/images/seq/seq-4c-16b-cmyk-c6e52592.tiff diff --git a/tests/images/seq/seq-4c-16b-rgba-50a4e810.tiff b/tests/images/seq/seq-4c-16b-rgba-5181991f.tiff similarity index 100% rename from tests/images/seq/seq-4c-16b-rgba-50a4e810.tiff rename to tests/images/seq/seq-4c-16b-rgba-5181991f.tiff diff --git a/tests/images/seq/seq-4c-8b-cmyk-0a0e06d2.tiff b/tests/images/seq/seq-4c-8b-cmyk-352ac1da.tiff similarity index 100% rename from tests/images/seq/seq-4c-8b-cmyk-0a0e06d2.tiff rename to tests/images/seq/seq-4c-8b-cmyk-352ac1da.tiff diff --git a/tests/images/seq/seq-4c-8b-rgba-068ac08a.tiff b/tests/images/seq/seq-4c-8b-rgba-50969cda.tiff similarity index 100% rename from tests/images/seq/seq-4c-8b-rgba-068ac08a.tiff rename to tests/images/seq/seq-4c-8b-rgba-50969cda.tiff diff --git a/tests/images/seq/seq-4c-8b-rgba-unassoc-068ac08a.tiff b/tests/images/seq/seq-4c-8b-rgba-unassoc-50969cda.tiff similarity index 100% rename from tests/images/seq/seq-4c-8b-rgba-unassoc-068ac08a.tiff rename to tests/images/seq/seq-4c-8b-rgba-unassoc-50969cda.tiff