Files
RustIJVM/tests/advancedstack.rs
2018-05-23 13:40:24 +02:00

70 lines
1.8 KiB
Rust

extern crate rustijvm;
fn steps(machine: &mut rustijvm::Machine, num: usize) {
for _ in 0..num {
machine.step().unwrap();
}
}
#[test]
fn advancedstack_100() {
let mut machine = rustijvm::Machine::new_from_file("files/advanced/teststack.ijvm").unwrap();
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::new_from_file("files/advanced/teststack.ijvm").unwrap();
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::new_from_file("files/advanced/teststack.ijvm").unwrap();
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::new_from_file("files/advanced/teststack.ijvm").unwrap();
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) == 0x2 }).count();
assert!(markers >= 99);
}
#[test]
fn advancedstack_method() {
let mut machine = rustijvm::Machine::new_from_file("files/advanced/teststack2.ijvm").unwrap();
steps(&mut machine, 8);
{
let stack = machine.cur_stack();
let markers = (0..stack.len()).filter(|i| { stack.get(*i) == 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) == 0x2 }).count();
assert!(markers > 4000);
}
}