trevors_chip8_toy/gemma/tests/computer_manager.rs
2025-05-31 22:56:05 -04:00

128 lines
3.4 KiB
Rust

mod test_utils;
use std::path::Path;
use gemma::chip8::computer::Chip8Computer;
use gemma::chip8::computer_manager::Chip8ComputerManager;
use gemma::chip8::quirk_modes::QuirkMode;
use gemma::chip8::quirk_modes::QuirkMode::{Chip8, SChipModern, XOChip};
use gemma::constants::TEST_ROM_ROOT;
use crate::test_utils::load_compressed_result;
/// Tests the ComputerManager structure
#[test]
fn smoke() {
assert!(true)
}
#[test]
fn default_test() {
let new_manager = Chip8ComputerManager::default();
assert_eq!(new_manager.core_should_run, false);
assert_eq!(new_manager.num_cycles(), 0);
assert_eq!(new_manager.quirks_mode(), Chip8);
}
#[test]
fn quirks_mode_test() {
let mut new_manager = Chip8ComputerManager::default();
assert_eq!(new_manager.quirks_mode(), Chip8);
new_manager.reset(QuirkMode::XOChip);
assert_eq!(new_manager.quirks_mode(), XOChip);
new_manager.reset(QuirkMode::SChipModern);
assert_eq!(new_manager.quirks_mode(), SChipModern);
new_manager.reset(Chip8);
assert_eq!(new_manager.quirks_mode(), Chip8);
}
#[test]
fn load_rom_allows_starting() {
let mut new_manager = Chip8ComputerManager::default();
assert!(!new_manager.core_should_run);
let p = TEST_ROM_ROOT.to_string() + "/1-chip8-logo.ch8";
let full_path = Path::new(p.as_str());
new_manager.load_new_program_from_disk_to_system_memory(full_path);
assert!(new_manager.core_should_run)
}
#[test]
fn reset_clears_run_state() {
let mut new_manager = Chip8ComputerManager::default();
let p = format!(
"{}/../resources/test/roms/1-chip8-logo.ch8",
std::env::current_dir().unwrap().display()
);
new_manager.load_new_program_from_disk_to_system_memory(Path::new(p.as_str()));
new_manager.reset(QuirkMode::Chip8);
assert!(!new_manager.core_should_run);
}
#[test]
fn tick_when_ready() {
let mut new_manager = Chip8ComputerManager::default();
new_manager.load_new_program_from_disk_to_system_memory(Path::new(
format!(
"{}/../resources/test/roms/1-chip8-logo.ch8",
std::env::current_dir().unwrap().display()
)
.as_str(),
));
assert!(new_manager.core_should_run);
}
#[test]
fn start_stop_computer() {
let mut computer = Chip8ComputerManager::new();
assert_eq!(computer.core_should_run, false);
computer.start();
assert_eq!(computer.core_should_run, true);
computer.step();
assert_eq!(computer.core_should_run, true);
computer.stop();
assert_eq!(computer.core_should_run, false);
computer.reset(Chip8);
assert_eq!(computer.core_should_run, false);
}
#[test]
fn state_default_matches() {
let computer = Chip8Computer::default();
let mut manager = Chip8ComputerManager::default();
assert_eq!(computer, *manager.state());
}
#[test]
fn keys_test_manager() {
let mut manager = Chip8ComputerManager::default();
for i in 0..16 {
assert_eq!(manager.is_key_pressed(i), false);
}
// press key 5
manager.press_key(5);
assert_eq!(manager.is_key_pressed(5), true);
manager.release_key(5);
assert_eq!(manager.is_key_pressed(5), false);
}
#[test]
#[ignore]
fn status_of_manager() {
let mut manager = Chip8ComputerManager::default();
println!("MANAGER STATUS [{}]", manager.status_as_string());
let expected_state = load_compressed_result("test_manager_status");
assert_eq!(expected_state, manager.status_as_string());
}