use jbig2enc::wire::{
FileHeader, GenericRegion, PageInfo, SymbolDict, TextRegion, TextRegionAtFlags,
TextRegionSymInsts,
};
#[test]
fn file_header_generic_single_page() {
let header = FileHeader {
organisation_type: true,
unknown_n_pages: false,
n_pages: 1,
};
let bytes = header.to_bytes();
assert_eq!(bytes.len(), 13);
#[rustfmt::skip]
let expected: [u8; 13] = [
0x97, 0x4a, 0x42, 0x32, 0x0d, 0x0a, 0x1a, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x01, ];
assert_eq!(bytes, expected);
}
#[test]
fn file_header_multipage() {
let header = FileHeader {
organisation_type: true,
unknown_n_pages: false,
n_pages: 3,
};
let bytes = header.to_bytes();
#[rustfmt::skip]
let expected: [u8; 13] = [
0x97, 0x4a, 0x42, 0x32, 0x0d, 0x0a, 0x1a, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x03, ];
assert_eq!(bytes, expected);
}
#[test]
fn file_header_unknown_pages() {
let header = FileHeader {
organisation_type: true,
unknown_n_pages: true,
n_pages: 0,
};
let bytes = header.to_bytes();
assert_eq!(bytes[8], 0x03);
}
#[test]
fn page_info_generic_lossless() {
let info = PageInfo {
width: 640,
height: 480,
xres: 300,
yres: 300,
is_lossless: true,
contains_refinements: false,
default_pixel: false,
default_operator: 0,
aux_buffers: false,
operator_override: false,
segment_flags: 0,
};
let bytes = info.to_bytes();
assert_eq!(bytes.len(), 19);
#[rustfmt::skip]
let expected: [u8; 19] = [
0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x01, 0x2C, 0x00, 0x00, 0x01, 0x2C, 0x01, 0x00, 0x00, ];
assert_eq!(bytes, expected);
}
#[test]
fn page_info_with_refinement() {
let info = PageInfo {
width: 1024,
height: 768,
xres: 72,
yres: 72,
is_lossless: true,
contains_refinements: true,
default_pixel: false,
default_operator: 0,
aux_buffers: false,
operator_override: false,
segment_flags: 0,
};
let bytes = info.to_bytes();
assert_eq!(bytes[16], 0x03);
}
#[test]
fn generic_region_tpgd_on() {
let region = GenericRegion {
width: 640,
height: 480,
x: 0,
y: 0,
comb_operator: 0,
mmr: false,
gbtemplate: 0,
tpgdon: true,
a1x: 3,
a1y: -1,
a2x: -3,
a2y: -1,
a3x: 2,
a3y: -2,
a4x: -2,
a4y: -2,
};
let bytes = region.to_bytes();
assert_eq!(bytes.len(), 26);
#[rustfmt::skip]
let expected: [u8; 26] = [
0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x03, 0xFF, 0xFD, 0xFF, 0x02, 0xFE, 0xFE, 0xFE, ];
assert_eq!(bytes, expected);
}
#[test]
fn generic_region_tpgd_off() {
let region = GenericRegion {
width: 100,
height: 200,
x: 0,
y: 0,
comb_operator: 0,
mmr: false,
gbtemplate: 0,
tpgdon: false,
a1x: 3,
a1y: -1,
a2x: -3,
a2y: -1,
a3x: 2,
a3y: -2,
a4x: -2,
a4y: -2,
};
let bytes = region.to_bytes();
assert_eq!(bytes[17], 0x00);
}
#[test]
fn symbol_dict_typical() {
let dict = SymbolDict {
sdhuff: false,
sdrefagg: false,
sdhuffdh: 0,
sdhuffdw: 0,
sdhuffbmsize: false,
sdhuffagginst: false,
bmcontext: false,
bmcontextretained: false,
sdtemplate: 0,
sdrtemplate: false,
a1x: 3,
a1y: -1,
a2x: -3,
a2y: -1,
a3x: 2,
a3y: -2,
a4x: -2,
a4y: -2,
exsyms: 42,
newsyms: 42,
};
let bytes = dict.to_bytes();
assert_eq!(bytes.len(), 18);
#[rustfmt::skip]
let expected: [u8; 18] = [
0x00, 0x00, 0x03, 0xFF, 0xFD, 0xFF, 0x02, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x2A, ];
assert_eq!(bytes, expected);
}
#[test]
fn text_region_no_refinement() {
let region = TextRegion {
width: 1024,
height: 768,
x: 0,
y: 0,
comb_operator: 0,
sbhuff: false,
sbrefine: false,
logsbstrips: 0,
refcorner: 0,
transposed: false,
sbcombop: 0,
sbdefpixel: false,
sbdsoffset: 0,
sbrtemplate: false,
};
let bytes = region.to_bytes();
assert_eq!(bytes.len(), 19);
#[rustfmt::skip]
let expected: [u8; 19] = [
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ];
assert_eq!(bytes, expected);
}
#[test]
fn text_region_with_refinement() {
let region = TextRegion {
width: 800,
height: 600,
x: 0,
y: 0,
comb_operator: 0,
sbhuff: false,
sbrefine: true,
logsbstrips: 0,
refcorner: 0,
transposed: false,
sbcombop: 0,
sbdefpixel: false,
sbdsoffset: 0,
sbrtemplate: false,
};
let bytes = region.to_bytes();
assert_eq!(bytes[18], 0x02);
}
#[test]
fn text_region_at_flags() {
let flags = TextRegionAtFlags {
a1x: -1,
a1y: -1,
a2x: -1,
a2y: -1,
};
let bytes = flags.to_bytes();
assert_eq!(bytes.len(), 4);
assert_eq!(bytes, [0xFF, 0xFF, 0xFF, 0xFF]);
}
#[test]
fn text_region_sym_insts() {
let insts = TextRegionSymInsts {
sbnuminstances: 256,
};
let bytes = insts.to_bytes();
assert_eq!(bytes.len(), 4);
assert_eq!(bytes, [0x00, 0x00, 0x01, 0x00]);
}