@@ -60,6 +60,8 @@ use openvm_stark_sdk::{
6060} ; 
6161use  rand:: Rng ; 
6262use  test_log:: test; 
63+ use  openvm_circuit:: arch:: VmState ; 
64+ use  openvm_circuit:: system:: memory:: online:: LinearMemory ; 
6365
6466pub  fn  gen_pointer < R > ( rng :  & mut  R ,  len :  usize )  -> usize 
6567where 
@@ -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]  
11401187fn  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