Tests and benches
This commit is contained in:
parent
a0e979d009
commit
5e052e5f62
8 changed files with 137 additions and 41 deletions
|
|
@ -158,7 +158,7 @@ fn reductions_rgba_to_grayscale_alpha_16(b: &mut Bencher) {
|
||||||
));
|
));
|
||||||
let png = PngData::new(&input, false).unwrap();
|
let png = PngData::new(&input, false).unwrap();
|
||||||
|
|
||||||
b.iter(|| color::reduce_rgb_to_grayscale(&png.raw));
|
b.iter(|| color::reduced_rgb_to_grayscale(&png.raw));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
|
|
@ -168,7 +168,7 @@ fn reductions_rgba_to_grayscale_alpha_8(b: &mut Bencher) {
|
||||||
));
|
));
|
||||||
let png = PngData::new(&input, false).unwrap();
|
let png = PngData::new(&input, false).unwrap();
|
||||||
|
|
||||||
b.iter(|| color::reduce_rgb_to_grayscale(&png.raw));
|
b.iter(|| color::reduced_rgb_to_grayscale(&png.raw));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
|
|
@ -179,7 +179,7 @@ fn reductions_rgba_to_grayscale_16(b: &mut Bencher) {
|
||||||
let png = PngData::new(&input, false).unwrap();
|
let png = PngData::new(&input, false).unwrap();
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
color::reduce_rgb_to_grayscale(&png.raw)
|
color::reduced_rgb_to_grayscale(&png.raw)
|
||||||
.and_then(|r| alpha::reduced_alpha_channel(&r, false))
|
.and_then(|r| alpha::reduced_alpha_channel(&r, false))
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -192,7 +192,7 @@ fn reductions_rgba_to_grayscale_8(b: &mut Bencher) {
|
||||||
let png = PngData::new(&input, false).unwrap();
|
let png = PngData::new(&input, false).unwrap();
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
color::reduce_rgb_to_grayscale(&png.raw)
|
color::reduced_rgb_to_grayscale(&png.raw)
|
||||||
.and_then(|r| alpha::reduced_alpha_channel(&r, false))
|
.and_then(|r| alpha::reduced_alpha_channel(&r, false))
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -204,7 +204,7 @@ fn reductions_rgb_to_grayscale_16(b: &mut Bencher) {
|
||||||
));
|
));
|
||||||
let png = PngData::new(&input, false).unwrap();
|
let png = PngData::new(&input, false).unwrap();
|
||||||
|
|
||||||
b.iter(|| color::reduce_rgb_to_grayscale(&png.raw));
|
b.iter(|| color::reduced_rgb_to_grayscale(&png.raw));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
|
|
@ -212,7 +212,7 @@ fn reductions_rgb_to_grayscale_8(b: &mut Bencher) {
|
||||||
let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_grayscale_8.png"));
|
let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_grayscale_8.png"));
|
||||||
let png = PngData::new(&input, false).unwrap();
|
let png = PngData::new(&input, false).unwrap();
|
||||||
|
|
||||||
b.iter(|| color::reduce_rgb_to_grayscale(&png.raw));
|
b.iter(|| color::reduced_rgb_to_grayscale(&png.raw));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
|
|
@ -220,7 +220,7 @@ fn reductions_rgba_to_palette_8(b: &mut Bencher) {
|
||||||
let input = test::black_box(PathBuf::from("tests/files/rgba_8_should_be_palette_8.png"));
|
let input = test::black_box(PathBuf::from("tests/files/rgba_8_should_be_palette_8.png"));
|
||||||
let png = PngData::new(&input, false).unwrap();
|
let png = PngData::new(&input, false).unwrap();
|
||||||
|
|
||||||
b.iter(|| color::reduce_to_palette(&png.raw));
|
b.iter(|| color::reduced_to_indexed(&png.raw));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
|
|
@ -228,7 +228,27 @@ fn reductions_rgb_to_palette_8(b: &mut Bencher) {
|
||||||
let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_palette_8.png"));
|
let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_palette_8.png"));
|
||||||
let png = PngData::new(&input, false).unwrap();
|
let png = PngData::new(&input, false).unwrap();
|
||||||
|
|
||||||
b.iter(|| color::reduce_to_palette(&png.raw));
|
b.iter(|| color::reduced_to_indexed(&png.raw));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn reductions_grayscale_8_to_palette_8(b: &mut Bencher) {
|
||||||
|
let input = test::black_box(PathBuf::from(
|
||||||
|
"tests/files/grayscale_8_should_be_palette_8.png",
|
||||||
|
));
|
||||||
|
let png = PngData::new(&input, false).unwrap();
|
||||||
|
|
||||||
|
b.iter(|| color::reduced_to_indexed(&png.raw));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn reductions_palette_8_to_grayscale_8(b: &mut Bencher) {
|
||||||
|
let input = test::black_box(PathBuf::from(
|
||||||
|
"tests/files/palette_8_should_be_grayscale_8.png",
|
||||||
|
));
|
||||||
|
let png = PngData::new(&input, false).unwrap();
|
||||||
|
|
||||||
|
b.iter(|| color::indexed_to_channels(&png.raw));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 66 KiB |
BIN
tests/files/grayscale_8_should_be_palette_8.png
Normal file
BIN
tests/files/grayscale_8_should_be_palette_8.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
BIN
tests/files/palette_8_should_be_rgb.png
Normal file
BIN
tests/files/palette_8_should_be_rgb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 195 B |
BIN
tests/files/palette_8_should_be_rgba.png
Normal file
BIN
tests/files/palette_8_should_be_rgba.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
|
|
@ -427,8 +427,8 @@ fn interlacing_0_to_1_small_files() {
|
||||||
};
|
};
|
||||||
|
|
||||||
assert_eq!(png.raw.ihdr.interlaced, Interlacing::Adam7);
|
assert_eq!(png.raw.ihdr.interlaced, Interlacing::Adam7);
|
||||||
assert_eq!(png.raw.ihdr.color_type.png_header_code(), INDEXED);
|
assert_eq!(png.raw.ihdr.color_type.png_header_code(), RGB);
|
||||||
assert_eq!(png.raw.ihdr.bit_depth, BitDepth::One);
|
assert_eq!(png.raw.ihdr.bit_depth, BitDepth::Eight);
|
||||||
|
|
||||||
remove_file(output).ok();
|
remove_file(output).ok();
|
||||||
}
|
}
|
||||||
|
|
@ -461,8 +461,8 @@ fn interlacing_1_to_0_small_files() {
|
||||||
};
|
};
|
||||||
|
|
||||||
assert_eq!(png.raw.ihdr.interlaced, Interlacing::None);
|
assert_eq!(png.raw.ihdr.interlaced, Interlacing::None);
|
||||||
assert_eq!(png.raw.ihdr.color_type.png_header_code(), INDEXED);
|
assert_eq!(png.raw.ihdr.color_type.png_header_code(), RGB);
|
||||||
// the depth can't be asserted reliably, because on such small file different zlib implementations pick different depth as the best
|
assert_eq!(png.raw.ihdr.bit_depth, BitDepth::Eight);
|
||||||
|
|
||||||
remove_file(output).ok();
|
remove_file(output).ok();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -546,6 +546,17 @@ fn interlaced_palette_1_should_be_palette_1() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn interlaced_palette_8_should_be_grayscale_8() {
|
||||||
|
test_it_converts(
|
||||||
|
"tests/files/interlaced_palette_8_should_be_grayscale_8.png",
|
||||||
|
INDEXED,
|
||||||
|
BitDepth::Eight,
|
||||||
|
GRAYSCALE,
|
||||||
|
BitDepth::Eight,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn interlaced_grayscale_alpha_16_should_be_grayscale_alpha_16() {
|
fn interlaced_grayscale_alpha_16_should_be_grayscale_alpha_16() {
|
||||||
test_it_converts(
|
test_it_converts(
|
||||||
|
|
@ -651,8 +662,8 @@ fn interlaced_small_files() {
|
||||||
"tests/files/interlaced_small_files.png",
|
"tests/files/interlaced_small_files.png",
|
||||||
INDEXED,
|
INDEXED,
|
||||||
BitDepth::Eight,
|
BitDepth::Eight,
|
||||||
INDEXED,
|
RGB,
|
||||||
BitDepth::One,
|
BitDepth::Eight,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -556,6 +556,42 @@ fn palette_4_should_be_palette_2() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn palette_8_should_be_grayscale_8() {
|
||||||
|
test_it_converts(
|
||||||
|
"tests/files/palette_8_should_be_grayscale_8.png",
|
||||||
|
false,
|
||||||
|
INDEXED,
|
||||||
|
BitDepth::Eight,
|
||||||
|
GRAYSCALE,
|
||||||
|
BitDepth::Eight,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn palette_8_should_be_rgb() {
|
||||||
|
test_it_converts(
|
||||||
|
"tests/files/palette_8_should_be_rgb.png",
|
||||||
|
false,
|
||||||
|
INDEXED,
|
||||||
|
BitDepth::Eight,
|
||||||
|
RGB,
|
||||||
|
BitDepth::Eight,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn palette_8_should_be_rgba() {
|
||||||
|
test_it_converts(
|
||||||
|
"tests/files/palette_8_should_be_rgba.png",
|
||||||
|
false,
|
||||||
|
INDEXED,
|
||||||
|
BitDepth::Eight,
|
||||||
|
RGBA,
|
||||||
|
BitDepth::Eight,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn palette_2_should_be_palette_2() {
|
fn palette_2_should_be_palette_2() {
|
||||||
test_it_converts(
|
test_it_converts(
|
||||||
|
|
@ -808,6 +844,54 @@ fn grayscale_2_should_be_grayscale_1() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn grayscale_8_should_be_palette_8() {
|
||||||
|
test_it_converts(
|
||||||
|
"tests/files/grayscale_8_should_be_palette_8.png",
|
||||||
|
false,
|
||||||
|
GRAYSCALE,
|
||||||
|
BitDepth::Eight,
|
||||||
|
INDEXED,
|
||||||
|
BitDepth::Eight,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn grayscale_8_should_be_palette_4() {
|
||||||
|
test_it_converts(
|
||||||
|
"tests/files/grayscale_8_should_be_palette_4.png",
|
||||||
|
false,
|
||||||
|
GRAYSCALE,
|
||||||
|
BitDepth::Eight,
|
||||||
|
INDEXED,
|
||||||
|
BitDepth::Four,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn grayscale_8_should_be_palette_2() {
|
||||||
|
test_it_converts(
|
||||||
|
"tests/files/grayscale_8_should_be_palette_2.png",
|
||||||
|
false,
|
||||||
|
GRAYSCALE,
|
||||||
|
BitDepth::Eight,
|
||||||
|
INDEXED,
|
||||||
|
BitDepth::Two,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn grayscale_8_should_be_palette_1() {
|
||||||
|
test_it_converts(
|
||||||
|
"tests/files/grayscale_8_should_be_palette_1.png",
|
||||||
|
false,
|
||||||
|
GRAYSCALE,
|
||||||
|
BitDepth::Eight,
|
||||||
|
INDEXED,
|
||||||
|
BitDepth::One,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn grayscale_alpha_16_should_be_grayscale_trns_16() {
|
fn grayscale_alpha_16_should_be_grayscale_trns_16() {
|
||||||
test_it_converts(
|
test_it_converts(
|
||||||
|
|
@ -834,33 +918,14 @@ fn grayscale_alpha_8_should_be_grayscale_trns_8() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn small_files() {
|
fn small_files() {
|
||||||
let input = PathBuf::from("tests/files/small_files.png");
|
test_it_converts(
|
||||||
let (output, opts) = get_opts(&input);
|
"tests/files/small_files.png",
|
||||||
|
false,
|
||||||
let png = PngData::new(&input, opts.fix_errors).unwrap();
|
INDEXED,
|
||||||
|
BitDepth::Eight,
|
||||||
assert_eq!(png.raw.ihdr.color_type.png_header_code(), INDEXED);
|
RGB,
|
||||||
assert_eq!(png.raw.ihdr.bit_depth, BitDepth::Eight);
|
BitDepth::Eight,
|
||||||
|
);
|
||||||
match oxipng::optimize(&InFile::Path(input), &output, &opts) {
|
|
||||||
Ok(_) => (),
|
|
||||||
Err(x) => panic!("{}", x),
|
|
||||||
};
|
|
||||||
let output = output.path().unwrap();
|
|
||||||
assert!(output.exists());
|
|
||||||
|
|
||||||
let png = match PngData::new(output, opts.fix_errors) {
|
|
||||||
Ok(x) => x,
|
|
||||||
Err(x) => {
|
|
||||||
remove_file(output).ok();
|
|
||||||
panic!("{}", x)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
assert_eq!(png.raw.ihdr.color_type.png_header_code(), INDEXED);
|
|
||||||
// depth varies depending on zlib implementation used
|
|
||||||
|
|
||||||
remove_file(output).ok();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue