Another project
1use bone_render::{
2 Camera2, PixelsPerMm, PreviewArc, SketchPreview, SketchRenderer, SketchScene, Style,
3 ViewportExtent,
4};
5use bone_types::{Angle, Length, Point2};
6use uom::si::angle::radian;
7use uom::si::length::millimeter;
8
9mod common;
10
11fn extent() -> ViewportExtent {
12 common::extent_square(256)
13}
14
15#[test]
16fn preview_arc_paints_pixels_outside_background() {
17 let ctx = common::make_context(extent());
18 let mut renderer = SketchRenderer::new(ctx.gpu(), ctx.color_format());
19 let scene = SketchScene::empty();
20 let preview = SketchPreview {
21 arcs: vec![PreviewArc {
22 center: Point2::from_mm(0.0, 0.0),
23 radius: Length::new::<millimeter>(1.0),
24 start_angle: Angle::new::<radian>(0.0),
25 sweep_angle: Angle::new::<radian>(std::f64::consts::FRAC_PI_2),
26 }],
27 ..SketchPreview::empty()
28 };
29 let camera = Camera2::new(extent()).with_zoom(PixelsPerMm::new(64.0));
30 let style = Style::default();
31 let Ok(frame) = renderer.render_with_preview(&ctx, &scene, &preview, camera, &style) else {
32 panic!("render_with_preview failed");
33 };
34 let bg = style.background().to_rgba8();
35 let pixels = frame.rgba();
36 let painted = pixels
37 .chunks_exact(4)
38 .filter(|p| p[0] != bg[0] || p[1] != bg[1] || p[2] != bg[2])
39 .count();
40 assert!(
41 painted > 0,
42 "preview arc should paint pixels distinct from the {bg:?} background",
43 );
44}