File tree Expand file tree Collapse file tree 2 files changed +46
-3
lines changed Expand file tree Collapse file tree 2 files changed +46
-3
lines changed Original file line number Diff line number Diff line change @@ -353,3 +353,46 @@ unsafe impl SplitByteSlice for cell::RefMut<'_, [u8]> {
353
353
} )
354
354
}
355
355
}
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 302
302
clippy:: arithmetic_side_effects,
303
303
clippy:: indexing_slicing,
304
304
) ) ]
305
- #![ cfg_attr( not( any( test, feature = "std" ) ) , no_std) ]
305
+ #![ cfg_attr( not( any( test, kani , feature = "std" ) ) , no_std) ]
306
306
#![ cfg_attr(
307
307
all( feature = "simd-nightly" , any( target_arch = "x86" , target_arch = "x86_64" ) ) ,
308
308
feature( stdarch_x86_avx512)
@@ -377,9 +377,9 @@ use std::io;
377
377
378
378
use crate :: pointer:: invariant:: { self , BecauseExclusive } ;
379
379
380
- #[ cfg( any( feature = "alloc" , test) ) ]
380
+ #[ cfg( any( feature = "alloc" , test, kani ) ) ]
381
381
extern crate alloc;
382
- #[ cfg( any( feature = "alloc" , test) ) ]
382
+ #[ cfg( any( feature = "alloc" , test, kani ) ) ]
383
383
use alloc:: { boxed:: Box , vec:: Vec } ;
384
384
385
385
#[ cfg( any( feature = "alloc" , test) ) ]
You can’t perform that action at this time.
0 commit comments