From 012ad2b3c060032108e224c3cdd03bf0aa05c818 Mon Sep 17 00:00:00 2001 From: pacien Date: Sat, 21 Apr 2018 14:42:22 +0200 Subject: Add factorial test program --- urm_test.ml | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/urm_test.ml b/urm_test.ml index b6018d0..bc3a0b8 100644 --- a/urm_test.ml +++ b/urm_test.ml @@ -8,6 +8,8 @@ open Instptr open Urm open Kaputt.Abbreviations +let sort_regs = List.sort (fun (Reg(l, _)) (Reg(r, _)) -> compare l r) + let () = Test.add_simple_test ~title:"example_urm_add_program" @@ -52,7 +54,99 @@ let () = in let output_regs = urm_run output_prgm in Assert.is_true (output_prgm = expected_urm); - Assert.is_true ((List.sort (fun (Reg(l, _)) (Reg(r, _)) -> compare l r) output_regs) = expected_output)) + Assert.is_true ((sort_regs output_regs) = expected_output)) + +let () = + Test.add_simple_test + ~title:"example_urm_factorial_program" + (fun () -> + let input_prgm = [ + Zero 4; + Jump (1, 4, 4); + Zero 8; + Jump (8, 8, 7); + Succ 1; + Zero 9; + Jump (9, 9, 29); + Copy (2, 1); + Zero 1; + Succ 1; + Zero 3; + Succ 3; + Copy (5, 1); + Zero 1; + Zero 6; + Jump (3, 6, 25); + Zero 7; + Jump (5, 7, 22); + Succ 1; + Succ 7; + Zero 10; + Jump (10, 10, 17); + Succ 6; + Zero 11; + Jump (11, 11, 15); + Jump (2, 3, 29); + Succ 3; + Zero 12; + Jump (12, 12, 12); + Zero 13; + Jump (13, 13, 38)] + and input_regs = [ + Reg (1, 5)] + and expected_urm = { + instptr = InstPtr ([], [ + (0, Zero 4); + (1, Jump (1, 4, 4)); + (2, Zero 8); + (3, Jump (8, 8, 7)); + (4, Succ 1); + (5, Zero 9); + (6, Jump (9, 9, 29)); + (7, Copy (2, 1)); + (8, Zero 1); + (9, Succ 1); + (10, Zero 3); + (11, Succ 3); + (12, Copy (5, 1)); + (13, Zero 1); + (14, Zero 6); + (15, Jump (3, 6, 25)); + (16, Zero 7); + (17, Jump (5, 7, 22)); + (18, Succ 1); + (19, Succ 7); + (20, Zero 10); + (21, Jump (10, 10, 17)); + (22, Succ 6); + (23, Zero 11); + (24, Jump (11, 11, 15)); + (25, Jump (2, 3, 29)); + (26, Succ 3); + (27, Zero 12); + (28, Jump (12, 12, 12)); + (29, Zero 13); + (30, Jump (13, 13, 38))]); + regs = [ + Reg (1, 5)]} + and expected_output = [ + Reg (1, 120); + Reg (2, 5); + Reg (3, 5); + Reg (4, 0); + Reg (5, 24); + Reg (6, 5); + Reg (7, 24); + Reg (8, 0); + Reg (10, 0); + Reg (11, 0); + Reg (12, 0); + Reg (13, 0)] + in let output_prgm = urm_mk input_prgm input_regs + in let output_regs = urm_run output_prgm + in + Assert.is_true (output_prgm = expected_urm); + Assert.is_true ((sort_regs output_regs) = expected_output)) let () = if Array.mem "run-tests" Sys.argv then Test.launch_tests () -- cgit v1.2.3