#![allow(unused_imports)]
use super::{color, BitVec, GreenfieldResult, Msb0, UniformQuantization};
#[test]
fn quantization_new_ok() -> GreenfieldResult<()> {
let quantization = UniformQuantization::new(1, 1, 1)?;
assert_eq!(
quantization,
UniformQuantization {
bits_r: 1,
bits_g: 1,
bits_b: 1
}
);
Ok(())
}
#[test]
fn quantization_new_err() -> GreenfieldResult<()> {
let quantization = UniformQuantization::new(0, 1, 1);
assert!(quantization.is_err());
let quantization = UniformQuantization::new(1, 0, 1);
assert!(quantization.is_err());
let quantization = UniformQuantization::new(1, 1, 0);
assert!(quantization.is_err());
let quantization = UniformQuantization::new(9, 1, 1);
assert!(quantization.is_err());
let quantization = UniformQuantization::new(1, 9, 1);
assert!(quantization.is_err());
let quantization = UniformQuantization::new(1, 1, 9);
assert!(quantization.is_err());
Ok(())
}
#[test]
fn quantization_default() -> GreenfieldResult<()> {
let quantization = UniformQuantization::default();
assert_eq!(
quantization,
UniformQuantization {
bits_r: 8,
bits_g: 8,
bits_b: 8
}
);
Ok(())
}
#[test]
fn quantization_get_quantized_color() -> GreenfieldResult<()> {
let color = color::Rgb::new(0, 0, 0);
let quantization = UniformQuantization::new(1, 1, 1)?;
let quantized_color = quantization.get_quantized_color(&color);
let expected_color = color::Rgb::new(0, 0, 0);
assert_eq!(quantized_color, expected_color);
let color = color::Rgb::new(255, 255, 255);
let quantization = UniformQuantization::new(1, 1, 1)?;
let quantized_color = quantization.get_quantized_color(&color);
let expected_color = color::Rgb::new(1, 1, 1);
assert_eq!(quantized_color, expected_color);
let color = color::Rgb::new(100, 100, 100);
let quantization = UniformQuantization::new(1, 1, 1)?;
let quantized_color = quantization.get_quantized_color(&color);
let expected_color = color::Rgb::new(0, 0, 0);
assert_eq!(quantized_color, expected_color);
let color = color::Rgb::new(200, 200, 200);
let quantization = UniformQuantization::new(1, 1, 1)?;
let quantized_color = quantization.get_quantized_color(&color);
let expected_color = color::Rgb::new(1, 1, 1);
assert_eq!(quantized_color, expected_color);
let color = color::Rgb::new(255, 255, 255);
let quantization = UniformQuantization::new(5, 6, 5)?;
let quantized_color = quantization.get_quantized_color(&color);
let expected_color = color::Rgb::new(31, 63, 31);
assert_eq!(quantized_color, expected_color);
let color = color::Rgb::new(255, 255, 255);
let quantization = UniformQuantization::new(8, 8, 8)?;
let quantized_color = quantization.get_quantized_color(&color);
let expected_color = color::Rgb::new(255, 255, 255);
assert_eq!(quantized_color, expected_color);
Ok(())
}
#[test]
fn quantization_quantify_color() -> GreenfieldResult<()> {
let mut color = color::Rgb::new(0, 0, 0);
let quantization = UniformQuantization::new(1, 1, 1)?;
quantization.quantify_color(&mut color);
let expected_color = color::Rgb::new(0, 0, 0);
assert_eq!(color, expected_color);
let mut color = color::Rgb::new(255, 255, 255);
let quantization = UniformQuantization::new(1, 1, 1)?;
quantization.quantify_color(&mut color);
let expected_color = color::Rgb::new(1, 1, 1);
assert_eq!(color, expected_color);
let mut color = color::Rgb::new(100, 100, 100);
let quantization = UniformQuantization::new(1, 1, 1)?;
quantization.quantify_color(&mut color);
let expected_color = color::Rgb::new(0, 0, 0);
assert_eq!(color, expected_color);
let mut color = color::Rgb::new(200, 200, 200);
let quantization = UniformQuantization::new(1, 1, 1)?;
quantization.quantify_color(&mut color);
let expected_color = color::Rgb::new(1, 1, 1);
assert_eq!(color, expected_color);
let mut color = color::Rgb::new(255, 255, 255);
let quantization = UniformQuantization::new(5, 6, 5)?;
quantization.quantify_color(&mut color);
let expected_color = color::Rgb::new(31, 63, 31);
assert_eq!(color, expected_color);
let mut color = color::Rgb::new(255, 255, 255);
let quantization = UniformQuantization::new(8, 8, 8)?;
quantization.quantify_color(&mut color);
let expected_color = color::Rgb::new(255, 255, 255);
assert_eq!(color, expected_color);
Ok(())
}
#[test]
fn quantization_get_dequantized_color() -> GreenfieldResult<()> {
let color = color::Rgb::new(0, 0, 0);
let quantization = UniformQuantization::new(1, 1, 1)?;
let dequantized_color = quantization.get_dequantized_color(&color);
let expected_color = color::Rgb::new(64, 64, 64);
assert_eq!(dequantized_color, expected_color);
let color = color::Rgb::new(1, 1, 1);
let quantization = UniformQuantization::new(1, 1, 1)?;
let dequantized_color = quantization.get_dequantized_color(&color);
let expected_color = color::Rgb::new(192, 192, 192);
assert_eq!(dequantized_color, expected_color);
let color = color::Rgb::new(0, 0, 0);
let quantization = UniformQuantization::new(5, 6, 5)?;
let dequantized_color = quantization.get_dequantized_color(&color);
let expected_color = color::Rgb::new(4, 2, 4);
assert_eq!(dequantized_color, expected_color);
let color = color::Rgb::new(31, 63, 31);
let quantization = UniformQuantization::new(5, 6, 5)?;
let dequantized_color = quantization.get_dequantized_color(&color);
let expected_color = color::Rgb::new(252, 254, 252);
assert_eq!(dequantized_color, expected_color);
let color = color::Rgb::new(255, 255, 255);
let quantization = UniformQuantization::new(8, 8, 8)?;
let dequantized_color = quantization.get_dequantized_color(&color);
let expected_color = color::Rgb::new(255, 255, 255);
assert_eq!(dequantized_color, expected_color);
Ok(())
}
#[test]
fn quantization_dequantify_color() -> GreenfieldResult<()> {
let mut color = color::Rgb::new(0, 0, 0);
let quantization = UniformQuantization::new(1, 1, 1)?;
quantization.dequantify_color(&mut color);
let expected_color = color::Rgb::new(64, 64, 64);
assert_eq!(color, expected_color);
let mut color = color::Rgb::new(1, 1, 1);
let quantization = UniformQuantization::new(1, 1, 1)?;
quantization.dequantify_color(&mut color);
let expected_color = color::Rgb::new(192, 192, 192);
assert_eq!(color, expected_color);
let mut color = color::Rgb::new(0, 0, 0);
let quantization = UniformQuantization::new(5, 6, 5)?;
quantization.dequantify_color(&mut color);
let expected_color = color::Rgb::new(4, 2, 4);
assert_eq!(color, expected_color);
let mut color = color::Rgb::new(31, 63, 31);
let quantization = UniformQuantization::new(5, 6, 5)?;
quantization.dequantify_color(&mut color);
let expected_color = color::Rgb::new(252, 254, 252);
assert_eq!(color, expected_color);
let mut color = color::Rgb::new(255, 255, 255);
let quantization = UniformQuantization::new(8, 8, 8)?;
quantization.dequantify_color(&mut color);
let expected_color = color::Rgb::new(255, 255, 255);
assert_eq!(color, expected_color);
Ok(())
}
#[test]
fn quantization_decompress() -> GreenfieldResult<()> {
let compressed = bitvec::bits![u8, Msb0; 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1];
let quantization = UniformQuantization::new(8, 8, 8)?;
let decompressed = quantization.decompress(&compressed);
let expected = vec![color::Rgb::new(1, 1, 1)];
assert_eq!(decompressed, expected);
let compressed = bitvec::bits![u8, Msb0; 0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1];
let quantization = UniformQuantization::new(5, 6, 5)?;
let decompressed = quantization.decompress(&compressed);
let expected = vec![color::Rgb::new(12, 6, 12)];
assert_eq!(decompressed, expected);
let compressed =
bitvec::bits![u8, Msb0; 0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1];
let quantization = UniformQuantization::new(5, 6, 5)?;
let decompressed = quantization.decompress(&compressed);
let expected = vec![color::Rgb::new(12, 6, 12), color::Rgb::new(12, 6, 12)];
assert_eq!(decompressed, expected);
let compressed = bitvec::bits![u8, Msb0; 1,1,1,1,1,1];
let quantization = UniformQuantization::new(2, 2, 2)?;
let decompressed = quantization.decompress(&compressed);
let expected = vec![color::Rgb::new(224, 224, 224)];
assert_eq!(decompressed, expected);
Ok(())
}
#[test]
fn quantization_compress() -> GreenfieldResult<()> {
let colors = vec![color::Rgb::new(1, 1, 1)];
let quantization = UniformQuantization::new(8, 8, 8)?;
let compressed = quantization.compress(&colors);
let expected = bitvec::bits![u8, Msb0; 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1];
assert_eq!(compressed, expected);
let colors = vec![color::Rgb::new(12, 6, 12)];
let quantization = UniformQuantization::new(5, 6, 5)?;
let compressed = quantization.compress(&colors);
let expected = bitvec::bits![u8, Msb0; 0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1];
assert_eq!(compressed, expected);
let colors = vec![color::Rgb::new(12, 6, 12), color::Rgb::new(12, 6, 12)];
let quantization = UniformQuantization::new(5, 6, 5)?;
let compressed = quantization.compress(&colors);
let expected =
bitvec::bits![u8, Msb0; 0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1];
assert_eq!(compressed, expected);
let colors = vec![color::Rgb::new(224, 224, 224)];
let quantization = UniformQuantization::new(2, 2, 2)?;
let compressed = quantization.compress(&colors);
let expected = bitvec::bits![u8, Msb0; 1,1,1,1,1,1];
assert_eq!(compressed, expected);
Ok(())
}