tests: use anyhow
This commit is contained in:
parent
21e767525e
commit
695bb06757
|
@ -6,14 +6,14 @@ use gb_emu_lib::connect::{EmulatorCoreTrait, RomFile};
|
||||||
mod common;
|
mod common;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cpu_instrs() -> Result<(), String> {
|
fn cpu_instrs() -> anyhow::Result<()> {
|
||||||
run_blargg_test("cpu_instrs\n\n01:ok 02:ok 03:ok 04:ok 05:ok 06:ok 07:ok 08:ok 09:ok 10:ok 11:ok \n\nPassed all tests", include_bytes!(
|
run_blargg_test("cpu_instrs\n\n01:ok 02:ok 03:ok 04:ok 05:ok 06:ok 07:ok 08:ok 09:ok 10:ok 11:ok \n\nPassed all tests", include_bytes!(
|
||||||
"../../test-roms/blargg/cpu_instrs/cpu_instrs.gb"
|
"../../test-roms/blargg/cpu_instrs/cpu_instrs.gb"
|
||||||
),None)
|
),None)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn instr_timing() -> Result<(), String> {
|
fn instr_timing() -> anyhow::Result<()> {
|
||||||
run_blargg_test(
|
run_blargg_test(
|
||||||
"instr_timing\n\n\nPassed",
|
"instr_timing\n\n\nPassed",
|
||||||
include_bytes!("../../test-roms/blargg/instr_timing/instr_timing.gb"),
|
include_bytes!("../../test-roms/blargg/instr_timing/instr_timing.gb"),
|
||||||
|
@ -22,7 +22,7 @@ fn instr_timing() -> Result<(), String> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn mem_timing() -> Result<(), String> {
|
fn mem_timing() -> anyhow::Result<()> {
|
||||||
run_blargg_test(
|
run_blargg_test(
|
||||||
"mem_timing\n\n\nPassed",
|
"mem_timing\n\n\nPassed",
|
||||||
include_bytes!("../../test-roms/blargg/mem_timing/mem_timing.gb"),
|
include_bytes!("../../test-roms/blargg/mem_timing/mem_timing.gb"),
|
||||||
|
@ -30,11 +30,17 @@ fn mem_timing() -> Result<(), String> {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, thiserror::Error)]
|
||||||
|
enum TestError {
|
||||||
|
#[error("Timeout")]
|
||||||
|
Timeout(String),
|
||||||
|
}
|
||||||
|
|
||||||
fn run_blargg_test<const N: usize>(
|
fn run_blargg_test<const N: usize>(
|
||||||
correct_output: &str,
|
correct_output: &str,
|
||||||
rom: &[u8; N],
|
rom: &[u8; N],
|
||||||
extra_end: Option<Vec<&str>>,
|
extra_end: Option<Vec<&str>>,
|
||||||
) -> Result<(), String> {
|
) -> anyhow::Result<()> {
|
||||||
let mut emu = emulator_setup(RomFile::Raw(rom.to_vec()))?;
|
let mut emu = emulator_setup(RomFile::Raw(rom.to_vec()))?;
|
||||||
|
|
||||||
let mut end_strings = extra_end.unwrap_or_default();
|
let mut end_strings = extra_end.unwrap_or_default();
|
||||||
|
@ -54,7 +60,7 @@ fn run_blargg_test<const N: usize>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if began.elapsed() > timeout {
|
if began.elapsed() > timeout {
|
||||||
return Err(format!("Test timed out: output was {chars}"));
|
return Err(TestError::Timeout(format!("Test timed out: output was {chars}")).into());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,9 @@ pub struct TestEmulator {
|
||||||
pub serial_rx: Receiver<u8>,
|
pub serial_rx: Receiver<u8>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn emulator_setup(rom_file: RomFile) -> Result<TestEmulator, String> {
|
pub fn emulator_setup(rom_file: RomFile) -> anyhow::Result<TestEmulator> {
|
||||||
let (sender, receiver) = channel::<EmulatorMessage<[u8; 4]>>();
|
let (sender, receiver) = channel::<EmulatorMessage<[u8; 4]>>();
|
||||||
let rom = rom_file
|
let rom = rom_file.load(gb_emu_lib::connect::SramType::None)?;
|
||||||
.load(gb_emu_lib::connect::SramType::None)
|
|
||||||
.map_err(|_e| String::from("Error reading ROM: {_e:?}"))?;
|
|
||||||
let (audio_output, audio_rx) = AudioOutput::new(
|
let (audio_output, audio_rx) = AudioOutput::new(
|
||||||
48000.,
|
48000.,
|
||||||
1,
|
1,
|
||||||
|
@ -40,10 +38,8 @@ pub fn emulator_setup(rom_file: RomFile) -> Result<TestEmulator, String> {
|
||||||
include_bytes!("../../../sameboy-bootroms/dmg_boot.bin").to_vec(),
|
include_bytes!("../../../sameboy-bootroms/dmg_boot.bin").to_vec(),
|
||||||
)));
|
)));
|
||||||
|
|
||||||
let core = EmulatorCore::init(true, receiver, options);
|
let core = EmulatorCore::init(true, receiver, options)?;
|
||||||
sender
|
sender.send(EmulatorMessage::Start)?;
|
||||||
.send(EmulatorMessage::Start)
|
|
||||||
.map_err(|_e| String::from("Error sending message: {_e:?}"))?;
|
|
||||||
Ok(TestEmulator {
|
Ok(TestEmulator {
|
||||||
core,
|
core,
|
||||||
_sender: sender,
|
_sender: sender,
|
||||||
|
|
Loading…
Reference in a new issue