use min_infmachine_lltk::*;
#[test]
fn test_try_into_from_pair() {
for bits in 8..32 {
for i0 in 0..16u8 {
for i1 in 0..16u8 {
let instr =
MinInfInstr::new(i0.try_into().unwrap(), i1.try_into().unwrap(), 121, 237);
let pair = (((i0 as u64) << bits) | 121, ((i1 as u64) << bits) | 237);
assert_eq!(
Ok(pair),
instr.try_into_pair(bits).map_err(|e| e.to_string()),
);
assert_eq!(
Ok(instr),
MinInfInstr::try_from_pair(pair, bits).map_err(|e| e.to_string()),
);
}
}
}
for bits in 8..16 {
for i0 in 0..16u8 {
for i1 in 0..16u8 {
let instr = MinInfInstr::new(
i0.try_into().unwrap(),
i1.try_into().unwrap(),
133121,
1441237,
);
assert_eq!(
Err("NextFr0 overflow: 133121".to_string()),
instr.try_into_pair::<u64>(bits).map_err(|e| e.to_string()),
);
}
}
}
for bits in 8..16 {
for i0 in 0..16u8 {
for i1 in 0..16u8 {
let instr =
MinInfInstr::new(i0.try_into().unwrap(), i1.try_into().unwrap(), 17, 1441237);
assert_eq!(
Err("NextFr1 overflow: 1441237".to_string()),
instr.try_into_pair::<u64>(bits).map_err(|e| e.to_string()),
);
}
}
}
}
#[test]
fn test_try_to_table() {
assert_eq!(
Ok(vec![
((MACH_MARF as u64) << 3) | 1,
((MACH_TBRF as u64) << 3) | 1,
((MACH_TBRF as u64) << 3) | 2,
((MACH_MRW0 as u64) << 3) | 4,
((MACH_MARW0 as u64) << 3) | 1,
0,
0,
0,
((MACH_MARF as u64) << 3) | 2,
((MACH_TBRF as u64) << 3) | 2,
((MACH_TBB as u64) << 3) | 3,
((MACH_MRW0 as u64) << 3) | 4,
((MACH_MARW0 as u64) << 3) | 0,
0,
0,
0,
]),
try_to_table::<u64>(vec![
MinInfInstr::new_func01(MINF_MARF, 1, 2),
MinInfInstr::new_func01(MINF_TBRF, 1, 2),
MinInfInstr::new(MINF_TBRF, MINF_TBB, 2, 3),
MinInfInstr::new_func01(MINF_MRW0, 4, 4),
MinInfInstr::new_func01(MINF_MARW0, 1, 0),
])
.map_err(|e| e.to_string())
);
}
#[test]
fn test_try_from_table() {
assert_eq!(
Ok(vec![
MinInfInstr::new_func01(MINF_MARF, 1, 2),
MinInfInstr::new_func01(MINF_TBRF, 1, 2),
MinInfInstr::new(MINF_TBRF, MINF_TBB, 2, 3),
MinInfInstr::new_func01(MINF_MRW0, 4, 4),
MinInfInstr::new_func01(MINF_MARW0, 1, 0),
MinInfInstr::default(),
MinInfInstr::default(),
MinInfInstr::default(),
]),
try_from_table::<u64>(vec![
((MACH_MARF as u64) << 3) | 1,
((MACH_TBRF as u64) << 3) | 1,
((MACH_TBRF as u64) << 3) | 2,
((MACH_MRW0 as u64) << 3) | 4,
((MACH_MARW0 as u64) << 3) | 1,
0,
0,
0,
((MACH_MARF as u64) << 3) | 2,
((MACH_TBRF as u64) << 3) | 2,
((MACH_TBB as u64) << 3) | 3,
((MACH_MRW0 as u64) << 3) | 4,
((MACH_MARW0 as u64) << 3) | 0,
0,
0,
0,
])
.map_err(|e| e.to_string())
);
}