Skip to content

Commit 1389df5

Browse files
Add more tests and fix logic for 88->94
1 parent 5d23601 commit 1389df5

File tree

2 files changed

+54
-15
lines changed

2 files changed

+54
-15
lines changed

src/load_file.rs

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ impl Modifier {
6868
match opcode {
6969
Mov | Cmp | Seq | Sne => Modifier::I,
7070
Slt => Modifier::B,
71-
Add | Sub | Mul | Div | Mod => Modifier::B,
71+
Add | Sub | Mul | Div | Mod => Modifier::F,
7272
_ => unreachable!(),
7373
}
7474
}
@@ -221,6 +221,7 @@ mod tests {
221221
use itertools::iproduct;
222222

223223
use super::*;
224+
use Opcode::*;
224225

225226
#[test]
226227
fn default_instruction() {
@@ -241,7 +242,7 @@ mod tests {
241242
}
242243

243244
#[test]
244-
fn dat_default_88_to_94() {
245+
fn dat_default() {
245246
for (&a_mode, &b_mode) in iproduct!(AddressMode::iter_values(), AddressMode::iter_values())
246247
{
247248
assert_eq!(
@@ -252,10 +253,9 @@ mod tests {
252253
}
253254

254255
#[test]
255-
fn modifier_b_default_88_to_94() {
256-
use Opcode::*;
257-
256+
fn modifier_b_default() {
258257
let opcodes = [Mov, Cmp, Seq, Sne];
258+
259259
for (&opcode, &a_mode) in iproduct!(opcodes.iter(), AddressMode::iter_values()) {
260260
if a_mode != AddressMode::Immediate {
261261
assert_eq!(
@@ -266,14 +266,11 @@ mod tests {
266266
}
267267

268268
let opcodes = [Add, Sub, Mul, Div, Mod];
269-
for (&opcode, &a_mode, &b_mode) in iproduct!(
270-
opcodes.iter(),
271-
AddressMode::iter_values(),
272-
AddressMode::iter_values()
273-
) {
269+
270+
for (&opcode, &a_mode) in iproduct!(opcodes.iter(), AddressMode::iter_values()) {
274271
if a_mode != AddressMode::Immediate {
275272
assert_eq!(
276-
Modifier::default_88_to_94(opcode, a_mode, b_mode),
273+
Modifier::default_88_to_94(opcode, a_mode, AddressMode::Immediate),
277274
Modifier::B
278275
);
279276
}
@@ -290,6 +287,7 @@ mod tests {
290287
}
291288

292289
let opcodes = [Jmp, Jmz, Jmn, Djn, Spl, Nop];
290+
293291
for (&opcode, &a_mode, &b_mode) in iproduct!(
294292
opcodes.iter(),
295293
AddressMode::iter_values(),
@@ -303,9 +301,7 @@ mod tests {
303301
}
304302

305303
#[test]
306-
fn modifier_ab_default_88_to_94() {
307-
use Opcode::*;
308-
304+
fn modifier_ab_default() {
309305
let opcodes = [Mov, Cmp, Seq, Sne, Add, Sub, Mul, Div, Mod, Slt];
310306

311307
for (&opcode, &b_mode) in iproduct!(opcodes.iter(), AddressMode::iter_values()) {
@@ -316,5 +312,39 @@ mod tests {
316312
}
317313
}
318314

319-
// TODO Mode I
315+
#[test]
316+
fn modifier_i_default() {
317+
let opcodes = [Mov, Cmp, Seq, Sne];
318+
319+
for (&opcode, &a_mode, &b_mode) in iproduct!(
320+
opcodes.iter(),
321+
AddressMode::iter_values(),
322+
AddressMode::iter_values()
323+
) {
324+
if a_mode != AddressMode::Immediate && b_mode != AddressMode::Immediate {
325+
assert_eq!(
326+
Modifier::default_88_to_94(opcode, a_mode, b_mode),
327+
Modifier::I
328+
);
329+
}
330+
}
331+
}
332+
333+
#[test]
334+
fn modifier_f_default() {
335+
let opcodes = [Add, Sub, Mul, Div, Mod];
336+
337+
for (&opcode, &a_mode, &b_mode) in iproduct!(
338+
opcodes.iter(),
339+
AddressMode::iter_values(),
340+
AddressMode::iter_values()
341+
) {
342+
if a_mode != AddressMode::Immediate && b_mode != AddressMode::Immediate {
343+
assert_eq!(
344+
Modifier::default_88_to_94(opcode, a_mode, b_mode),
345+
Modifier::F
346+
);
347+
}
348+
}
349+
}
320350
}

src/util.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,13 @@ mod tests {
9393
Err("No variant 'Should fail' found for enum 'Foo'".to_owned())
9494
);
9595
}
96+
97+
#[test]
98+
fn iter_values() {
99+
let values_from_iter: Vec<Foo> = Foo::iter_values().cloned().collect();
100+
assert_eq!(
101+
values_from_iter,
102+
vec![Foo::Bar, Foo::Baz, Foo::SomethingElse]
103+
);
104+
}
96105
}

0 commit comments

Comments
 (0)