Update tests
This commit is contained in:
@@ -3,27 +3,17 @@ extern crate rustijvm;
|
||||
extern crate test;
|
||||
|
||||
use std::fs::File;
|
||||
use std::rc::Rc;
|
||||
use std::sync::Mutex;
|
||||
use std::io::{Cursor, Seek, SeekFrom, Read};
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::io::Cursor;
|
||||
use test::Bencher;
|
||||
|
||||
fn run_bfi(file: &str) -> String {
|
||||
fn run_bfi(file: &str) {
|
||||
let file = File::open(file).expect("Missing bf file");
|
||||
let rc = Rc::new(Mutex::new(Cursor::new(Vec::new())));
|
||||
let rc = Arc::new(Mutex::new(Cursor::new(Vec::new())));
|
||||
let mut machine = rustijvm::Machine::new_from_file("files/bonus/bfi.ijvm").unwrap();
|
||||
machine.set_output(rc.clone());
|
||||
machine.set_output(rc);
|
||||
machine.set_input(Box::new(file));
|
||||
|
||||
machine.run().unwrap();
|
||||
|
||||
let mut out = rc.lock().unwrap();
|
||||
let mut string = String::new();
|
||||
|
||||
out.seek(SeekFrom::Start(0)).unwrap();
|
||||
out.read_to_string(&mut string).unwrap();
|
||||
|
||||
string
|
||||
}
|
||||
|
||||
#[bench]
|
||||
|
||||
35
benches/recurse.rs
Normal file
35
benches/recurse.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
#![feature(test)]
|
||||
extern crate rustijvm;
|
||||
extern crate test;
|
||||
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::io::Cursor;
|
||||
use test::Bencher;
|
||||
|
||||
fn run_calc(input: &'static str) {
|
||||
let rc = Arc::new(Mutex::new(Cursor::new(Vec::new())));
|
||||
let mut machine = rustijvm::Machine::new_from_file("files/advanced/SimpleCalc.ijvm").unwrap();
|
||||
machine.set_output(rc);
|
||||
machine.set_input(Box::new(input.as_bytes()));
|
||||
machine.run().unwrap();
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn factorial_2(b: &mut Bencher) {
|
||||
b.iter(|| run_calc("2!?."));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn factorial_5(b: &mut Bencher) {
|
||||
b.iter(|| run_calc("5!?."));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn factorial_7(b: &mut Bencher) {
|
||||
b.iter(|| run_calc("7!?."));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn factorial_10(b: &mut Bencher) {
|
||||
b.iter(|| run_calc("10!?."));
|
||||
}
|
||||
40
tests/advanced5.rs
Normal file
40
tests/advanced5.rs
Normal file
@@ -0,0 +1,40 @@
|
||||
extern crate rustijvm;
|
||||
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::io::{Cursor, Seek, SeekFrom, Read};
|
||||
|
||||
fn run_calc(input: &'static str, expected: &str) {
|
||||
let rc = Arc::new(Mutex::new(Cursor::new(Vec::new())));
|
||||
let mut machine = rustijvm::Machine::new_from_file("files/advanced/SimpleCalc.ijvm").unwrap();
|
||||
machine.set_input(Box::new(input.as_bytes()));
|
||||
machine.set_output(rc.clone());
|
||||
machine.run().unwrap();
|
||||
|
||||
let mut out = rc.lock().unwrap();
|
||||
let mut output = String::new();
|
||||
|
||||
out.seek(SeekFrom::Start(0)).unwrap();
|
||||
out.read_to_string(&mut output).unwrap();
|
||||
|
||||
assert_eq!(output, expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn advanced5_level1() {
|
||||
run_calc("0 0 + ? .", "0\n");
|
||||
run_calc("0 9 + ? .", "9\n");
|
||||
run_calc("9 0 + ? .", "9\n");
|
||||
run_calc("9 9 - ? .", "0\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn advanced5_level2() {
|
||||
run_calc(" 5 4 -?.", "1\n");
|
||||
run_calc(" 8 8 8 - + ?.", "8\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn advanced5_level3() {
|
||||
run_calc("1 1 + 1 1 + 1 1 + 1 1 + 1 1 + +-++?.", "2\n");
|
||||
run_calc("9 8 -9 7-9 6-9 5-9 4-9 3-9 2-9 1-9 0- -+-+-+-+?.", "1\n");
|
||||
}
|
||||
35
tests/advanced6.rs
Normal file
35
tests/advanced6.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
extern crate rustijvm;
|
||||
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::io::{Cursor, Seek, SeekFrom, Read};
|
||||
|
||||
fn run_calc(input: &'static str, expected: &str) {
|
||||
let rc = Arc::new(Mutex::new(Cursor::new(Vec::new())));
|
||||
let mut machine = rustijvm::Machine::new_from_file("files/advanced/SimpleCalc.ijvm").unwrap();
|
||||
machine.set_input(Box::new(input.as_bytes()));
|
||||
machine.set_output(rc.clone());
|
||||
machine.run().unwrap();
|
||||
|
||||
let mut out = rc.lock().unwrap();
|
||||
let mut output = String::new();
|
||||
|
||||
out.seek(SeekFrom::Start(0)).unwrap();
|
||||
out.read_to_string(&mut output).unwrap();
|
||||
|
||||
assert_eq!(output, expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn advanced6_recurse1() {
|
||||
run_calc("2!?.", "2\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn advanced6_recurse2() {
|
||||
run_calc("7!?.", "5040\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn advanced6_recurse3() {
|
||||
run_calc("8!?.", "40320\n");
|
||||
}
|
||||
Reference in New Issue
Block a user