Add tests for task 1 and 2

This commit is contained in:
2018-05-22 01:42:28 +02:00
parent 2a37620224
commit a65ab6aafa
9 changed files with 311 additions and 0 deletions

View File

@@ -0,0 +1,106 @@
````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
`````````````````````````````````````````````````````````````````/``````````````````````````````````````````````````````````````
````````````````````````````````````````````````````````````````/[``````````````````````````````````````````````````````````````
```````````````````````````````````````````````````````````````/-]>`````````````````````````````````````````````````````````````
```````````````````````````````````````````````````````````````/[-/`````````````````````````````````````````````````````````````
``````````````````````````````````````````````````````````````;]@@@<````````````````````````````````````````````````````````````
``````````````````````````````````````````````````````````````>++++;````````````````````````````````````````````````````````````
`````````````````````````````````````````````````````````````/++/;++;```````````````````````````````````````````````````````````
````````````````````````````````````````````````````````````//+[@@@@</``````````````````````````````````````````````````````````
````````````````````````````````````````````````````````````;;+++++++/``````````````````````````````````````````````````````````
```````````````````````````````````````````````````````````;;;;//;/++@>`````````````````````````````````````````````````````````
``````````````````````````````````````````````````````````//-;;;;;]@@@<`````````````````````````````````````````````````````````
``````````````````````````````````````````````````````````/----@@@@@@@@.````````````````````````````````````````````````````````
`````````````````````````````````````````````````````````>++++++[@@@@@@<````````````````````````````````````````````````````````
`````````````````````````````````````````````````````````;+;;;;/;/;;;;++/```````````````````````````````````````````````````````
````````````````````````````````````````````````````````/+;;;;;;;;/;;;++>```````````````````````````````````````````````````````
```````````````````````````````````````````````````````/-]@<;;--@@@@@@@@@.``````````````````````````````````````````````````````
```````````````````````````````````````````````````````>++++[@@@@@@@@@@@@</`````````````````````````````````````````````````````
``````````````````````````````````````````````````````;----@@>;;;;;;-]@@@</`````````````````````````````````````````````````````
`````````````````````````````````````````````````````/++@.>;;;;;;;;;;;;;/++/````````````````````````````````````````````````````
`````````````````````````````````````````````````````;++/;;;;;;;//;;;;/;;[@<````````````````````````````````````````````````````
````````````````````````````````````````````````````/++;;;;;/;;++@@>;//;-]<;/```````````````````````````````````````````````````
```````````````````````````````````````````````````/;+@@@@@@@@@@@@@@@@@@@@@@.```````````````````````````````````````````````````
```````````````````````````````````````````````````>+++++[@@@@@@<;;;-----@@@@>``````````````````````````````````````````````````
``````````````````````````````````````````````````/-]@</;//;;/;;/;;;;;;/;;;;;;``````````````````````````````````````````````````
``````````````````````````````````````````````````;-;;;;;;///;;/;;;;;;;;;;;;/;/`````````````````````````````````````````````````
`````````````````````````````````````````````````/--/;;;;;;;/;;/;;//;/;;;;;;;-;/````````````````````````````````````````````````
````````````````````````````````````````````````/-@@.>;/;;/;;++/;;/;+//;;;///+[<````````````````````````````````````````````````
````````````````````````````````````````````````++++@@@@@@>;-]@<;/;+@.>;++;;/++;/```````````````````````````````````````````````
```````````````````````````````````````````````;[@@@@</++;/;;;;;/;/////;;;;;/++>;```````````````````````````````````````````````
``````````````````````````````````````````````/-]@<///;;/;;;;///;;;;/;;/;/;;--@@.;``````````````````````````````````````````````
``````````````````````````````````````````````/+@.;/;;;;;;;;;;;;;//;-.;;/;;/@@@@;/``````````````````````````````````````````````
`````````````````````````````````````````````/@@@//;/;;/;;;;/;/;;;;/;@;;;;;;;;;@@/;`````````````````````````````````````````````
`````````````````````````````````````````````;@@@@@@@@@@@@@@@@@@@@;/;@@@;;;;;/;;@@;`````````````````````````````````````````````
````````````````````````````````````````````/;@@@@@@@@@@@@@@@/;/;;;;;@@//;@@@@;;@@;;````````````````````````````````````````````
```````````````````````````````````````````/;;;/;//////;//;/;;;;//;;///;//@@@@/;@@@;````````````````````````````````````````````
```````````````````````````````````````````/;//;/;@@@@/;;;/;;;;//;///;;;;;;;///@@@@@/```````````````````````````````````````````
``````````````````````````````````````````/@@@@@@@@@@;/;;;/;;;;;/;;////;;;/;;;;;;@@@//``````````````````````````````````````````
`````````````````````````````````````````/@@@@@@;//;/;/;;@@@/;;@@@;/;@@@@@/;;;;/;//@;;``````````````````````````````````````````
`````````````````````````````````````````@@@//;;;;;;@;/;/@@@;;;@@;/;;@@@@@///@@@;;;/@;/`````````````````````````````````````````
````````````````````````````````````````/@@/;/;@@@@@@@////;;/;;/;;;;;//;;;//@@@@@;;/@@/`````````````````````````````````````````
```````````````````````````````````````/;@@@@@@@@@@;//;;;/;;/;;;;//;;;;;/;;;@;/;@;;;@@@/````````````````````````````````````````
```````````````````````````````````````/@@@@@@@/;;//@@@@@@@;@@@@@@/;;;/;;;@@/;;;/@@@@@@;````````````````````````````````````````
``````````````````````````````````````/@@@;/@;//;@@@@@@@@@@@@@@@@@@@@@@@@@@@/;;;;@@@@@@@;```````````````````````````````````````
``````````````````````````````````````;@/;@@;/;@@@@@@@@@@;;@@@@@@;///;@@@@@@@;;;@@@/;;@@//``````````````````````````````````````
`````````````````````````````````````/;@@@@;/@@@@@@@@@@;;@@@@@;;;@@@@@@@@@@@@@@@@@@@;/;@@;``````````````````````````````````````
````````````````````````````````````;//@@@;;@@@@@@@@;/;;@@@@;/;@@@@@@@@@@@@@@@@@@@@@@@/;;;/`````````````````````````````````````
````````````````````````````````````;@@;;/@@@@@@@@;///;;@;//;/@@@@;;/;;@@@@@@@@@@@@@@@;//@;`````````````````````````````````````
```````````````````````````````````/@@@@@@@@@@@@//;@@/;;/;;;;;;/;/;/;;@@@@@@@;;//;//@@@;@@;/````````````````````````````````````
``````````````````````````````````/;@@@@@@@@@;;;/;;;;;;;;;;;;/;;;;///@@;/;;;;//@@@@@@@@//@@/````````````````````````````````````
``````````````````````````````````/@@@@@@@@@/;;@;;/;/;;@;;;;;;/;;/;/@@//;;;;;/@@@@@@/;//@@@@/```````````````````````````````````
`````````````````````````````````/@@@@@@@@@@;;@@/;;;/;;;;;;;;@;;//;@@/;;;;;;;@@;/@@@@@@@@@@@@```````````````````````````````````
`````````````````````````````````;@@@@@//;/;/@@@;;;;/;;//;;;////;@@@@/;///;@@@@/;;/@@@@;//@@@/``````````````````````````````````
````````````````````````````````/@;/@@@@@;;;;@;;;;/;/@@@@@@@@@@@@@@@@@;/;@@@//;;/;/@@;//@@@@@;``````````````````````````````````
```````````````````````````````/@@//@@@@@@;@@//;;@@@@@@@@;;/@@@@;;;;@@@@@@@@;;/@@@@@@/;;@@@@@@/`````````````````````````````````
```````````````````````````````@@@@@@//@@@@@@@@@@@@@@@@;;;;;@@@/;;@;//@@@@@@@//@@@@;/;;;;@@@@@//````````````````````````````````
``````````````````````````````;@@@@@@@@@@@@@@@@@;/;;/;;;;/;@@;;///@@@@@@@@@@@@@@@/;/;;@@@@@/;@@/````````````````````````````````
`````````````````````````````//;;@@@@@@@/;@@;;;;@@;;;/;;;;;;;//;/;;;;@@@@@@@@@@@@;;;;@@@@@;;@@@;/```````````````````````````````
`````````````````````````````;@@@@@;@@@@@@;;;;;/;@///;;;;;;;;;;/;;;/;;/;/;@@@@///@@@@@//@@@@@@@@/```````````````````````````````
````````````````````````````/;@@@@@//@@@@//@@/;//;;;;;;;;;;;;;;;;;;/;/;;;;;/@@@@/@@@@/;;@@@@@@@@//``````````````````````````````
```````````````````````````///;@@@@@@@@;;/;@@/;;;;;;;;;;;;;;;;;;;/;@@@;/;;//;/@@@/@@@;;;@@@@@@@@@/``````````````````````````````
```````````````````````````/;@;@@@@@@@/;/;@/;;;/;;;//;//////////;;;@@;;/;/;@@;//;;/@@@@@@@@@@@@@@@;`````````````````````````````
``````````````````````````//@@@@@@@@@;;@@;/;;;;;;/;@@@@@@@@@@@@@@@@@@@@;;;;@@@@///;@@@@@//@@@@@@@@@`````````````````````````````
``````````````````````````;@@@@@@@@@@/;;;;/;;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@;;/@@@@/;;@@@@@@@@@@@@@@@/````````````````````````````
`````````````````````````/@@;/;@@@@@@/;/;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;/;;@@@;;;@@@@@@@;;@@@@@@/```````````````````````````
````````````````````````;@@@/@@@@///;;/;@@@@@@@@@@@@@@@@@;//;@@@@@@@@@@@@@@@@;;/;@@@;/@@@@@/;;/@@@@@;```````````````````````````
````````````````````````@@@@@@@@/;/;/;@@@@@@@@@@@@@@;///;//@@@@@@@@@;@@@@@@@@@@@/;;@@//;@@@;//@@@@@@@/``````````````````````````
```````````````````````/@@@@/;;;;;@@@@@@@@@@@@@@@@@;;;;;/;@@@@@@@@@@/@@@@@@@@@@@@/;;@@@//@@@/;@@@@@@@/``````````````````````````
``````````````````````/@@@@@;/;;;@@@@@@@@@@@@;/@@@@/;;;;/;@@@@@@@@@@/@@@@@@//;@@@@@;;;@@;/@@@;/@@@@@@@/`````````````````````````
``````````````````````@@@@;;;;;;;@;@@@@@@/@@@/@@@@@;;;;;;/;@@@@@@@@@/@@@@@@@//;;@@@@;;;@@@;@@@@@@@@@@@@`````````````````````````
`````````````````````;@@@@;;;;//@@@@@@@@@/@@@@@@@@@@;;;;;;/@@@@@@@@@;@@@@@@/@@@//@@@@;;/@@@@@@@@@@@@@@@;````````````````````````
`````````````````````@@@@@@//;@@@@@@@@@@@;;@@@;@@@@@//;/;/@@@@@@@@@;@@@@@@@/;@@;;;@@@@@/;@@@@@@@@@@@@@@@````````````````````````
````````````````````/@@@@//;@@@@@@@@@@@@@;/;@@/@@@@@@;//;;@@@@@@@@@/@@@@@@;;;@@@;/@@@@@@;/;@@;//@@@@;;/@/```````````````````````
```````````````````/@@@;///@@@@@@@@@@@/@@@;;@@@/@@@;@@@;@@@@@@@@@@;/@@@@@@;/;@@;;@@@@@@@@@//@@@;/;@/;/;@@/``````````````````````
```````````````````;@@@/;;@@@@@@@@@;@@/;@@/;;@@;/@@;/@@@@@@@@@@@@@/@@@@@@@/;;@@;/@@@@@@@@@@;@@@@;;/;@@@@@;``````````````````````
``````````````````/@@@@;;/@@@@@@@@@/@@;/@@@;;;@@@/@@@;/@@@@@@@@/;/;@@@@@@;;;/@;;/@@@@@@@@@;///;/;;;@@@@@@@/`````````````````````
`````````````````/;;@@@;;;@@@@@@@@@@;;/;/@@/;;/@@@;/@@;////;//;/;;@@@@@@@/;;@@;;/@@@@@@@@;//@@;;;@@@;@@@@@/`````````````````````
`````````````````/@@/;@@//@@@@@@@@@@@@@;/@@;/;;/@@@@/;;@@;;@@;/;@@@@@@@@;;/@@;;/@@@@@@@;/;@@@;;@@@@@//;/;;/;````````````````````
````````````````/;@@/;@@@;;@@@@@@@@@@@@@/;@@;;@@@/@@@@@@@;/@@@@@@@@@@@@@/;@@;;;/@@@@@@/;;@@@/;@@@@@@@;///@@;````````````````````
```````````````//@@@;//@@@;;/;/;;@@@@@@@;/@@//;@@@@@@@@@@@;@@@@@@@@@@@/;;@@;;//@@@@@;/;/@@@/;@@@;/;@@@@@@@@@@```````````````````
```````````````/@@@/;;;/@@@@;;;;;;/@@@@@@;;@@;;;/@@@@@@@@@@@@@@@@@@@@/;/;@@/;/@@@@//;@@@@;/@@@/;;/;/;@@@@@;@@```````````````````
``````````````//@@@/;;;;;/@@@;/;@;/;;@@@@;;/@;/;;/;@@@@@@@@@@@@@@@@;;;;;@@/;;@@;;//;@@@@@@@@@/;@@@;;//;@@@@;@@``````````````````
``````````````/@@@@@////;;/@;;//@@///;@@/;/;@@/;;;//;@@@@@@@@@@@@;;/;;;@@@;;;@;//;@@@@@@@@@@@/;@@@@;/;;/;//@@@/`````````````````
`````````````/@@/;@@@@@@@@@/;;/;//;;;;;;;;@@;/@@;;;;;;/////////;;;;;;/;@@;;/;;;/@@@@//@@;@@@@;;;/;@@@;;;;/@@@@@`````````````````
````````````/;@;//;;@@@@@@;/;;//;/;;//;;;///;;/@@;;;;;;;;;;;;;;;;;;;;;;;;;;///@@@@@@;@@@//@@@/////@@@@@@@@@@@@@;````````````````
````````````;@@/;;/;/@@@//;;;@@;;;/;;;;;;;/;;/;/;;/;;;;;;;;;/;;;/;;;;;;;/@@@@@;;@@@@@@@@@@@;;/;;/@@@@@@@@@@//;@@````````````````
```````````/@@@@@;;;/@@@/;//;/;;;/@@@;;;;;/;///;///;;/;;;;;;;/;/;//;;;@@@@@@@@///;//;///;;//@//;@@@//;/@@@@;;;;@@```````````````
``````````/;@@@@@@//@@@@;;;//;;;;/;@@/;;;;;;;@@@@@@@@@@@;;;/;@@@@@@@@@@@;;//@@@;;;;;;;/;;/;@@@@;@/@/;;/;/@@@//;@@```````````````
``````````/@@//;@@;;@@;/;/@@;;;/;;;;///;;;;;;;/;;/;@@@@@@@@@@@@@@@;/;;/;/;@@@;;;;;;;@@@/;;/;;@@@@/;@@;/;/@@@@@@@@@``````````````
`````````/@@///;;@@////;;;;//;@@@///;;;;;;;;;@@/;;/;;;;//;@@@;;@@//;;;@/;;;/;///;@@@@@;;;;;;;;;@@//;/;/@@@@@@@@@@@``````````````
`````````;@@@@@@@@@@;;;;;;;;;;@@@/;/@;;;;;;;;@;;;;;;//@@;;/@;;;;@@/;;;;;///;@@@@@@@@;;;;;;;//;@@@@@@@@@@@@@@@@@@@/;`````````````
````````/@@@@@@@@@@@@@@;///;;;;;///;@@;;;;;;/;;;;;;;;/;@;;;;;;;;;;;;;/;;@@@@@@@@@///;;;/;;@@@@@@@@@@@@@////;//;@@@/`````````````
```````/@@@;/;;;@@@@@@@@@@@/;;;;;;;;@;//@@@@@@@;;;;;;;;;;;;;;;;;;;;@@@@@@@@;/;;/;/;;@@@@@@@@@@;;;//;;@@@;/;;;;;;/;;/````````````
```````/@@/;/;@@/;;;//@@@@;;/;;/;;;;/;;///;;@@@@@@@@@@@@@@@@@@@@@@@@@@;;;;//;;;@@@@@@@@@@@@@@@/;;;;/;;@@@@;///;;@@@@/```````````
``````/@@@@;//;@@;//;/;@@@//;@@@@/;///;/;/;;;/;/;/;;;/;/;;//;;;;;/;;;/;;;/;@@@@@@@@@;/;;;;;;@@@;;;;;;/@@@@@@@@@@@@@@/```````````
`````/;@@@@@@@@@@@//;;;;@@///;//;@@@@@@@@@@;;;////;;;////////;//;;@@;;@@@@@@@@@@;;;;;;/;;;;/;@@@@@@;@@@@@@@@@@@;/;/;/;``````````
`````;/@@@@@@@@@@@@@@@@@/;;;;;;;;;/;@;/;/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;;/;///;/;/;;;;;;/;;@@@@@@@@@@@@;@@@@@@@/;;;/;@``````````
````;;//@@@;//;;;@@@@@@@;;;;;;/;;;/;;//;;;/////;;;;;@@@@@@@@@;;;//;/;;;;;;;;;;;;//;;;;/@@@@@@;/;;;@@@@@/;;;;//;;;;//@@@`````````
```/;;@@@@@/;/;;;/;@@@@//;;@@@;;;;;;;;;;;/;;@/;;;;;;;;//;;;;;;;/;;;///;;///@@;/;@@@@/;;@@@@@//;;;;//;@@@@///@@@/@@@@@@@`````````
```/;@@@@@@@;;;;;;;/@@@;//;@;;;@@@@/;/;;;;;;/;;/;;;;;;;@/;;/;@@;;;;@@@;;;@@@@;;;@@@;;///;//@/;;/;;//;@@@@@;/@@@;@@@@@@@;````````
``//@@@/;/@@@@@/;;;@@@@;;;;;;;;;;@@/;;;@//;;;;;;;;/;;;@@/;;;;;;;;;/@@;;/;/@;/;/;/;;/////;;/@@@//@@@@@;;;@@@@@@@;/;;@@@;;````````
``/@@@@;;;/@@@@@//@@@;/@@;;/////;;;/;;@@@;/;;;;/;;;;;;;/;;;;;;/;;/;;;;;;;;;/;;;////;@@/;;;@@@@;;@@@@;;;;;/@@@;;;;@@@@@@@@```````
`/@@@@@/@@@/;;@@;;/;/;//@@@@@@@@@@@@@@;;///@@@/;;;/@//;;@@/;;@//;;;;;/@@;;;;@@@@;;;@@@;;;@@@;/;;;/;;;;;;;;@@;;/;@@@@@@@@;/``````
;;;@@@@;@@@/;;/@@;;/;;;;;;;;/;@@/;/;@;;;;;/;@@/;;;;;;;/;;/;;;@//;;;;;;@@;;;;@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//``````
````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````

View File

@@ -0,0 +1,14 @@
++++++++++ init multiplier
[>+++++++>++++++++++>+++>+<<<<-] multiply cells 1 2 3 4 with the 10 in 0
>++. H
>+. e
+++++++.. ll
+++. o
>++. space
<<+++++++++++++++. W
>. o
+++. r
------. l
--------. d
>+. !
>. new line

27
files/task3/IFEQ1 Normal file
View File

@@ -0,0 +1,27 @@
.constant
.end-constant
.main
L1:
BIPUSH 0x05
L2:
DUP
BIPUSH 0x30
IADD
OUT
BIPUSH 0x01
ISUB
DUP
IFEQ L3
GOTO L2
L3:
BIPUSH 0x65
BIPUSH 0x6E
BIPUSH 0x6F
BIPUSH 0x64
OUT
OUT
OUT
OUT
.end-main

30
files/task3/IFLT1 Normal file
View File

@@ -0,0 +1,30 @@
.constant
.end-constant
.main
L1:
BIPUSH 0x00
IFLT L6
L2:
BIPUSH 0x01
IFLT L6
L3:
BIPUSH 0xFF
IFLT L6
L4:
BIPUSH 0x10
BIPUSH 0x11
ISUB
IFLT L6
L5:
BIPUSH 0x00
BIPUSH 0x00
BIPUSH 0x00
BIPUSH 0x00
BIPUSH 0x00
HALT
L6:
BIPUSH 0x37
HALT
.end-main

BIN
files/testmem.bin Normal file

Binary file not shown.

View File

@@ -1,3 +1,5 @@
use std::ops;
use Result;
use binread::BinReadable;
@@ -45,6 +47,14 @@ impl Block {
}
}
impl ops::Index<usize> for Block {
type Output = u8;
fn index(&self, index: usize) -> &<Self as ops::Index<usize>>::Output {
return &self.source[index];
}
}
impl BinReadable for Block {
fn get(&mut self) -> Result<u8> {
if self.pointer >= self.length {

View File

@@ -9,3 +9,5 @@ pub mod frame;
pub mod netstack;
type Result<T> = ::std::result::Result<T, &'static str>;
pub use machine::Machine;

34
tests/task1.rs Normal file
View File

@@ -0,0 +1,34 @@
extern crate rustijvm;
use rustijvm::binread::BinReadable;
#[test]
fn task1_program1() {
let machine = rustijvm::Machine::new_from_file("files/task1/program1.ijvm").unwrap();
assert_eq!(machine.block.len(), 7);
assert_eq!(machine.block[0], 0x10); // BIPUSH
assert_eq!(machine.block[2], 0x10); // BIPUSH
assert_eq!(machine.block[4], 0x60); // IADD
assert_eq!(machine.block[5], 0xFD); // OUT
}
#[test]
fn task1_program2() {
let machine = rustijvm::Machine::new_from_file("files/task1/program2.ijvm").unwrap();
assert_eq!(machine.block.len(), 16);
assert_eq!(machine.block[0], 0x0);
assert_eq!(machine.block[1], 0x13);
assert_eq!(machine.block[4], 0x59);
assert_eq!(machine.block[5], 0x13);
assert_eq!(machine.block[8], 0x60);
assert_eq!(machine.block[9], 0x13);
assert_eq!(machine.block[12], 0x60);
assert_eq!(machine.block[13], 0xFD);
assert_eq!(machine.block[14], 0x0);
}
#[test]
fn task1_program_counter() {
let machine = rustijvm::Machine::new_from_file("files/task1/program1.ijvm").unwrap();
assert_eq!(machine.get_program_counter(), 0);
}

88
tests/task2.rs Normal file
View File

@@ -0,0 +1,88 @@
extern crate rustijvm;
fn steps(machine: &mut rustijvm::Machine, num: usize) {
for _ in 0..num {
println!("step");
machine.step().unwrap();
}
}
#[test]
fn task2_simple_bipush() {
let mut machine = rustijvm::Machine::new_from_file("files/task2/TestBipush1.ijvm").unwrap();
steps(&mut machine, 1);
assert_eq!(machine.cur_stack().top(), Ok(42));
}
#[test]
fn task2_signed_bipush() {
let mut machine = rustijvm::Machine::new_from_file("files/task2/TestBipush2.ijvm").unwrap();
steps(&mut machine, 1);
assert_eq!(machine.cur_stack().top(), Ok(-42));
}
#[test]
fn task2_simple_iadd() {
let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIadd1.ijvm").unwrap();
steps(&mut machine, 3);
assert_eq!(machine.cur_stack().top(), Ok(60));
}
#[test]
fn task2_signed_iadd() {
let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIadd2.ijvm").unwrap();
steps(&mut machine, 3);
assert_eq!(machine.cur_stack().top(), Ok(-60));
}
#[test]
fn task2_simple_isub() {
let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIsub1.ijvm").unwrap();
steps(&mut machine, 3);
assert_eq!(machine.cur_stack().top(), Ok(-10));
}
#[test]
fn task2_signed_isub() {
let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIsub2.ijvm").unwrap();
steps(&mut machine, 3);
assert_eq!(machine.cur_stack().top(), Ok(10));
}
#[test]
fn task2_simple_iand() {
let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIAND1.ijvm").unwrap();
steps(&mut machine, 5);
assert_eq!(machine.cur_stack().top(), Ok(1));
}
#[test]
fn task2_simple_ior() {
let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIOR1.ijvm").unwrap();
steps(&mut machine, 5);
assert_eq!(machine.cur_stack().top(), Ok(127));
}
#[test]
fn task2_swap() {
let mut machine = rustijvm::Machine::new_from_file("files/task2/TestSwap1.ijvm").unwrap();
steps(&mut machine, 1);
assert_eq!(machine.cur_stack().top(), Ok(10));
steps(&mut machine, 1);
assert_eq!(machine.cur_stack().top(), Ok(20));
steps(&mut machine, 1);
assert_eq!(machine.cur_stack().top(), Ok(10));
steps(&mut machine, 1);
assert_eq!(machine.cur_stack().top(), Ok(20));
}
#[test]
fn task2_simple_stack_operations() {
let mut machine = rustijvm::Machine::new_from_file("files/task2/TestPop1.ijvm").unwrap();
steps(&mut machine, 3);
assert_eq!(machine.cur_stack().top(), Ok(10));
steps(&mut machine, 3);
assert_eq!(machine.cur_stack().top(), Ok(50));
steps(&mut machine, 1);
assert_eq!(machine.cur_stack().top(), Ok(10));
}