Testing access through alternate tag reads

This commit is contained in:
A. Molzer committed 2026-01-11 17:55:15 +01:00
1 parent 24b008a7c3
commit d3b777c961
2 files changed
+72 -1

No files matched your search

+67
View File
@@ -1865,3 +1865,70 @@ impl<'l> IfdDecoder<'l> {
})
}
}
#[cfg(test)]
mod tests {
use super::Decoder;
use crate::{
bytecast,
tags::{ByteOrder, Tag, ValueBuffer},
};
#[test]
fn equivalence_of_tag_readers() {
let file = std::fs::File::open(concat!(
env!("CARGO_MANIFEST_DIR"),
"/tests/images/int8_rgb.tif"
))
.unwrap();
let mut decoder = Decoder::new(file).unwrap();
let file_bo = decoder.byte_order();
let mut ifd = decoder.image_ifd();
{
let value = ifd
.find_tag(Tag::BitsPerSample)
.unwrap()
.expect("must have BitsPerSample");
let samples = value.into_u16_vec().unwrap();
assert_eq!(samples.as_slice(), [8, 8, 8]);
}
{
let mut value = ValueBuffer::from_value(&[0u16; 4]);
let _entry = ifd
.find_tag_buf(Tag::BitsPerSample, &mut value)
.unwrap()
.expect("must have BitsPerSample");
value.set_byte_order(ByteOrder::native());
assert_eq!(value.as_bytes(), bytecast::u16_as_ne_bytes(&[8, 8, 8]));
}
{
let mut by_bytes = [0u16; 4];
let entry = ifd
.find_entry(Tag::BitsPerSample)
.expect("must have BitsPerSample");
let byte_len = ifd
.find_tag_bytes(
Tag::BitsPerSample,
bytecast::u16_as_ne_mut_bytes(&mut by_bytes),
0,
)
.unwrap()
.expect("must have BitsPerSample");
assert_eq!(byte_len, 3 * std::mem::size_of::<u16>());
file_bo.convert(
entry.field_type(),
bytecast::u16_as_ne_mut_bytes(&mut by_bytes[..3]),
ByteOrder::native(),
);
assert_eq!(&by_bytes[..3], &[8, 8, 8]);
}
}
}