From 71b5d0d996c7d7d4160229b34911750e6038302b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com>
Date: Sat, 15 Jul 2023 13:03:57 +0100
Subject: [PATCH] chore: comparison of instr_timing image Also added support
 for image saving.

---
 .../test/blargg/instr_timing/instr_timing.png | Bin 0 -> 1542 bytes
 frontends/sdl/src/test.rs                     |  29 ++++++++++++++++--
 2 files changed, 27 insertions(+), 2 deletions(-)
 create mode 100644 frontends/sdl/res/test/blargg/instr_timing/instr_timing.png

diff --git a/frontends/sdl/res/test/blargg/instr_timing/instr_timing.png b/frontends/sdl/res/test/blargg/instr_timing/instr_timing.png
new file mode 100644
index 0000000000000000000000000000000000000000..2f56cb91ba13f74eaee3010fa3f7fda7945276f0
GIT binary patch
literal 1542
zcmeHHZ%7ky7`|!4SZHLJB+&<zJ}6`a6@o0XIUAT+xLZx55jf$J!d6UUG>ahm1BxJK
zM%N!A@jMA>F;SX*7(r@R&>@0k2z4Ns$Px2OcRlazs6O_gJ_P+>yZim_ec$JOp7*)C
zR#RP>Y0I-Q43p_P;5dToJ^VV>rs1ENN=z|~b<*Y7SKDG)_+aTMbafWGvTyYFj8r-t
ze!rh}V+Cm?CjQ1cN2NU;Lh<{ZPREsz-X5D&<@W^72ZM(sf~-1uTx9FNgg12w$&!a>
zWxb(x@N4YmE4SW#cz9mlS>#zg;r!UIkM|*H^Z%fKQ-YZ@c0OH@uj|vF)Y2zjvE}WA
z67WU5OZo<{$gW(yEh%GMWNx-G6(%GX-f)pL#CD5p@#j6f)Y>L<@l_nGM|PVQdL2OC
zSjeteSRtq69d1ey$=s5Z`e$A-+GOVg(_F+Xdr{Tyj3X}5D=B4!LkAg00lesBXm7>6
zAloQ=H!oe1xd^HYxXcY1_t7RgDBg;Waq-!CwcL0fZ=fJ=a}3R`+rdl2gllZjB>>GM
zFh|r<c+HF0dxMr1vh$L%a%zA;;^C(<XB}XR2QOsRCJ!R5ds0!g&~vZ2ya+POiDM#*
zJy63L7KXS$2fZ^@gdSud$J7ONwIJ9)8X%DDfoX_SVRoYC8%$H(pv9FSIG43k6Ffvs
zM;FPd{TP&xlpg$%mobL`NaNT{s!`8sWqx$lP?+Y|uNU-<)_~NvUnXrOmNX!S`bMxZ
zF(J9}zRc}1&7h(%>XJ#wP}Qoo1qo%3wNMsVU`9}#Ci*ibI=?r&i(u})1aK?FHzXX!
zaGO(RA#F)ZLY<H0b>(87W*LLSkdfdKau`5thnt|jIexb;!?LE~TH$Uoi^ZftuKMBN
rM4iaeU{uD?xd5EvZoTohzIIFPC6BiC)}1cOrSH3|qS`T7?z{XQklBPS

literal 0
HcmV?d00001

diff --git a/frontends/sdl/src/test.rs b/frontends/sdl/src/test.rs
index 7fa014f8..4d02cbc2 100644
--- a/frontends/sdl/src/test.rs
+++ b/frontends/sdl/src/test.rs
@@ -1,4 +1,4 @@
-use image::io::Reader as ImageReader;
+use image::{io::Reader as ImageReader, ImageBuffer, Rgb};
 
 pub fn compare_images(source_pixels: &[u8], target_path: &str) -> bool {
     let image_buffer = ImageReader::open(target_path)
@@ -23,6 +23,19 @@ pub fn compare_images(source_pixels: &[u8], target_path: &str) -> bool {
     true
 }
 
+pub fn save_image(pixels: &[u8], width: u32, height: u32, file_path: &str) {
+    let mut image_buffer: ImageBuffer<Rgb<u8>, Vec<u8>> = ImageBuffer::new(width, height);
+
+    for (x, y, pixel) in image_buffer.enumerate_pixels_mut() {
+        let base = ((y * width + x) * 3) as usize;
+        *pixel = Rgb([pixels[base], pixels[base + 1], pixels[base + 2]]);
+    }
+
+    image_buffer
+        .save_with_format(file_path, image::ImageFormat::Png)
+        .unwrap();
+}
+
 #[cfg(test)]
 mod tests {
     use boytacean::{
@@ -31,7 +44,7 @@ mod tests {
         test::{run_image_test, TestOptions},
     };
 
-    use super::compare_images;
+    use super::{compare_images, save_image};
 
     #[test]
     fn test_blargg_cpu_instrs() {
@@ -44,6 +57,18 @@ mod tests {
         assert_eq!(image_result, true);
     }
 
+    #[test]
+    fn test_blargg_instr_timing() {
+        let result: [u8; FRAME_BUFFER_SIZE] = run_image_test(
+            "../../res/roms/test/blargg/instr_timing/instr_timing.gb",
+            Some(50000000),
+            TestOptions::default(),
+        );
+        compare_images(&result, "res/test/blargg/instr_timing/instr_timing.png");
+        let image_result = compare_images(&result, "res/test/blargg/instr_timing/instr_timing.png");
+        assert_eq!(image_result, true);
+    }
+
     #[test]
     fn test_dmg_acid2() {
         let result: [u8; FRAME_BUFFER_SIZE] = run_image_test(
-- 
GitLab