mirror of
https://github.com/transistorfet/moa.git
synced 2025-02-17 18:30:33 +00:00
Added option to exclude or only run tests that involve an exception
This commit is contained in:
parent
03f4e11e3b
commit
c4a99245e3
@ -7,7 +7,7 @@ use std::path::PathBuf;
|
|||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
use std::fs::{self, File};
|
use std::fs::{self, File};
|
||||||
|
|
||||||
use clap::Parser;
|
use clap::{Parser, ArgEnum};
|
||||||
use flate2::read::GzDecoder;
|
use flate2::read::GzDecoder;
|
||||||
use serde_derive::Deserialize;
|
use serde_derive::Deserialize;
|
||||||
|
|
||||||
@ -19,6 +19,13 @@ use moa::devices::{Address, Addressable, Steppable, wrap_transmutable};
|
|||||||
use moa::cpus::m68k::{M68k, M68kType};
|
use moa::cpus::m68k::{M68k, M68kType};
|
||||||
use moa::cpus::m68k::state::Status;
|
use moa::cpus::m68k::state::Status;
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, PartialEq, Eq, ArgEnum)]
|
||||||
|
enum Selection {
|
||||||
|
Include,
|
||||||
|
Exclude,
|
||||||
|
Only,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
struct Args {
|
struct Args {
|
||||||
/// Filter the tests by gzip file name
|
/// Filter the tests by gzip file name
|
||||||
@ -38,6 +45,8 @@ struct Args {
|
|||||||
/// Directory to the test suite to run
|
/// Directory to the test suite to run
|
||||||
#[clap(long, default_value = DEFAULT_HART_TESTS)]
|
#[clap(long, default_value = DEFAULT_HART_TESTS)]
|
||||||
testsuite: String,
|
testsuite: String,
|
||||||
|
#[clap(long, short, arg_enum, default_value_t = Selection::Include)]
|
||||||
|
exceptions: Selection,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
@ -116,6 +125,11 @@ impl TestCase {
|
|||||||
self.final_state.dump();
|
self.final_state.dump();
|
||||||
println!("cycles: {}", self.length);
|
println!("cycles: {}", self.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_exception_case(&self) -> bool {
|
||||||
|
// If the supervisor stack changes by 6 or more bytes, then it's likely expected to be caused by an exception
|
||||||
|
self.initial_state.ssp.saturating_sub(self.final_state.ssp) >= 6
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -281,6 +295,13 @@ fn test_json_file(path: PathBuf, args: &Args) -> (usize, usize, String) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only run the test if it's selected by the exceptions flag
|
||||||
|
if case.is_exception_case() && args.exceptions == Selection::Exclude {
|
||||||
|
continue;
|
||||||
|
} else if !case.is_exception_case() && args.exceptions == Selection::Only {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Sort the ram memory for debugging help
|
// Sort the ram memory for debugging help
|
||||||
if args.debug {
|
if args.debug {
|
||||||
case.initial_state.ram.sort_by_key(|(addr, _)| *addr);
|
case.initial_state.ram.sort_by_key(|(addr, _)| *addr);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user