Skip to content

Commit 6e34a08

Browse files
committed
fix: integration test VmState memory checker
1 parent b6e9d3e commit 6e34a08

File tree

1 file changed

+56
-2
lines changed

1 file changed

+56
-2
lines changed

extensions/native/circuit/tests/integration_test.rs

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ use openvm_stark_sdk::{
6060
};
6161
use rand::Rng;
6262
use test_log::test;
63+
use openvm_circuit::arch::VmState;
64+
use openvm_circuit::system::memory::online::LinearMemory;
6365

6466
pub fn gen_pointer<R>(rng: &mut R, len: usize) -> usize
6567
where
@@ -1136,6 +1138,51 @@ fn test_single_segment_executor_no_segmentation() {
11361138
.unwrap();
11371139
}
11381140

1141+
1142+
// #[derive(derive_new::new, CopyGetters, MutGetters, Clone)]
1143+
// pub struct VmState<F, MEM = GuestMemory> {
1144+
// #[getset(get_copy = "pub", get_mut = "pub")]
1145+
// instret: u64,
1146+
// #[getset(get_copy = "pub", get_mut = "pub")]
1147+
// pc: u32,
1148+
// pub memory: MEM,
1149+
// pub streams: Streams<F>,
1150+
// pub rng: StdRng,
1151+
// /// The public values of the PublicValuesAir when it exists
1152+
// pub(crate) custom_pvs: Vec<Option<F>>,
1153+
// #[cfg(feature = "metrics")]
1154+
// pub metrics: VmMetrics,
1155+
// }
1156+
1157+
// merkle hash n compare the memory
1158+
1159+
#[cfg(target_arch = "x86_64")]
1160+
fn compare_vm_states(
1161+
vm_state1: &VmState<BabyBear>,
1162+
vm_state2: &VmState<BabyBear>,
1163+
memory_dimensions: openvm_circuit::system::memory::dimensions::MemoryDimensions,
1164+
) {
1165+
assert_eq!(vm_state1.instret(), vm_state2.instret());
1166+
assert_eq!(vm_state1.pc(), vm_state2.pc());
1167+
use openvm_circuit::arch::hasher::poseidon2::vm_poseidon2_hasher;
1168+
use openvm_circuit::system::memory::merkle::MerkleTree;
1169+
1170+
let hasher = vm_poseidon2_hasher::<BabyBear>();
1171+
1172+
let tree1 = MerkleTree::from_memory(
1173+
&vm_state1.memory.memory,
1174+
&memory_dimensions,
1175+
&hasher
1176+
);
1177+
let tree2 = MerkleTree::from_memory(
1178+
&vm_state2.memory.memory,
1179+
&memory_dimensions,
1180+
&hasher
1181+
);
1182+
1183+
assert_eq!(tree1.root(), tree2.root(), "Memory states differ");
1184+
}
1185+
11391186
#[test]
11401187
fn test_vm_execute_metered_cost_native_chips() {
11411188
type F = BabyBear;
@@ -1145,7 +1192,7 @@ fn test_vm_execute_metered_cost_native_chips() {
11451192

11461193
let engine = TestEngine::new(FriParameters::new_for_testing(3));
11471194
let (vm, _) =
1148-
VirtualMachine::new_with_keygen(engine, NativeBuilder::default(), config).unwrap();
1195+
VirtualMachine::new_with_keygen(engine, NativeBuilder::default(), config.clone()).unwrap();
11491196

11501197
let instructions = vec![
11511198
// Field Arithmetic operations (FieldArithmeticChip)
@@ -1181,6 +1228,7 @@ fn test_vm_execute_metered_cost_native_chips() {
11811228
assert_eq!(aot_vm_state.instret(), instructions.len() as u64);
11821229
assert!(aot_cost > 0);
11831230
assert_eq!(cost, aot_cost);
1231+
compare_vm_states(&aot_vm_state, &vm_state, config.clone().system.memory_config.memory_dimensions());
11841232
}
11851233
}
11861234

@@ -1248,5 +1296,11 @@ fn test_vm_execute_metered_cost_halt() {
12481296
assert_eq!(aot_vm_state2.instret(), 1);
12491297
assert_eq!(aot_cost2, cost2);
12501298
assert!(aot_cost2 < aot_cost1);
1299+
compare_vm_states(&aot_vm_state1, &vm_state1, config.clone().system.memory_config.memory_dimensions());
1300+
compare_vm_states(&aot_vm_state2, &vm_state2, config.clone().system.memory_config.memory_dimensions());
1301+
// 0 4
1302+
//doesnt increment PC by 4
12511303
}
1252-
}
1304+
}
1305+
1306+
// include a check on the memory, to assert contents are the same as the original memory

0 commit comments

Comments
 (0)