Count clocks (#19)
This commit is contained in:
@@ -8,12 +8,22 @@ mod test_computer {
|
||||
.replace("\r\n", "\n")
|
||||
.replace(" ", "")
|
||||
.replace(" \n", "\n");
|
||||
|
||||
// Chop the initial header on trace reports
|
||||
if let Some(index) = s.find(" ---") {
|
||||
s.drain(0..=index);
|
||||
}
|
||||
let first_newline = s.find('\n').unwrap();
|
||||
s.drain(0..=first_newline);
|
||||
|
||||
// Chop the 8088 section on trace reports
|
||||
if let Some(index) = s.find("\n******") {
|
||||
s.drain(index..);
|
||||
}
|
||||
s
|
||||
}
|
||||
|
||||
fn test_sim<T>(input_bytecode: T, expected_trace: &str, display_ip: bool)
|
||||
fn test_sim<T>(input_bytecode: T, expected_trace: &str, display_ip: bool, show_clock: bool)
|
||||
where
|
||||
T: AsRef<[u8]>,
|
||||
{
|
||||
@@ -41,12 +51,15 @@ mod test_computer {
|
||||
panic!("landed in middle of instruction")
|
||||
}
|
||||
Some(instruction) => {
|
||||
trace.push(computer.step(instruction, display_ip));
|
||||
let (trace_line, stop) = computer.step(instruction, display_ip, show_clock);
|
||||
trace.push(trace_line);
|
||||
if stop {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
trace.push("".to_owned());
|
||||
trace.push("Final registers:".to_owned());
|
||||
for line in computer.dump_register_state().lines() {
|
||||
trace.push(line.to_string());
|
||||
@@ -62,10 +75,11 @@ mod test_computer {
|
||||
trace.push(format!(" flags: {}", flags));
|
||||
}
|
||||
|
||||
trace.push("".to_owned());
|
||||
|
||||
let cleaned = clean_trace(expected_trace);
|
||||
let expected = cleaned.lines().collect::<Vec<_>>();
|
||||
let expected = cleaned
|
||||
.lines()
|
||||
.filter(|x| !x.is_empty())
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
assert_eq!(trace.len(), expected.len());
|
||||
|
||||
@@ -80,7 +94,7 @@ mod test_computer {
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0043_immediate_movs");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0043_immediate_movs.txt");
|
||||
test_sim(input_bytecode, expected_trace, false)
|
||||
test_sim(input_bytecode, expected_trace, false, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -89,7 +103,7 @@ mod test_computer {
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0044_register_movs");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0044_register_movs.txt");
|
||||
test_sim(input_bytecode, expected_trace, false)
|
||||
test_sim(input_bytecode, expected_trace, false, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -100,7 +114,7 @@ mod test_computer {
|
||||
let expected_trace = include_str!(
|
||||
"../../computer_enhance/perfaware/part1/listing_0045_challenge_register_movs.txt"
|
||||
);
|
||||
test_sim(input_bytecode, expected_trace, false)
|
||||
test_sim(input_bytecode, expected_trace, false, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -109,7 +123,7 @@ mod test_computer {
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0046_add_sub_cmp");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0046_add_sub_cmp.txt");
|
||||
test_sim(input_bytecode, expected_trace, false)
|
||||
test_sim(input_bytecode, expected_trace, false, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -118,7 +132,7 @@ mod test_computer {
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0047_challenge_flags");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0047_challenge_flags.txt");
|
||||
test_sim(input_bytecode, expected_trace, false)
|
||||
test_sim(input_bytecode, expected_trace, false, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -127,7 +141,7 @@ mod test_computer {
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0048_ip_register");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0048_ip_register.txt");
|
||||
test_sim(input_bytecode, expected_trace, true)
|
||||
test_sim(input_bytecode, expected_trace, true, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -137,7 +151,7 @@ mod test_computer {
|
||||
let expected_trace = include_str!(
|
||||
"../../computer_enhance/perfaware/part1/listing_0049_conditional_jumps.txt"
|
||||
);
|
||||
test_sim(input_bytecode, expected_trace, true)
|
||||
test_sim(input_bytecode, expected_trace, true, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -146,7 +160,7 @@ mod test_computer {
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0050_challenge_jumps");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0050_challenge_jumps.txt");
|
||||
test_sim(input_bytecode, expected_trace, true)
|
||||
test_sim(input_bytecode, expected_trace, true, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -155,7 +169,7 @@ mod test_computer {
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0051_memory_mov");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0051_memory_mov.txt");
|
||||
test_sim(input_bytecode, expected_trace, true)
|
||||
test_sim(input_bytecode, expected_trace, true, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -164,7 +178,7 @@ mod test_computer {
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0052_memory_add_loop");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0052_memory_add_loop.txt");
|
||||
test_sim(input_bytecode, expected_trace, true)
|
||||
test_sim(input_bytecode, expected_trace, true, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -175,7 +189,7 @@ mod test_computer {
|
||||
let expected_trace = include_str!(
|
||||
"../../computer_enhance/perfaware/part1/listing_0053_add_loop_challenge.txt"
|
||||
);
|
||||
test_sim(input_bytecode, expected_trace, true)
|
||||
test_sim(input_bytecode, expected_trace, true, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -184,7 +198,7 @@ mod test_computer {
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0054_draw_rectangle");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0054_draw_rectangle.txt");
|
||||
test_sim(input_bytecode, expected_trace, true)
|
||||
test_sim(input_bytecode, expected_trace, true, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -195,6 +209,80 @@ mod test_computer {
|
||||
let expected_trace = include_str!(
|
||||
"../../computer_enhance/perfaware/part1/listing_0055_challenge_rectangle.txt"
|
||||
);
|
||||
test_sim(input_bytecode, expected_trace, true)
|
||||
test_sim(input_bytecode, expected_trace, true, false)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_estimating_cycles() {
|
||||
let input_bytecode =
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0056_estimating_cycles");
|
||||
let expected_trace = include_str!(
|
||||
"../../computer_enhance/perfaware/part1/listing_0056_estimating_cycles.txt"
|
||||
);
|
||||
test_sim(input_bytecode, expected_trace, true, true)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_challenge_cycles() {
|
||||
let input_bytecode =
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0057_challenge_cycles");
|
||||
let expected_trace = include_str!(
|
||||
"../../computer_enhance/perfaware/part1/listing_0057_challenge_cycles.txt"
|
||||
);
|
||||
test_sim(input_bytecode, expected_trace, true, true)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_single_scalar() {
|
||||
let input_bytecode =
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0059_SingleScalar");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0059_SingleScalar.txt");
|
||||
test_sim(input_bytecode, expected_trace, true, true)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_unroll2_scalar() {
|
||||
let input_bytecode =
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0060_Unroll2Scalar");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0060_Unroll2Scalar.txt");
|
||||
test_sim(input_bytecode, expected_trace, true, true)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_dual_scalar() {
|
||||
let input_bytecode =
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0061_DualScalar");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0061_DualScalar.txt");
|
||||
test_sim(input_bytecode, expected_trace, true, true)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_quad_scalar() {
|
||||
let input_bytecode =
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0062_QuadScalar");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0062_QuadScalar.txt");
|
||||
test_sim(input_bytecode, expected_trace, true, true)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_quad_scalar_ptr() {
|
||||
let input_bytecode =
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0063_QuadScalarPtr");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0063_QuadScalarPtr.txt");
|
||||
test_sim(input_bytecode, expected_trace, true, true)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_tree_scalar_ptr() {
|
||||
let input_bytecode =
|
||||
include_bytes!("../../computer_enhance/perfaware/part1/listing_0064_TreeScalarPtr");
|
||||
let expected_trace =
|
||||
include_str!("../../computer_enhance/perfaware/part1/listing_0064_TreeScalarPtr.txt");
|
||||
test_sim(input_bytecode, expected_trace, true, true)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user