diff options
author | pacien | 2018-05-01 01:29:33 +0200 |
---|---|---|
committer | pacien | 2018-05-01 01:29:33 +0200 |
commit | 2706214e1f9ba8c62cea26055dcc9aa46fcd0c3d (patch) | |
tree | 7c23f6a87434288bd88cdb7b7eadc867c9443281 /src/urm_test.ml | |
parent | 58e4fa622c441a9b832f0656580204a9f5b23e1d (diff) | |
download | urm-2706214e1f9ba8c62cea26055dcc9aa46fcd0c3d.tar.gz |
Add new tests
Diffstat (limited to 'src/urm_test.ml')
-rw-r--r-- | src/urm_test.ml | 160 |
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 | ||
6 | open Common | 6 | open Common |
7 | open Instptr | 7 | open Main |
8 | open Parser | ||
8 | open Urm | 9 | open Urm |
9 | open Reg | 10 | open Reg |
10 | open Kaputt.Abbreviations | 11 | open Kaputt |
12 | |||
13 | let 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 | ||
12 | let () = | 17 | let () = |
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 | ||
58 | let () = | 24 | let () = |
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 | ||
150 | let () = if Array.mem "run-tests" Sys.argv then Test.launch_tests () | 31 | let () = |
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 | ||
38 | let () = | ||
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 | |||
45 | let () = if Array.mem "run-tests" Sys.argv then Test.launch_tests () | ||