use gamma_table_macros::gamma_table;
gamma_table! {
name: TEST_GAMMA_ENCODING_TABLE,
entry_type: u8,
gamma: 2.2,
size: 256
}
gamma_table! {
name: TEST_GAMMA_DECODING_TABLE,
entry_type: u8,
gamma: 2.2,
size: 256,
decoding: true
}
gamma_table! {
name: TEST_U16_TABLE,
entry_type: u16,
gamma: 1.8,
size: 256
}
gamma_table! {
name: TEST_U16_FULL_RANGE_TABLE,
entry_type: u16,
gamma: 1.8,
size: 256,
max_value: 65535
}
gamma_table! {
name: TEST_LIMITED_TABLE,
entry_type: u8,
gamma: 2.2,
size: 256,
max_value: 128
}
gamma_table! {
name: TEST_MINIMUM_SIZE_TABLE,
entry_type: u8,
gamma: 2.2,
size: 3
}
#[test]
fn test_encoding_table_properties() {
assert_eq!(TEST_GAMMA_ENCODING_TABLE.len(), 256);
assert_eq!(TEST_GAMMA_ENCODING_TABLE[0], 0);
assert_eq!(TEST_GAMMA_ENCODING_TABLE[255], 255);
for i in 1..TEST_GAMMA_ENCODING_TABLE.len() {
assert!(TEST_GAMMA_ENCODING_TABLE[i] >= TEST_GAMMA_ENCODING_TABLE[i - 1]);
}
}
#[test]
fn test_decoding_table_properties() {
assert_eq!(TEST_GAMMA_DECODING_TABLE.len(), 256);
assert_eq!(TEST_GAMMA_DECODING_TABLE[0], 0);
assert_eq!(TEST_GAMMA_DECODING_TABLE[255], 255);
for i in 1..TEST_GAMMA_DECODING_TABLE.len() {
assert!(TEST_GAMMA_DECODING_TABLE[i] >= TEST_GAMMA_DECODING_TABLE[i - 1]);
}
}
#[test]
fn test_different_data_types() {
assert_eq!(TEST_U16_TABLE.len(), 256);
assert_eq!(TEST_U16_TABLE[0], 0);
assert_eq!(TEST_U16_TABLE[255], 255);
assert!(TEST_U16_TABLE[128] <= 255);
assert_eq!(TEST_U16_FULL_RANGE_TABLE[0], 0);
assert_eq!(TEST_U16_FULL_RANGE_TABLE[255], 65535);
assert!(TEST_U16_FULL_RANGE_TABLE[128] > 255); }
#[test]
fn test_brightness_limiting() {
assert_eq!(TEST_LIMITED_TABLE.len(), 256);
assert_eq!(TEST_LIMITED_TABLE[0], 0);
assert_eq!(TEST_LIMITED_TABLE[255], 128);
for &value in &TEST_LIMITED_TABLE {
assert!(value <= 128);
}
}
#[test]
fn test_encoding_vs_decoding_difference() {
let input_50_percent = 128usize;
let encoding_50_percent = TEST_GAMMA_ENCODING_TABLE[input_50_percent];
let decoding_50_percent = TEST_GAMMA_DECODING_TABLE[input_50_percent];
assert_ne!(encoding_50_percent, decoding_50_percent);
assert_eq!(TEST_GAMMA_ENCODING_TABLE[0], TEST_GAMMA_DECODING_TABLE[0]); assert_eq!(
TEST_GAMMA_ENCODING_TABLE[255],
TEST_GAMMA_DECODING_TABLE[255]
);
let linear_50_percent = 128u8;
assert!(encoding_50_percent < linear_50_percent); assert!(decoding_50_percent > linear_50_percent); }
#[test]
fn test_default_max_value() {
assert_eq!(TEST_GAMMA_ENCODING_TABLE[255], 255); assert_eq!(TEST_U16_TABLE[255], 255); }
#[test]
fn test_minimum_size_table() {
assert_eq!(TEST_MINIMUM_SIZE_TABLE.len(), 3);
assert_eq!(TEST_MINIMUM_SIZE_TABLE[0], 0); assert_eq!(TEST_MINIMUM_SIZE_TABLE[2], 2);
assert!(TEST_MINIMUM_SIZE_TABLE[1] >= TEST_MINIMUM_SIZE_TABLE[0]);
assert!(TEST_MINIMUM_SIZE_TABLE[2] >= TEST_MINIMUM_SIZE_TABLE[1]);
}
#[test]
fn test_compile_fail() {
let t = trybuild::TestCases::new();
t.compile_fail("tests/compile_fail/*.rs");
}