1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 // See Notices.txt for copyright information
4 use power_instruction_analyzer::{
5 Instr, InstructionInput, InstructionInputRegister, TestCase, WholeTest,
8 const TEST_VALUES: &[u64] = &[
12 0xFFFF_FFFF_FFFF_FFFF,
13 0xFFFF_FFFF_FFFF_FFFE,
14 0x7FFF_FFFF_FFFF_FFFF,
15 0x8000_0000_0000_0000,
16 0x1234_5678_0000_0000,
17 0x1234_5678_8000_0000,
18 0x1234_5678_FFFF_FFFF,
19 0x1234_5678_7FFF_FFFF,
23 mut inputs: InstructionInput,
24 input_registers: &[InstructionInputRegister],
25 f: &mut impl FnMut(InstructionInput),
27 if let Some((&input_register, input_registers)) = input_registers.split_first() {
28 for &i in TEST_VALUES {
29 inputs[input_register] = i;
30 call_with_inputs(inputs, input_registers, f);
38 let mut test_cases = Vec::new();
39 let mut any_model_mismatch = false;
40 for &instr in Instr::VALUES {
47 instr.get_used_input_registers(),
49 let model_outputs = instr.get_model_fn()(inputs);
50 #[cfg(feature = "native_instrs")]
51 let native_outputs = Some(instr.get_native_fn()(inputs));
52 #[cfg(not(feature = "native_instrs"))]
53 let native_outputs = None;
54 let model_mismatch = match native_outputs {
55 Some(native_outputs) if native_outputs != model_outputs => true,
58 any_model_mismatch |= model_mismatch;
59 test_cases.push(TestCase {
69 let whole_test = WholeTest {
73 serde_json::to_writer_pretty(std::io::stdout().lock(), &whole_test).unwrap();