#![allow(clippy::unwrap_used)]
use decasm::{Instruction, Opcode};
use strum::IntoEnumIterator;
#[test]
fn instructions() {
for mut instruction in Instruction::iter() {
if instruction == Instruction::CallMachineCode(ux::u12::new(0x000)) {
instruction = Instruction::CallMachineCode(ux::u12::new(0x001));
}
let opcode = Opcode::from(instruction);
assert_eq!(instruction, Instruction::try_from(opcode).unwrap());
}
}
#[test]
fn opcodes() {
for opcode in 0x0000..=0xFFFF {
if (0x00B0..=0x00BF).contains(&opcode) {
continue;
}
let opcode = Opcode::Opcode(opcode);
if let Ok(instruction) = Instruction::try_from(opcode) {
assert_eq!(opcode, Opcode::from(instruction));
}
}
}
#[test]
fn long_opcode() {
assert_eq!(
Opcode::LongOpcode(0xF000_0000),
Opcode::from(Instruction::SetIndexLong(0x0000))
);
assert_eq!(
Instruction::try_from(Opcode::LongOpcode(0xF000_0000)).unwrap(),
Instruction::SetIndexLong(0x0000)
);
}