From 54f3f5a0c8a499569d0f8c22ec37b8d73bb0631d Mon Sep 17 00:00:00 2001 From: Dan Dore Date: Tue, 7 May 2024 16:46:45 -0700 Subject: [PATCH] adds tests for loadfp instruction --- basic/tests/test_prover.rs | 41 +++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/basic/tests/test_prover.rs b/basic/tests/test_prover.rs index 611616a..13bc758 100644 --- a/basic/tests/test_prover.rs +++ b/basic/tests/test_prover.rs @@ -7,7 +7,7 @@ use valida_alu_u32::lt::{Lt32Instruction, Lte32Instruction, Sle32Instruction, Sl use valida_basic::BasicMachine; use valida_cpu::{ BeqInstruction, BneInstruction, Imm32Instruction, JalInstruction, JalvInstruction, - MachineWithCpuChip, StopInstruction, + LoadFpInstruction, MachineWithCpuChip, StopInstruction, }; use valida_machine::{ FixedAdviceProvider, Instruction, InstructionWord, Machine, MachineProof, Operands, ProgramROM, @@ -378,6 +378,29 @@ fn signed_inequality_program() -> Vec() -> Vec> { + let mut program = vec![]; + // loadfp 4(fp), 0, 0, 0, 0 + // loadfp 8(fp), 3, 0, 0, 0 + // stop + program.extend([ + InstructionWord { + opcode: , Val>>::OPCODE, + operands: Operands([4, 0, 0, 0, 0]), + }, + InstructionWord { + opcode: , Val>>::OPCODE, + operands: Operands([8, 3, 0, 0, 0]), + }, + InstructionWord { + opcode: , Val>>::OPCODE, + operands: Operands::default(), + }, + ]); + + program +} + fn prove_program(program: Vec>) -> BasicMachine { let mut machine = BasicMachine::::default(); let rom = ProgramROM::new(program); @@ -584,3 +607,19 @@ fn prove_signed_inequality() { Word([0, 0, 0, 0]) // 0xFFFFFFFF < 1 (false) ); } + +#[test] +fn prove_loadfp() { + let program = loadfp_program::(); + + let machine = prove_program(program); + + assert_eq!( + *machine.mem().cells.get(&(0x1000 + 4)).unwrap(), + Word([0, 0, 16, 0]) // fp = 0x1000 = (0, 0, 16, 0) + ); + assert_eq!( + *machine.mem().cells.get(&(0x1000 + 8)).unwrap(), + Word([0, 0, 16, 3]) // fp(3) = 0x1003 = (0, 0, 16, 0) + ); +}