@@ -590,6 +590,40 @@ mod verification {
590590 assert_eq ! ( bytes. as_ref( ) , copy. as_ref( ) ) ;
591591 }
592592
593+ #[ kani:: proof]
594+ #[ kani:: unwind( 16 ) ]
595+ pub fn check_pop_front_behaviour ( ) {
596+ let data: Vec < u8 > = Vec :: bounded_any :: < 16 > ( ) ;
597+ let mut bytes = Bytes :: from_source ( data. clone ( ) ) ;
598+ let snapshot = bytes. clone ( ) ;
599+
600+ if let Some ( ( expected, remainder) ) = data. split_first ( ) {
601+ let popped = bytes. pop_front ( ) . expect ( "non-empty slice" ) ;
602+ assert_eq ! ( popped, * expected) ;
603+ assert_eq ! ( bytes. as_ref( ) , remainder) ;
604+ } else {
605+ assert ! ( bytes. pop_front( ) . is_none( ) ) ;
606+ assert_eq ! ( bytes. as_ref( ) , snapshot. as_ref( ) ) ;
607+ }
608+ }
609+
610+ #[ kani:: proof]
611+ #[ kani:: unwind( 16 ) ]
612+ pub fn check_pop_back_behaviour ( ) {
613+ let data: Vec < u8 > = Vec :: bounded_any :: < 16 > ( ) ;
614+ let mut bytes = Bytes :: from_source ( data. clone ( ) ) ;
615+ let snapshot = bytes. clone ( ) ;
616+
617+ if let Some ( ( expected, remainder) ) = data. split_last ( ) {
618+ let popped = bytes. pop_back ( ) . expect ( "non-empty slice" ) ;
619+ assert_eq ! ( popped, * expected) ;
620+ assert_eq ! ( bytes. as_ref( ) , remainder) ;
621+ } else {
622+ assert ! ( bytes. pop_back( ) . is_none( ) ) ;
623+ assert_eq ! ( bytes. as_ref( ) , snapshot. as_ref( ) ) ;
624+ }
625+ }
626+
593627 #[ kani:: proof]
594628 #[ kani:: unwind( 16 ) ]
595629 pub fn check_slice_to_bytes_ok ( ) {
0 commit comments