Another project
0

Configure Feed

Select the types of activity you want to include in your feed.

at main 2.2 kB View raw
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}