@@ -609,4 +609,51 @@ mod verification {
609609 let other: [ u8 ; 4 ] = kani:: any ( ) ;
610610 assert ! ( bytes. slice_to_bytes( & other) . is_none( ) ) ;
611611 }
612+
613+ #[ kani:: proof]
614+ #[ kani:: unwind( 16 ) ]
615+ pub fn check_try_unwrap_owner_unique ( ) {
616+ let data: Vec < u8 > = Vec :: bounded_any :: < 16 > ( ) ;
617+ let bytes = Bytes :: from_source ( data. clone ( ) ) ;
618+ let recovered = bytes. try_unwrap_owner :: < Vec < u8 > > ( ) . expect ( "unwrap owner" ) ;
619+ assert_eq ! ( recovered, data) ;
620+ }
621+
622+ #[ kani:: proof]
623+ #[ kani:: unwind( 16 ) ]
624+ pub fn check_try_unwrap_owner_shared ( ) {
625+ let data: Vec < u8 > = Vec :: bounded_any :: < 16 > ( ) ;
626+ let bytes = Bytes :: from_source ( data. clone ( ) ) ;
627+ let _clone = bytes. clone ( ) ;
628+ let result = bytes. try_unwrap_owner :: < Vec < u8 > > ( ) ;
629+ assert ! ( result. is_err( ) ) ;
630+ }
631+
632+ #[ kani:: proof]
633+ #[ kani:: unwind( 16 ) ]
634+ pub fn check_try_unwrap_owner_wrong_type ( ) {
635+ let data: Vec < u8 > = Vec :: bounded_any :: < 16 > ( ) ;
636+ let bytes = Bytes :: from_source ( data) ;
637+ assert ! ( bytes. try_unwrap_owner:: <String >( ) . is_err( ) ) ;
638+ }
639+
640+ #[ kani:: proof]
641+ #[ kani:: unwind( 16 ) ]
642+ pub fn check_weakbytes_upgrade_some ( ) {
643+ let data: Vec < u8 > = Vec :: bounded_any :: < 16 > ( ) ;
644+ let bytes = Bytes :: from_source ( data. clone ( ) ) ;
645+ let weak = bytes. downgrade ( ) ;
646+ let upgraded = weak. upgrade ( ) . expect ( "upgrade" ) ;
647+ assert_eq ! ( upgraded. as_ref( ) , data. as_slice( ) ) ;
648+ }
649+
650+ #[ kani:: proof]
651+ #[ kani:: unwind( 16 ) ]
652+ pub fn check_weakbytes_upgrade_none ( ) {
653+ let data: Vec < u8 > = Vec :: bounded_any :: < 16 > ( ) ;
654+ let bytes = Bytes :: from_source ( data) ;
655+ let weak = bytes. downgrade ( ) ;
656+ drop ( bytes) ;
657+ assert ! ( weak. upgrade( ) . is_none( ) ) ;
658+ }
612659}
0 commit comments