aboutsummaryrefslogtreecommitdiff
path: root/src/urm_test.ml
diff options
context:
space:
mode:
Diffstat (limited to 'src/urm_test.ml')
-rw-r--r--src/urm_test.ml160
1 files changed, 27 insertions, 133 deletions
diff --git a/src/urm_test.ml b/src/urm_test.ml
index bf620e0..c64da3b 100644
--- a/src/urm_test.ml
+++ b/src/urm_test.ml
@@ -4,148 +4,42 @@
4 *) 4 *)
5 5
6open Common 6open Common
7open Instptr 7open Main
8open Parser
8open Urm 9open Urm
9open Reg 10open Reg
10open Kaputt.Abbreviations 11open Kaputt
12
13let run_urm_prgm filename regs =
14 let prgm = read_prgm (urm_program_of_lex) filename
15 in urm_mk prgm regs |> urm_run
11 16
12let () = 17let () =
13 Test.add_simple_test 18 Test.add_simple_test
14 ~title:"example_urm_add_program" 19 ~title:"example_urm_add"
15 (fun () -> 20 (fun () ->
16 let input_prgm = [ 21 let output = run_urm_prgm "../examples/add.urm" [Reg(1, 5); Reg(2, 3)]
17 URMZero 0; 22 in Assertion.equal (regs_get output 1) (5 + 3))
18 URMZero 3;
19 URMJump (1, 3, 6);
20 URMSucc 0;
21 URMSucc 3;
22 URMJump (3, 3, 2);
23 URMZero 3;
24 URMJump (2, 3, 11);
25 URMSucc 0;
26 URMSucc 3;
27 URMJump (3, 3, 7)]
28 and input_regs = [
29 Reg (1, 2);
30 Reg (2, 3)]
31 and expected_urm = {
32 instptr = InstPtr ([], [
33 (0, URMZero 0);
34 (1, URMZero 3);
35 (2, URMJump (1, 3, 6));
36 (3, URMSucc 0);
37 (4, URMSucc 3);
38 (5, URMJump (3, 3, 2));
39 (6, URMZero 3);
40 (7, URMJump (2, 3, 11));
41 (8, URMSucc 0);
42 (9, URMSucc 3);
43 (10, URMJump (3, 3, 7))]);
44 regs = [
45 Reg (1, 2);
46 Reg (2, 3)]}
47 and expected_output = [
48 Reg (0, 5);
49 Reg (1, 2);
50 Reg (2, 3);
51 Reg (3, 3)]
52 in let output_prgm = urm_mk input_prgm input_regs
53 in let output_regs = urm_run output_prgm
54 in
55 Assert.is_true (output_prgm = expected_urm);
56 Assert.is_true ((regs_sort output_regs) = expected_output))
57 23
58let () = 24let () =
59 Test.add_simple_test 25 Test.add_simple_test
60 ~title:"example_urm_factorial_program" 26 ~title:"example_urm_factorial"
61 (fun () -> 27 (fun () ->
62 let input_prgm = [ 28 let output = run_urm_prgm "../examples/factorial.urm" [Reg(1, 5)]
63 URMZero 4; 29 in Assertion.equal (regs_get output 1) 120)
64 URMJump (1, 4, 4);
65 URMZero 8;
66 URMJump (8, 8, 7);
67 URMSucc 1;
68 URMZero 9;
69 URMJump (9, 9, 29);
70 URMCopy (2, 1);
71 URMZero 1;
72 URMSucc 1;
73 URMZero 3;
74 URMSucc 3;
75 URMCopy (5, 1);
76 URMZero 1;
77 URMZero 6;
78 URMJump (3, 6, 25);
79 URMZero 7;
80 URMJump (5, 7, 22);
81 URMSucc 1;
82 URMSucc 7;
83 URMZero 10;
84 URMJump (10, 10, 17);
85 URMSucc 6;
86 URMZero 11;
87 URMJump (11, 11, 15);
88 URMJump (2, 3, 29);
89 URMSucc 3;
90 URMZero 12;
91 URMJump (12, 12, 12);
92 URMZero 13;
93 URMJump (13, 13, 38)]
94 and input_regs = [
95 Reg (1, 5)]
96 and expected_urm = {
97 instptr = InstPtr ([], [
98 (0, URMZero 4);
99 (1, URMJump (1, 4, 4));
100 (2, URMZero 8);
101 (3, URMJump (8, 8, 7));
102 (4, URMSucc 1);
103 (5, URMZero 9);
104 (6, URMJump (9, 9, 29));
105 (7, URMCopy (2, 1));
106 (8, URMZero 1);
107 (9, URMSucc 1);
108 (10, URMZero 3);
109 (11, URMSucc 3);
110 (12, URMCopy (5, 1));
111 (13, URMZero 1);
112 (14, URMZero 6);
113 (15, URMJump (3, 6, 25));
114 (16, URMZero 7);
115 (17, URMJump (5, 7, 22));
116 (18, URMSucc 1);
117 (19, URMSucc 7);
118 (20, URMZero 10);
119 (21, URMJump (10, 10, 17));
120 (22, URMSucc 6);
121 (23, URMZero 11);
122 (24, URMJump (11, 11, 15));
123 (25, URMJump (2, 3, 29));
124 (26, URMSucc 3);
125 (27, URMZero 12);
126 (28, URMJump (12, 12, 12));
127 (29, URMZero 13);
128 (30, URMJump (13, 13, 38))]);
129 regs = [
130 Reg (1, 5)]}
131 and expected_output = [
132 Reg (1, 120);
133 Reg (2, 5);
134 Reg (3, 5);
135 Reg (4, 0);
136 Reg (5, 24);
137 Reg (6, 5);
138 Reg (7, 24);
139 Reg (8, 0);
140 Reg (10, 0);
141 Reg (11, 0);
142 Reg (12, 0);
143 Reg (13, 0)]
144 in let output_prgm = urm_mk input_prgm input_regs
145 in let output_regs = urm_run output_prgm
146 in
147 Assert.is_true (output_prgm = expected_urm);
148 Assert.is_true ((regs_sort output_regs) = expected_output))
149 30
150let () = if Array.mem "run-tests" Sys.argv then Test.launch_tests () 31let () =
32 Test.add_simple_test
33 ~title:"example_urm_sum_first_integers"
34 (fun () ->
35 let output = run_urm_prgm "../examples/sum-first-integers.urm" [Reg(1, 51)]
36 in Assertion.equal (regs_get output 1) (51*(51+1)/2))
151 37
38let () =
39 Test.add_simple_test
40 ~title:"example_urm_sum_first_odd_integers"
41 (fun () ->
42 let output = run_urm_prgm "../examples/sum-first-odd-integers.urm" [Reg(1, 51)]
43 in Assertion.equal (regs_get output 1) 676)
44
45let () = if Array.mem "run-tests" Sys.argv then Test.launch_tests ()