This commit is contained in:
2026-07-09 02:59:53 +03:00
commit 7ace048d94
817 changed files with 234289 additions and 0 deletions
+131
View File
@@ -0,0 +1,131 @@
#![allow(dead_code, unused_imports, unused_variables, unused_macros, unreachable_patterns)]
use hcie_filter::Layer;
fn make_test_layer() -> Layer {
let mut layer = Layer::new_transparent("test", 10, 10);
for y in 0..10 {
for x in 0..10 {
let v = ((x + y) * 25 % 256) as u8;
layer.set_pixel(x, y, [v, v, v, 255]);
}
}
layer
}
fn assert_pixels_match(a: &Layer, b: &Layer) {
assert_eq!(a.width, b.width);
assert_eq!(a.height, b.height);
assert_eq!(a.pixels, b.pixels);
}
#[test]
fn test_blur_does_not_panic() {
let mut layer = make_test_layer();
hcie_filter::apply_filter(&mut layer, "box_blur", &serde_json::json!({"radius": 2}));
assert_eq!(layer.width, 10);
assert_eq!(layer.height, 10);
}
#[test]
fn test_gaussian_blur_does_not_panic() {
let mut layer = make_test_layer();
hcie_filter::apply_filter(&mut layer, "gaussian_blur", &serde_json::json!({"radius": 2}));
assert_eq!(layer.width, 10);
assert_eq!(layer.height, 10);
}
#[test]
fn test_motion_blur_does_not_panic() {
let mut layer = make_test_layer();
hcie_filter::apply_filter(&mut layer, "motion_blur", &serde_json::json!({"distance": 5, "angle": 45.0}));
assert_eq!(layer.width, 10);
assert_eq!(layer.height, 10);
}
#[test]
fn test_invert_filter() {
let mut layer = make_test_layer();
let original_pixels = layer.pixels.clone();
hcie_filter::apply_filter(&mut layer, "invert", &serde_json::json!({}));
let any_changed = layer.pixels.iter().zip(&original_pixels).any(|(a, b)| a != b);
assert!(any_changed, "invert should change pixel values");
}
#[test]
fn test_grayscale_filter() {
let mut layer = make_test_layer();
hcie_filter::apply_filter(&mut layer, "grayscale", &serde_json::json!({}));
for y in 0..10 {
for x in 0..10 {
let p = layer.get_pixel(x, y);
let diff_rg = (p[0] as i16 - p[1] as i16).abs();
let diff_rb = (p[0] as i16 - p[2] as i16).abs();
assert!(diff_rg <= 3 && diff_rb <= 3, "grayscale: r={}, g={}, b={}", p[0], p[1], p[2]);
}
}
}
#[test]
fn test_filter_ids() {
let ids = hcie_filter::filter_ids();
assert!(!ids.is_empty(), "should have at least one filter");
let names: Vec<&str> = ids.iter().map(|(id, _)| *id).collect();
assert!(names.contains(&"invert"), "invert should be registered");
assert!(names.contains(&"box_blur"), "box_blur should be registered");
}
#[test]
fn test_sharpen_does_not_panic() {
let mut layer = make_test_layer();
hcie_filter::apply_filter(&mut layer, "sharpen", &serde_json::json!({}));
assert_eq!(layer.width, 10);
assert_eq!(layer.height, 10);
}
#[test]
fn test_unknown_filter_is_noop() {
let mut layer = make_test_layer();
let before = layer.pixels.clone();
hcie_filter::apply_filter(&mut layer, "nonexistent_filter", &serde_json::json!({}));
assert_eq!(layer.pixels, before, "unknown filter should be noop");
}
#[test]
fn test_unsharp_mask_does_not_panic() {
let mut layer = make_test_layer();
hcie_filter::apply_filter(&mut layer, "unsharp_mask", &serde_json::json!({"radius": 2, "amount": 0.5}));
assert_eq!(layer.width, 10);
assert_eq!(layer.height, 10);
}
#[test]
fn test_brightness_contrast() {
let mut layer = make_test_layer();
hcie_filter::apply_filter(&mut layer, "brightness_contrast", &serde_json::json!({"brightness": 0.2, "contrast": 0.5}));
let any_different = layer.pixels.iter().any(|&v| v != 0);
assert!(any_different, "brightness/contrast should produce valid output");
}
#[test]
fn test_hue_saturation_does_not_panic() {
let mut layer = make_test_layer();
hcie_filter::apply_filter(&mut layer, "hue_saturation", &serde_json::json!({"hue_shift": 0.5, "saturation": 1.5, "lightness": 0.0}));
assert_eq!(layer.width, 10);
assert_eq!(layer.height, 10);
}
#[test]
fn test_emboss_does_not_panic() {
let mut layer = make_test_layer();
hcie_filter::apply_filter(&mut layer, "emboss", &serde_json::json!({}));
assert_eq!(layer.width, 10);
assert_eq!(layer.height, 10);
}
#[test]
fn test_find_edges_does_not_panic() {
let mut layer = make_test_layer();
hcie_filter::apply_filter(&mut layer, "find_edges", &serde_json::json!({}));
assert_eq!(layer.width, 10);
assert_eq!(layer.height, 10);
}