@@ -478,30 +478,34 @@ fn test_sha256_extend() -> Result<()> {
478478 634956631 ,
479479 ] ;
480480
481+ let mut state = VMState :: new_from_elf ( unsafe_platform ( ) , program_elf) ?;
482+ let steps = run ( & mut state) ?;
483+ let syscalls = steps. iter ( ) . filter_map ( |step| step. syscall ( ) ) . collect_vec ( ) ;
484+ assert_eq ! ( syscalls. len( ) , 48 ) ;
485+
481486 for round in 0 ..48 {
482- let mut state = VMState :: new_from_elf ( unsafe_platform ( ) , program_elf) ?;
483- let steps = run ( & mut state) ?;
484- let syscalls = steps. iter ( ) . filter_map ( |step| step. syscall ( ) ) . collect_vec ( ) ;
485- assert_eq ! ( syscalls. len( ) , 1 ) ;
486- let witness = syscalls[ 0 ] ;
487+ let witness = & syscalls[ round] ;
487488
488489 assert_eq ! ( witness. reg_ops. len( ) , 1 ) ;
489490 assert_eq ! ( witness. reg_ops[ 0 ] . register_index( ) , Platform :: reg_arg0( ) ) ;
490491
492+ assert_eq ! (
493+ witness. reg_ops[ 0 ] . value. before,
494+ witness. reg_ops[ 0 ] . value. after
495+ ) ;
491496 let state_ptr = witness. reg_ops [ 0 ] . value . before ;
492- assert_eq ! ( state_ptr + WORD_SIZE as u32 , witness. reg_ops[ 0 ] . value. after) ;
493497 let state_ptr: WordAddr = state_ptr. into ( ) ;
494498
495499 assert_eq ! ( witness. mem_ops. len( ) , 5 ) ;
496500
497- let offsets = [ - 2 , - 7 , - 15 , - 16 , 0 ] ;
501+ let offsets = [ 2 , 7 , 15 , 16 , 0 ] ;
498502 for ( i, write_op) in witness. mem_ops . iter ( ) . enumerate ( ) {
499- let mem_round_id = round + ( 16 + offsets[ i] ) as usize ;
500- assert_eq ! ( write_op. addr, state_ptr + mem_round_id as u32 ) ;
503+ let mem_addr : u32 = state_ptr . 0 - offsets[ i] as u32 ;
504+ assert_eq ! ( write_op. addr. 0 , mem_addr ) ;
501505 if i < 4 {
502506 assert_eq ! ( write_op. value. before, write_op. value. after) ;
503507 } else {
504- assert_eq ! ( write_op. value. after, expected[ mem_round_id ] ) ;
508+ assert_eq ! ( write_op. value. after, expected[ round + 16 - offsets [ i ] ] ) ;
505509 }
506510 }
507511 }
0 commit comments