use jbig2enc::wire::SegmentHeader;
#[test]
fn segment_reference_size_1byte() {
let seg = SegmentHeader {
number: 0,
seg_type: 0,
deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![],
page: 1,
data_length: 0,
};
assert_eq!(seg.reference_size(), 1);
let seg256 = SegmentHeader { number: 256, ..seg };
assert_eq!(seg256.reference_size(), 1);
}
#[test]
fn segment_reference_size_2bytes() {
let seg = SegmentHeader {
number: 257,
seg_type: 0,
deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![],
page: 1,
data_length: 0,
};
assert_eq!(seg.reference_size(), 2);
let seg65536 = SegmentHeader {
number: 65536,
..seg
};
assert_eq!(seg65536.reference_size(), 2);
}
#[test]
fn segment_reference_size_4bytes() {
let seg = SegmentHeader {
number: 65537,
seg_type: 0,
deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![],
page: 1,
data_length: 0,
};
assert_eq!(seg.reference_size(), 4);
}
#[test]
fn segment_page_size_1byte() {
let seg = SegmentHeader {
number: 0,
seg_type: 0,
deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![],
page: 255,
data_length: 0,
};
assert_eq!(seg.page_size(), 1);
}
#[test]
fn segment_page_size_4bytes() {
let seg = SegmentHeader {
number: 0,
seg_type: 0,
deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![],
page: 256,
data_length: 0,
};
assert_eq!(seg.page_size(), 4);
}
#[test]
fn segment_total_size_minimal() {
let seg = SegmentHeader {
number: 0,
seg_type: 0,
deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![],
page: 1,
data_length: 100,
};
assert_eq!(seg.size(), 11);
}
#[test]
fn segment_total_size_with_refs() {
let seg = SegmentHeader {
number: 300,
seg_type: 6,
deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![1, 2],
page: 1000,
data_length: 500,
};
assert_eq!(seg.size(), 18);
}
#[test]
fn segment_page_info_simple() {
let seg = SegmentHeader {
number: 0,
seg_type: 48, deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![],
page: 1,
data_length: 19,
};
let bytes = seg.to_bytes();
assert_eq!(bytes.len(), seg.size());
#[rustfmt::skip]
let expected: Vec<u8> = vec![
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, ];
assert_eq!(bytes, expected);
}
#[test]
fn segment_symbol_table() {
let seg = SegmentHeader {
number: 0,
seg_type: 0, deferred_non_retain: false,
retain_bits: 1,
referred_to: vec![],
page: 0,
data_length: 118,
};
let bytes = seg.to_bytes();
#[rustfmt::skip]
let expected: Vec<u8> = vec![
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x76, ];
assert_eq!(bytes, expected);
}
#[test]
fn segment_text_region_one_ref() {
let seg = SegmentHeader {
number: 2,
seg_type: 6, deferred_non_retain: false,
retain_bits: 2,
referred_to: vec![0],
page: 1,
data_length: 500,
};
let bytes = seg.to_bytes();
assert_eq!(bytes.len(), 12);
#[rustfmt::skip]
let expected: Vec<u8> = vec![
0x00, 0x00, 0x00, 0x02, 0x06, 0x22, 0x00, 0x01, 0x00, 0x00, 0x01, 0xF4, ];
assert_eq!(bytes, expected);
}
#[test]
fn segment_text_region_two_refs() {
let seg = SegmentHeader {
number: 3,
seg_type: 6, deferred_non_retain: false,
retain_bits: 2,
referred_to: vec![0, 2], page: 1,
data_length: 800,
};
let bytes = seg.to_bytes();
assert_eq!(bytes.len(), 13);
#[rustfmt::skip]
let expected: Vec<u8> = vec![
0x00, 0x00, 0x00, 0x03, 0x06, 0x42, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x20, ];
assert_eq!(bytes, expected);
}
#[test]
fn segment_end_of_page() {
let seg = SegmentHeader {
number: 4,
seg_type: 49, deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![],
page: 1,
data_length: 0,
};
let bytes = seg.to_bytes();
#[rustfmt::skip]
let expected: Vec<u8> = vec![
0x00, 0x00, 0x00, 0x04, 0x31, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, ];
assert_eq!(bytes, expected);
}
#[test]
fn segment_end_of_file() {
let seg = SegmentHeader {
number: 5,
seg_type: 51, deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![],
page: 0,
data_length: 0,
};
let bytes = seg.to_bytes();
#[rustfmt::skip]
let expected: Vec<u8> = vec![
0x00, 0x00, 0x00, 0x05, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ];
assert_eq!(bytes, expected);
}
#[test]
fn segment_large_number_2byte_ref() {
let seg = SegmentHeader {
number: 300,
seg_type: 6,
deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![100],
page: 1,
data_length: 50,
};
let bytes = seg.to_bytes();
assert_eq!(bytes.len(), 13);
#[rustfmt::skip]
let expected: Vec<u8> = vec![
0x00, 0x00, 0x01, 0x2C, 0x06, 0x20, 0x00, 0x64, 0x01, 0x00, 0x00, 0x00, 0x32, ];
assert_eq!(bytes, expected);
}
#[test]
fn segment_4byte_page() {
let seg = SegmentHeader {
number: 0,
seg_type: 48,
deferred_non_retain: false,
retain_bits: 0,
referred_to: vec![],
page: 256,
data_length: 19,
};
let bytes = seg.to_bytes();
assert_eq!(bytes.len(), 14);
#[rustfmt::skip]
let expected: Vec<u8> = vec![
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x13, ];
assert_eq!(bytes, expected);
}