Another project
1use std::path::PathBuf;
2
3use bone_render::{
4 Camera2, PixelDiff, PixelDiffThreshold, SketchRenderer, SketchScene, Style, decode_png,
5 encode_png,
6};
7
8mod common;
9
10use common::{extent_square as extent, make_context};
11
12const GOLDEN: &str = "tests/goldens/grid_empty_256.png";
13const UPDATE_ENV: &str = "BONE_UPDATE_GRID_GOLDEN";
14const DIFF_TOLERANCE: f64 = 16.0 / 255.0;
15
16fn golden_path() -> PathBuf {
17 PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(GOLDEN)
18}
19
20#[test]
21fn grid_empty_sketch_matches_golden() {
22 let size = extent(256);
23 let ctx = make_context(size);
24 let mut renderer = SketchRenderer::new(ctx.gpu(), ctx.color_format());
25 let scene = SketchScene::empty();
26 let camera = Camera2::new(size);
27 let style = Style::default();
28
29 let Ok(frame) = renderer.render(&ctx, &scene, camera, &style) else {
30 panic!("SketchRenderer::render failed");
31 };
32
33 let path = golden_path();
34
35 if std::env::var(UPDATE_ENV).is_ok() {
36 let Ok(bytes) = encode_png(&frame) else {
37 panic!("encode_png failed");
38 };
39 if let Some(parent) = path.parent() {
40 assert!(
41 std::fs::create_dir_all(parent).is_ok(),
42 "failed to create goldens dir"
43 );
44 }
45 assert!(
46 std::fs::write(&path, &bytes).is_ok(),
47 "failed to write golden {}",
48 path.display()
49 );
50 return;
51 }
52
53 let Ok(bytes) = std::fs::read(&path) else {
54 panic!(
55 "golden missing at {}: rerun with {UPDATE_ENV}=1 to generate",
56 path.display()
57 );
58 };
59 let Ok((golden_extent, golden_rgba)) = decode_png(&bytes) else {
60 panic!("failed to decode golden PNG");
61 };
62 assert_eq!(golden_extent, size, "golden extent drift");
63 let threshold = PixelDiffThreshold::new(DIFF_TOLERANCE);
64 let Ok(report) = PixelDiff::compare(&frame, &golden_rgba, threshold) else {
65 panic!("PixelDiff rejected inputs");
66 };
67 assert!(
68 report.is_clean(),
69 "grid render drifted from golden: {} mismatches, worst {:?}, backend {}",
70 report.over_threshold(),
71 report.worst(),
72 frame.backend(),
73 );
74}