Another project
0

Configure Feed

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

at main 2.5 kB View raw
1use bone_render::{ClearColor, PixelDiff, PixelDiffThreshold, Style, ViewportExtent, ViewportPx}; 2 3mod common; 4 5use common::{extent_square as extent, make_context}; 6 7fn expected_rgba(extent: ViewportExtent, color: ClearColor) -> Vec<u8> { 8 let pixel = color.to_rgba8(); 9 let count = usize::try_from(extent.pixel_count()).unwrap_or(0); 10 (0..count).flat_map(|_| pixel.into_iter()).collect() 11} 12 13#[test] 14fn offscreen_clear_matches_style_background_exactly() { 15 let size = extent(64); 16 let ctx = make_context(size); 17 let style = Style::default(); 18 19 let Ok(frame) = ctx.render_clear(&style) else { 20 panic!("render_clear failed"); 21 }; 22 23 assert_eq!(frame.extent(), size); 24 let expected = expected_rgba(size, style.background()); 25 assert_eq!(frame.rgba().len(), expected.len()); 26 27 let Ok(report) = PixelDiff::compare(&frame, &expected, PixelDiffThreshold::EXACT) else { 28 panic!("pixel diff rejected inputs"); 29 }; 30 assert!( 31 report.is_clean(), 32 "clear frame diverged from expected bytes: {} mismatches, worst {:?}", 33 report.over_threshold(), 34 report.worst(), 35 ); 36} 37 38#[test] 39fn offscreen_clear_honours_custom_background() { 40 let size = extent(32); 41 let ctx = make_context(size); 42 let background = ClearColor::opaque(0.25, 0.50, 0.75); 43 let style = Style::new(background); 44 45 let Ok(frame) = ctx.render_clear(&style) else { 46 panic!("render_clear failed"); 47 }; 48 49 let expected = expected_rgba(size, background); 50 let Ok(report) = PixelDiff::compare(&frame, &expected, PixelDiffThreshold::EXACT) else { 51 panic!("pixel diff rejected inputs"); 52 }; 53 assert!( 54 report.is_clean(), 55 "custom clear diverged: {} mismatches", 56 report.over_threshold(), 57 ); 58} 59 60#[test] 61fn offscreen_extent_with_non_aligned_width_reads_back_packed_rgba() { 62 let size = ViewportExtent::new(ViewportPx::new(63), ViewportPx::new(16)); 63 let ctx = make_context(size); 64 let style = Style::new(ClearColor::opaque(1.0, 0.0, 0.0)); 65 66 let Ok(frame) = ctx.render_clear(&style) else { 67 panic!("render_clear failed"); 68 }; 69 70 let expected = expected_rgba(size, style.background()); 71 assert_eq!(frame.rgba().len(), expected.len()); 72 let Ok(report) = PixelDiff::compare(&frame, &expected, PixelDiffThreshold::EXACT) else { 73 panic!("pixel diff rejected inputs"); 74 }; 75 assert!(report.is_clean(), "unaligned width readback diverged"); 76}