File tree Expand file tree Collapse file tree 2 files changed +45
-2
lines changed Expand file tree Collapse file tree 2 files changed +45
-2
lines changed Original file line number Diff line number Diff line change @@ -353,3 +353,46 @@ unsafe impl SplitByteSlice for cell::RefMut<'_, [u8]> {
353353 } )
354354 }
355355}
356+
357+ #[ cfg( kani) ]
358+ mod proofs {
359+ use super :: * ;
360+
361+ fn any_vec ( ) -> Vec < u8 > {
362+ let len = kani:: any ( ) ;
363+ kani:: assume ( len <= isize:: MAX as usize ) ;
364+ vec ! [ 0u8 ; len]
365+ }
366+
367+ #[ kani:: proof]
368+ fn prove_split_at_unchecked ( ) {
369+ let v = any_vec ( ) ;
370+ let slc = v. as_slice ( ) ;
371+ let mid = kani:: any ( ) ;
372+ kani:: assume ( mid <= slc. len ( ) ) ;
373+ let ( l, r) = unsafe { slc. split_at_unchecked ( mid) } ;
374+ assert_eq ! ( l. len( ) + r. len( ) , slc. len( ) ) ;
375+
376+ let slc: * const _ = slc;
377+ let l: * const _ = l;
378+ let r: * const _ = r;
379+
380+ assert_eq ! ( slc. cast:: <u8 >( ) , l. cast:: <u8 >( ) ) ;
381+ assert_eq ! ( unsafe { slc. cast:: <u8 >( ) . add( mid) } , r. cast:: <u8 >( ) ) ;
382+
383+ let mut v = any_vec ( ) ;
384+ let slc = v. as_mut_slice ( ) ;
385+ let len = slc. len ( ) ;
386+ let mid = kani:: any ( ) ;
387+ kani:: assume ( mid <= slc. len ( ) ) ;
388+ let ( l, r) = unsafe { slc. split_at_unchecked ( mid) } ;
389+ assert_eq ! ( l. len( ) + r. len( ) , len) ;
390+
391+ let l: * mut _ = l;
392+ let r: * mut _ = r;
393+ let slc: * mut _ = slc;
394+
395+ assert_eq ! ( slc. cast:: <u8 >( ) , l. cast:: <u8 >( ) ) ;
396+ assert_eq ! ( unsafe { slc. cast:: <u8 >( ) . add( mid) } , r. cast:: <u8 >( ) ) ;
397+ }
398+ }
Original file line number Diff line number Diff line change 302302 clippy:: arithmetic_side_effects,
303303 clippy:: indexing_slicing,
304304) ) ]
305- #![ cfg_attr( not( any( test, feature = "std" ) ) , no_std) ]
305+ #![ cfg_attr( not( any( test, kani , feature = "std" ) ) , no_std) ]
306306#![ cfg_attr(
307307 all( feature = "simd-nightly" , any( target_arch = "x86" , target_arch = "x86_64" ) ) ,
308308 feature( stdarch_x86_avx512)
@@ -377,7 +377,7 @@ use std::io;
377377
378378use crate :: pointer:: invariant:: { self , BecauseExclusive } ;
379379
380- #[ cfg( any( feature = "alloc" , test) ) ]
380+ #[ cfg( any( feature = "alloc" , test, kani ) ) ]
381381extern crate alloc;
382382#[ cfg( any( feature = "alloc" , test) ) ]
383383use alloc:: { boxed:: Box , vec:: Vec } ;
You can’t perform that action at this time.
0 commit comments