mod common;
use common::*;
#[test]
fn fill_rect_gradient_renders_non_uniform_and_deterministic() {
let mut scene = Scene::new(40.0, 40.0);
scene.commands.push(SceneCommand::PushClip {
x: 0.0,
y: 0.0,
w: 40.0,
h: 40.0,
});
scene.commands.push(SceneCommand::FillRect {
x: 0.0,
y: 0.0,
w: 40.0,
h: 40.0,
paint: Paint::Gradient(GradientPaint {
angle_deg: 90.0, stops: vec![
GradientStop {
offset: 0.0,
color: Color::srgb(0, 0, 0, 255),
},
GradientStop {
offset: 1.0,
color: Color::srgb(255, 255, 255, 255),
},
],
radial: false,
center_x: None,
center_y: None,
radius_frac: None,
}),
});
scene.commands.push(SceneCommand::PopClip);
let backend = TinySkiaBackend;
let provider = default_provider();
let img = backend
.rasterize(&scene, &provider, &no_assets())
.expect("rasterize must succeed");
let (top_r, _, _, _) = pixel(&img.rgba, img.width, 20, 1);
let (bot_r, _, _, _) = pixel(&img.rgba, img.width, 20, 38);
assert!(
bot_r > top_r,
"vertical gradient must brighten downward: top={top_r}, bottom={bot_r}"
);
let img2 = backend
.rasterize(&scene, &provider, &no_assets())
.expect("rasterize must succeed");
assert_eq!(img.rgba, img2.rgba, "gradient render must be deterministic");
}
#[test]
fn radial_gradient_renders_symmetric_and_varies() {
let size = 40.0_f64;
let mut scene = Scene::new(size, size);
scene.commands.push(SceneCommand::PushClip {
x: 0.0,
y: 0.0,
w: size,
h: size,
});
scene.commands.push(SceneCommand::FillRect {
x: 0.0,
y: 0.0,
w: size,
h: size,
paint: Paint::Gradient(GradientPaint {
angle_deg: 0.0,
stops: vec![
GradientStop {
offset: 0.0,
color: Color::srgb(255, 255, 255, 255),
},
GradientStop {
offset: 1.0,
color: Color::srgb(0, 0, 0, 255),
},
],
radial: true,
center_x: Some(0.5),
center_y: Some(0.5),
radius_frac: None,
}),
});
scene.commands.push(SceneCommand::PopClip);
let backend = TinySkiaBackend;
let provider = default_provider();
let img = backend
.rasterize(&scene, &provider, &no_assets())
.expect("radial gradient rasterize must succeed");
let mid = (size / 2.0) as u32;
let edge = 2_u32;
let (left_r, _, _, _) = pixel(&img.rgba, img.width, edge, mid);
let (right_r, _, _, _) = pixel(&img.rgba, img.width, size as u32 - edge - 1, mid);
assert_eq!(
left_r, right_r,
"radial gradient must be horizontally symmetric: left={left_r}, right={right_r}"
);
let (center_r, _, _, _) = pixel(&img.rgba, img.width, mid, mid);
let (corner_r, _, _, _) = pixel(&img.rgba, img.width, 1, 1);
assert!(
center_r != corner_r,
"radial center must differ from corner: center={center_r}, corner={corner_r}"
);
}