From 03eb6d685b459a07cbeaf807f702be904ea5f882 Mon Sep 17 00:00:00 2001 From: Jur van den Berg Date: Wed, 29 May 2019 15:57:20 +0200 Subject: [PATCH] Make all tests not output anything --- src/lib.rs | 1 + src/stubs.rs | 6 ++++++ tests/advanced1.rs | 2 +- tests/advanced2.rs | 2 ++ tests/advanced3.rs | 3 +++ tests/advanced4.rs | 3 ++- tests/advanced5.rs | 8 +++++++- tests/advanced6.rs | 8 +++++++- tests/advancedstack.rs | 5 +++++ tests/bonusheap.rs | 2 +- tests/fromstring.rs | 1 + tests/task1.rs | 3 +++ tests/task2.rs | 20 ++++++++++++++++++++ tests/task3.rs | 9 +++++++++ tests/task4.rs | 6 +++++- tests/task5.rs | 5 +++++ 16 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 src/stubs.rs diff --git a/src/lib.rs b/src/lib.rs index 994c2b4..6faa5a3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,6 +11,7 @@ pub mod ops; pub mod stack; pub mod pool; pub mod frame; +pub mod stubs; #[cfg(feature = "bonus:network")] pub mod netstack; diff --git a/src/stubs.rs b/src/stubs.rs new file mode 100644 index 0000000..133149b --- /dev/null +++ b/src/stubs.rs @@ -0,0 +1,6 @@ +use std::sync::{Arc, Mutex}; +use std::io::Cursor; + +pub fn output_stub() -> Arc>>> { + Arc::new(Mutex::new(Cursor::new(Vec::new()))) +} diff --git a/tests/advanced1.rs b/tests/advanced1.rs index 42eff32..9fff3d5 100644 --- a/tests/advanced1.rs +++ b/tests/advanced1.rs @@ -11,7 +11,7 @@ fn steps(machine: &mut rustijvm::Machine, num: usize) { #[test] fn advanced1() { - let output: Arc>>> = Arc::new(Mutex::new(Cursor::new(Vec::new()))); + let output = rustijvm::stubs::output_stub(); let input = Box::new("A".as_bytes()); let mut machine = rustijvm::Machine::new_from_file("files/task5/all_regular.ijvm").unwrap(); machine.set_input(input); diff --git a/tests/advanced2.rs b/tests/advanced2.rs index 993e441..78afc3d 100644 --- a/tests/advanced2.rs +++ b/tests/advanced2.rs @@ -9,6 +9,7 @@ fn steps(machine: &mut rustijvm::Machine, num: usize) { #[test] fn advanced2_nested_invoke_simple() { let mut machine = rustijvm::Machine::new_from_file("files/advanced/test-nestedinvoke-simple.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 1); let pc_main = machine.get_program_counter() + 3; @@ -35,6 +36,7 @@ fn advanced2_nested_invoke_simple() { #[test] fn advanced2_nested_invoke() { let mut machine = rustijvm::Machine::new_from_file("files/advanced/test-nestedinvoke.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 8); assert_eq!(machine.get_tos(), Ok(0x6)); diff --git a/tests/advanced3.rs b/tests/advanced3.rs index 76e3b2d..59181e8 100644 --- a/tests/advanced3.rs +++ b/tests/advanced3.rs @@ -11,6 +11,8 @@ fn advanced3_wide1() { use rustijvm::value::Value::Int; let mut machine = rustijvm::Machine::new_from_file("files/advanced/test-wide1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 6); assert_eq!(machine.cur_frame().get(1), Ok(&Int(0x1))); steps(&mut machine, 2); @@ -26,6 +28,7 @@ fn advanced3_wide1() { fn advanced3_wide2() { use rustijvm::value::Value::Int; let mut machine = rustijvm::Machine::new_from_file("files/advanced/test-wide2.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 6); assert_eq!(machine.cur_frame().get(1), Ok(&Int(0x1))); diff --git a/tests/advanced4.rs b/tests/advanced4.rs index bf11e29..4e41eb2 100644 --- a/tests/advanced4.rs +++ b/tests/advanced4.rs @@ -5,8 +5,9 @@ use std::io::{Cursor, Seek, SeekFrom, Read}; #[test] fn advanced4_tanenbaum() { - let rc = Arc::new(Mutex::new(Cursor::new(Vec::new()))); + let rc = rustijvm::stubs::output_stub(); let mut machine = rustijvm::Machine::new_from_file("files/advanced/Tanenbaum.ijvm").unwrap(); + machine.set_output(rc.clone()); machine.run().unwrap(); diff --git a/tests/advanced5.rs b/tests/advanced5.rs index 1dcc73a..d5b4a8f 100644 --- a/tests/advanced5.rs +++ b/tests/advanced5.rs @@ -4,8 +4,9 @@ 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 rc = rustijvm::stubs::output_stub(); 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(); @@ -38,3 +39,8 @@ 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"); } + +#[test] +fn advanced5_level4() { + run_calc("2 2 2 2 2 2 2 2 2 2 2 2 2 ************ +?.", "8192\n"); +} diff --git a/tests/advanced6.rs b/tests/advanced6.rs index 8e1426a..fb65d9e 100644 --- a/tests/advanced6.rs +++ b/tests/advanced6.rs @@ -4,8 +4,9 @@ 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 rc = rustijvm::stubs::output_stub(); 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(); @@ -33,3 +34,8 @@ fn advanced6_recurse2() { fn advanced6_recurse3() { run_calc("8!?.", "40320\n"); } + +#[test] +fn advanced6_recurse4() { + run_calc("5!5+?.", "125\n"); +} diff --git a/tests/advancedstack.rs b/tests/advancedstack.rs index ee086a4..b8a0d16 100644 --- a/tests/advancedstack.rs +++ b/tests/advancedstack.rs @@ -11,6 +11,7 @@ fn steps(machine: &mut rustijvm::Machine, num: usize) { #[test] fn advancedstack_100() { let mut machine = rustijvm::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); @@ -20,6 +21,7 @@ fn advancedstack_100() { #[test] fn advancedstack_3000() { let mut machine = rustijvm::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); @@ -29,6 +31,7 @@ fn advancedstack_3000() { #[test] fn advancedstack_50000() { let mut machine = rustijvm::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); @@ -38,6 +41,7 @@ fn advancedstack_50000() { #[test] fn advancedstack_contents() { let mut machine = rustijvm::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); @@ -55,6 +59,7 @@ fn advancedstack_contents() { #[test] fn advancedstack_method() { let mut machine = rustijvm::Machine::new_from_file("files/advanced/teststack2.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 8); { diff --git a/tests/bonusheap.rs b/tests/bonusheap.rs index e3289be..5478054 100644 --- a/tests/bonusheap.rs +++ b/tests/bonusheap.rs @@ -6,7 +6,7 @@ use std::io::{Cursor, Seek, SeekFrom, Read}; fn run_bfi(file: &str) -> String { let file = File::open(file).expect("Missing bf file"); - let rc = Arc::new(Mutex::new(Cursor::new(Vec::new()))); + let rc = rustijvm::stubs::output_stub(); let mut machine = rustijvm::Machine::new_from_file("files/bonus/bfi.ijvm").unwrap(); machine.set_output(rc.clone()); machine.set_input(Box::new(file)); diff --git a/tests/fromstring.rs b/tests/fromstring.rs index b9030fd..22aeaa0 100644 --- a/tests/fromstring.rs +++ b/tests/fromstring.rs @@ -10,6 +10,7 @@ fn test_create_from_slice() { File::open("files/task1/program1.ijvm").unwrap().read_to_end(&mut vec).unwrap(); let machine = rustijvm::Machine::new_from_slice(&vec).unwrap(); + assert_eq!(machine.block.len(), 7); assert_eq!(machine.block[0], 0x10); // BIPUSH assert_eq!(machine.block[2], 0x10); // BIPUSH diff --git a/tests/task1.rs b/tests/task1.rs index ac9d1bb..7d68744 100644 --- a/tests/task1.rs +++ b/tests/task1.rs @@ -5,6 +5,7 @@ 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 @@ -15,6 +16,7 @@ fn task1_program1() { #[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); @@ -30,5 +32,6 @@ fn task1_program2() { #[test] fn task1_program_counter() { let machine = rustijvm::Machine::new_from_file("files/task1/program1.ijvm").unwrap(); + assert_eq!(machine.get_program_counter(), 0); } diff --git a/tests/task2.rs b/tests/task2.rs index cf75571..338d970 100644 --- a/tests/task2.rs +++ b/tests/task2.rs @@ -9,6 +9,8 @@ fn steps(machine: &mut rustijvm::Machine, num: usize) { #[test] fn task2_simple_bipush() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestBipush1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(42)); } @@ -16,6 +18,8 @@ fn task2_simple_bipush() { #[test] fn task2_signed_bipush() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestBipush2.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(-42)); } @@ -23,6 +27,8 @@ fn task2_signed_bipush() { #[test] fn task2_simple_iadd() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIadd1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 3); assert_eq!(machine.get_tos(), Ok(60)); } @@ -30,6 +36,8 @@ fn task2_simple_iadd() { #[test] fn task2_signed_iadd() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIadd2.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 3); assert_eq!(machine.get_tos(), Ok(-60)); } @@ -37,6 +45,8 @@ fn task2_signed_iadd() { #[test] fn task2_simple_isub() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIsub1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 3); assert_eq!(machine.get_tos(), Ok(-10)); } @@ -44,6 +54,8 @@ fn task2_simple_isub() { #[test] fn task2_signed_isub() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIsub2.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 3); assert_eq!(machine.get_tos(), Ok(10)); } @@ -51,6 +63,8 @@ fn task2_signed_isub() { #[test] fn task2_simple_iand() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIAND1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 5); assert_eq!(machine.get_tos(), Ok(1)); } @@ -58,6 +72,8 @@ fn task2_simple_iand() { #[test] fn task2_simple_ior() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIOR1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 5); assert_eq!(machine.get_tos(), Ok(127)); } @@ -65,6 +81,8 @@ fn task2_simple_ior() { #[test] fn task2_swap() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestSwap1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(10)); steps(&mut machine, 1); @@ -78,6 +96,8 @@ fn task2_swap() { #[test] fn task2_simple_stack_operations() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestPop1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 3); assert_eq!(machine.get_tos(), Ok(10)); steps(&mut machine, 3); diff --git a/tests/task3.rs b/tests/task3.rs index 206b74d..f7d6fe6 100644 --- a/tests/task3.rs +++ b/tests/task3.rs @@ -9,6 +9,8 @@ fn steps(machine: &mut rustijvm::Machine, num: usize) { #[test] fn task3_goto1() { let mut machine = rustijvm::Machine::new_from_file("files/task3/GOTO1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x31)); steps(&mut machine, 3); @@ -19,6 +21,8 @@ fn task3_goto1() { #[test] fn task3_goto2() { let mut machine = rustijvm::Machine::new_from_file("files/task3/GOTO2.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x31)); steps(&mut machine, 3); @@ -31,6 +35,7 @@ fn task3_goto2() { #[test] fn task3_ifeq1() { let mut machine = rustijvm::Machine::new_from_file("files/task3/IFEQ1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x5)); @@ -69,6 +74,8 @@ fn task3_ifeq1() { #[test] fn task3_iflt1() { let mut machine = rustijvm::Machine::new_from_file("files/task3/IFLT1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + let mut pc = 0; // L1 @@ -96,6 +103,8 @@ fn task3_iflt1() { #[test] fn task3_ificmpeq1() { let mut machine = rustijvm::Machine::new_from_file("files/task3/IFICMPEQ1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); + let mut pc = 0; // L1 diff --git a/tests/task4.rs b/tests/task4.rs index 7781e1c..f90b789 100644 --- a/tests/task4.rs +++ b/tests/task4.rs @@ -12,6 +12,7 @@ fn steps(machine: &mut rustijvm::Machine, num: usize) { #[test] fn task4_ldcw1() { let mut machine = rustijvm::Machine::new_from_file("files/task4/LoadTest1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x1)); @@ -24,6 +25,7 @@ fn task4_ldcw1() { #[test] fn task4_simple_load() { let mut machine = rustijvm::Machine::new_from_file("files/task4/LoadTest3.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x2a)); @@ -52,6 +54,7 @@ fn task4_simple_load() { #[test] fn task4_complex_load() { let mut machine = rustijvm::Machine::new_from_file("files/task4/LoadTest2.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x2a)); @@ -83,7 +86,7 @@ fn task4_complex_load() { #[test] fn task4_iteration_load() { - let rc = Arc::new(Mutex::new(Cursor::new(Vec::new()))); + let rc = rustijvm::stubs::output_stub(); let mut machine = rustijvm::Machine::new_from_file("files/task4/LoadTest4.ijvm").unwrap(); machine.set_output(rc.clone()); @@ -102,6 +105,7 @@ fn task4_iteration_load() { fn task4_iinc() { use rustijvm::value::Value::Int; let mut machine = rustijvm::Machine::new_from_file("files/task4/IINCTest.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 4); assert_eq!(machine.cur_frame().get(0), Ok(&Int(0))); diff --git a/tests/task5.rs b/tests/task5.rs index 4529afa..6ec8434 100644 --- a/tests/task5.rs +++ b/tests/task5.rs @@ -8,6 +8,7 @@ fn steps(machine: &mut rustijvm::Machine, num: usize) { #[test] fn task5_invokenoargs() { let mut machine = rustijvm::Machine::new_from_file("files/task5/TestInvokeNoArgs.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 2); assert_eq!(machine.get_tos(), Ok(0x42)); @@ -20,6 +21,7 @@ fn task5_invokenoargs() { #[test] fn task5_invoke1() { let mut machine = rustijvm::Machine::new_from_file("files/task5/test-invokevirtual1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 3); let pc = machine.get_program_counter(); @@ -33,6 +35,7 @@ fn task5_invoke1() { #[test] fn task5_ireturn1() { let mut machine = rustijvm::Machine::new_from_file("files/task5/test-invokevirtual1.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 6); assert_eq!(machine.get_tos(), Ok(0x1)); @@ -43,6 +46,7 @@ fn task5_ireturn1() { #[test] fn task5_invoke2() { let mut machine = rustijvm::Machine::new_from_file("files/task5/test-invokevirtual2.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 5); let pc = machine.get_program_counter(); @@ -58,6 +62,7 @@ fn task5_invoke2() { #[test] fn task5_ireturn2() { let mut machine = rustijvm::Machine::new_from_file("files/task5/test-invokevirtual2.ijvm").unwrap(); + machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 10); assert_eq!(machine.get_tos(), Ok(0x5));