83 lines
2.3 KiB
Rust
83 lines
2.3 KiB
Rust
extern crate rustijvm;
|
|
|
|
use std::convert::TryInto;
|
|
|
|
fn steps(machine: &mut rustijvm::machine::Machine, num: usize) {
|
|
for _ in 0..num {
|
|
machine.step().unwrap();
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn advancedstack_100() {
|
|
let mut machine = rustijvm::machine::Machine::new_from_file("files/advanced/teststack.ijvm").unwrap();
|
|
machine.set_output(rustijvm::stubs::output_stub());
|
|
|
|
steps(&mut machine, 1);
|
|
steps(&mut machine, 2 * 100);
|
|
assert_eq!(machine.get_tos(), Ok(0x2));
|
|
}
|
|
|
|
#[test]
|
|
fn advancedstack_3000() {
|
|
let mut machine = rustijvm::machine::Machine::new_from_file("files/advanced/teststack.ijvm").unwrap();
|
|
machine.set_output(rustijvm::stubs::output_stub());
|
|
|
|
steps(&mut machine, 1);
|
|
steps(&mut machine, 2 * 3000);
|
|
assert_eq!(machine.get_tos(), Ok(0x2));
|
|
}
|
|
|
|
#[test]
|
|
fn advancedstack_50000() {
|
|
let mut machine = rustijvm::machine::Machine::new_from_file("files/advanced/teststack.ijvm").unwrap();
|
|
machine.set_output(rustijvm::stubs::output_stub());
|
|
|
|
steps(&mut machine, 1);
|
|
steps(&mut machine, 2 * 50000);
|
|
assert_eq!(machine.get_tos(), Ok(0x2));
|
|
}
|
|
|
|
#[test]
|
|
fn advancedstack_contents() {
|
|
let mut machine = rustijvm::machine::Machine::new_from_file("files/advanced/teststack.ijvm").unwrap();
|
|
machine.set_output(rustijvm::stubs::output_stub());
|
|
|
|
steps(&mut machine, 1);
|
|
steps(&mut machine, 2 * 100);
|
|
|
|
let stack = machine.cur_stack();
|
|
let size = stack.len();
|
|
assert!(size >= 100);
|
|
|
|
let markers = (0..size).filter(|i| {
|
|
stack.get(*i).try_into().unwrap_or(0) == 0x2
|
|
}).count();
|
|
assert!(markers >= 99);
|
|
}
|
|
|
|
#[test]
|
|
fn advancedstack_method() {
|
|
let mut machine = rustijvm::machine::Machine::new_from_file("files/advanced/teststack2.ijvm").unwrap();
|
|
machine.set_output(rustijvm::stubs::output_stub());
|
|
|
|
steps(&mut machine, 8);
|
|
{
|
|
let stack = machine.cur_stack();
|
|
let markers = (0..stack.len()).filter(|i| {
|
|
stack.get(*i).try_into().unwrap_or(0) == 0x2
|
|
}).count();
|
|
assert_eq!(markers, 4);
|
|
}
|
|
|
|
steps(&mut machine, 1);
|
|
steps(&mut machine, 2 * 5000);
|
|
{
|
|
let stack = machine.cur_stack();
|
|
let markers = (0..stack.len()).filter(|i| {
|
|
stack.get(*i).try_into().unwrap_or(0) == 0x2
|
|
}).count();
|
|
assert!(markers > 4000);
|
|
}
|
|
}
|